EOS.IO Asked by AhmadKajjan on August 20, 2021
Hello guys i am trying to build a contract that act with eosio.token to make a transfer from my contract using inline action with the eosio.token contract
here my code
#include <eosio/eosio.hpp>
#include <eosio.token/eosio.token.hpp>
using namespace std;
using namespace eosio;
class [[eosio::contract("test")]] test:public eosio::contract{
private:
void make_transfer(name& from,name& to,asset& quantity,string& memo)
{
token::transfer_action transfer{"eosio.token"_n, {from, "active"_n}};
transfer.send(from,to,quantity, memo);
}
public:
test(name receiver,name code,datastream <const char*> ds):contract(receiver,code,ds){}
[[eosio::action]]
void trade(name from,name to ,asset fromcoin,asset tocoin,string memo)
{
make_transfer(from,to,fromcoin,memo);
}
};
i got these error
Error 3090003: Provided keys, permissions, and delays do not satisfy declared authorizations
Ensure that you have the related private keys inside your wallet and your wallet is unlocked.
Error Details:
transaction declares authority '{"actor":"alice","permission":"active"}', but does not have signatures for it under a provided delay of 0 ms, provided permissions [{"actor":"test","permission":"eosio.code"}], provided keys [], and a delay max limit of 3888000000 ms
pending console output:
I ran into the exact same issue. You have to add your smart contract to the active permission. Check out this answer, it will solve your problem:
Answered by mschoenebeck on August 20, 2021
You can't do this like what eosio.system does. eosio.system is usually deployed on eosio
, privileged account, that can send any action with any permission.
Any inline actions your contract send is executed with permission [email protected]
. If you want to make USER's token to be transferred by your contract, USER need to add [email protected]
to USER@active
. (but it means your contract can send any action with user's active permission)
In this case, it is better to make a notification handler than make your action transfer user's token.
[[eosio::on_notify(eosio.token::transfer)]]
void on_token_transfer(name from, name to, asset quantity, string memo) {
do_something_what_you_want_to_do_when_receiving_token();
}
Answered by conr2d on August 20, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP