here is what i am trying to do :
- users will sign a specific action which will take their username, permission_name, smart_contract_name, action_name, public_key
- i am trying to assign the user username a new permission permission_name then linkauth the contract name and action name with a specified public key.
here is my code :
void bypasssign::link_permission(struct account_t& data,name permission,name contract_name,name sm_action){
link_auth_args link_args {
.account = data.name,
.code = contract_name,
.type = sm_action,
.requirement = permission
};
action linker = action(
permission_level(data.name, name("active")),
"eosio"_n,
"linkauth"_n,
std::move(link_auth_args)
);
linker.send();
}
void bypasssign::create_permission(struct account_t& data, name permission) {
key_weight active_pubkey_weight {
.key = data.active_key,
.weight = 1
};
authority active_auth {
.threshold = 1,
.keys = {active_pubkey_weight},
.accounts = {},
.waits = {}
};
recover_args recovery {
.account = data.name,
.permission = permission,
.parent = name("active"),
.auth = active_auth
};
action recover = action(
permission_level(data.name, name("active")),
"eosio"_n,
"updateauth"_n,
std::move(recovery)
);
recover.send();
}
the account_t struct only contains 2 attributes name and active_key. when i try to execute these function i get an error back from eosio
transaction declares authority '{"actor":"bypassasign1","permission":"active"}', but does not have signatures for it under a provided delay of 0 ms, provided permissions [{"actor":"bypassasign1","permission":"eosio.code"}], provided keys [], and a delay max limit of 3888000000 ms
anyone know what i am doing wrong? thanks.