I have written one smart contract for insert, update and delete data. The smart contract is compiled and deployed to the two accounts. I insert data using calling the action upsert, this transaction was successful. Same I delete data using action erase, this transaction also gets success. but when I try to get data using
cleos get table varshaccount member people
and
cleos get table memberacc member people
it returns empty. Below is my code:
#include <eosio/eosio.hpp>
#include <eosio/print.hpp>
#include <string>
using namespace eosio;
using std::string;
class [[eosio::contract("member")]] member : public eosio::contract {
public:
using contract::contract;
member(name receiver, name code, datastream<const char*> ds):contract(receiver, code, ds) {}
[[eosio::action]]
void upsert(name user, std::string first_name, std::string last_name, std::string contact, std::string address) {
require_auth( user );
member_index addresses( get_self(), get_first_receiver().value );
auto iterator = addresses.find(user.value);
if( iterator == addresses.end() )
{
//user is not in table so add new record
addresses.emplace(user, [&]( auto& row ) {
row.key = user;
row.first_name = first_name;
row.last_name = last_name;
row.contact = contact;
row.address = address;
});
}
else {
//user is in table so modify
addresses.modify(iterator, user, [&]( auto& row ) {
row.key = user;
row.first_name = first_name;
row.last_name = last_name;
row.contact = contact;
row.address = address;
});
}
}
[[eosio::action]]
void erase(name user) {
require_auth(user);
member_index addresses( get_self(), get_first_receiver().value);
auto iterator = addresses.find(user.value);
check(iterator != addresses.end(), "Record does not exist");
addresses.erase(iterator);
}
private:
struct [[eosio::table]] memberinfo
{
name key;
std::string first_name;
std::string last_name;
std::string contact;
std::string address;
uint64_t primary_key() const { return key.value;}
};
typedef eosio::multi_index<"people"_n, memberinfo> member_index;
};
Here is my abi:
{
"____comment": "This file was generated with eosio-abigen. DO NOT EDIT ",
"version": "eosio::abi/1.1",
"types": [],
"structs": [
{
"name": "erase",
"base": "",
"fields": [
{
"name": "user",
"type": "name"
}
]
},
{
"name": "memberinfo",
"base": "",
"fields": [
{
"name": "key",
"type": "name"
},
{
"name": "first_name",
"type": "string"
},
{
"name": "last_name",
"type": "string"
},
{
"name": "contact",
"type": "string"
},
{
"name": "address",
"type": "string"
}
]
},
{
"name": "upsert",
"base": "",
"fields": [
{
"name": "user",
"type": "name"
},
{
"name": "first_name",
"type": "string"
},
{
"name": "last_name",
"type": "string"
},
{
"name": "contact",
"type": "string"
},
{
"name": "address",
"type": "string"
}
]
}
],
"actions": [
{
"name": "erase",
"type": "erase",
"ricardian_contract": ""
},
{
"name": "upsert",
"type": "upsert",
"ricardian_contract": ""
}
],
"tables": [
{
"name": "people",
"type": "memberinfo",
"index_type": "i64",
"key_names": [],
"key_types": []
}
],
"ricardian_clauses": [],
"variants": []
}
Note: The account varshaccount is also used to deploy another smart contract before. So, I created new account that is memberacc, but facing same issue.