首先,目前dawn-4.1, dawn-4.2使用inline action是会报如下错误

transaction declares authority '{"actor":"hello.code","permission":"active"}', but does not have signatures for it under a provided delay of 0 ms

这个问题是4.0以后inline action的权限发生变化导致的。这个改动在eos官网的#3013这个issue讨论BM有提到过

核心是为智能合约账号添加eosio.code permission,比如hello.code调用hello.target智能合约,需要添加如下permission

cleos set account permission args.user active '{"threshold": 1,"keys": [{"key":"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV", "weight":1}],"accounts": [{"permission":{"actor":"hello.code","permission":"eosio.code"},"weight":1}]}' owner -p args.user@owner

代码

新建两个contract:  hello.code和hello.target

hello.target代码如下

hello.code的代码:

class hello : public eosio::contract {

public:

using contract::contract;

/// @abi action

void hi( account_name from, account_name to) {

require_auth(from);

print( "Hello, from:", name{from}, ", to:", name{to});

action(

//这里{to, active}必须授权给{_self, eosio.code}

permission_level{to, N(active)},

//调用 hello.target合约 的'callme' action

N(hello.target), N(callme),

std::make_tuple(to)

).send();

}

};

核心就是上面的红色字体的内容action(xx).send(),具体参数的含义是:

Action(permssion_level, other_contract_account_name, method, args)

所以:

action(permission_level{to, N(active)},

N(hello.target), N(callme),

std::make_tuple(to)

).send();

这个等价于如下命令

$cleos push action hello.target callme '["to"]' -p to

编译

请参考我的博文【EOS编写HelloWorld智能合约】

测试

//cleos create account只适合本地私有链,其他网络需要使用cleos system newaccount命令

$cleos create account eosio hello.code $KEY_PUB_1 $KEY_PUB_1
$cleos set contract hello.code ./hello -p hello.code
$cleos create account eosio args.user $KEY_PUB_2 $KEY_PUB_2
$cleos create account eosio hello.target $KEY_PUB_3 $KEY_PUB_3
$cleos create account eosio args.user1 $KEY_PUB_4 $KEY_PUB_4
$cleos set contract hello.target ./hello.target -p hello.target
$cleos set account permission args.user1 active '{"threshold": 1,"keys": [],"accounts": [{"permission":{"actor":"hello.code","permission":"eosio.code"},"weight":1}]}' owner -p args.user1@owner
$cleos push action hello.code hi '["args.user", "args.user1"]' -p args.user

源码一键实践

从以下github网页下载源码,即可一键实践执行该智能合约

     https://github.com/itleaks/eos-contract/tree/master/callcontract-exp/

/********************************

* 本文来自CSDN博主"爱踢门"

* 转载请标明出处:http://blog.csdn.net/itleaks

******************************************/

如果你对EOS,ETH技术及开发感兴趣,请入QQ群讨论: 829789117


如需实时查看最新文章,请关注公众号"区块链斜杠青年",一起探索区块链未来

[EOS源码分析]7.EOS智能合约开发实践之合约调用合约(inline action)相关推荐

  1. [EOS源码分析]1.EOS源码编译运行

    本文所有实践都是基于EOS dawn-v4.1.0,请切到该分支然后实践 切换命令:git checkout dawn-v4.1.0 目前网络上都是针对老版EOS2.0源码编译的文章,我在mac上参考 ...

  2. [EOS源码分析]4.EOS源码调试

    在[EOS源码编译运行]一文已经详细描述了EOS源码编译.但是阅读代码,光跑代码是不够的,必须要可以调试.一搜发现网上没有相关的文章,只好自己探索折腾.不过很快发现其实EOS已经为我们做好了的,只需带 ...

  3. [EOS源码分析]6.EOS特殊智能合约eosio

    这里说的eosio智能合约不是泛指eos的智能合约,它是一个特殊的具体的合约.它本事可大了,我们一起来看看它有哪些功能 负责智能合约部署 大家有注意到如下红色字体的log吗 $ cleos set c ...

  4. [EOS源码分析]5.EOS编写HelloWorld智能合约及各种坑

    本文所有实践都是基于EOS dawn-v4.1.0,请切到该分支然后实践 切换命令:git checkout dawn-v4.1.0 HelloWorld源码 #include <eosioli ...

  5. [EOS源码分析]10.EOS区块同步及生产

    本文所有实践都是基于EOS v1.0.1,请切到该分支然后对比源码 切换命令:git checkout v1.0.1 提到区块生产和同步,我们肯定有几个疑问? 节点同步 1)节点从哪里同步数据    ...

  6. [EOS源码分析]2.EOS账号钱包密钥等基本概念及操作实践

    本文所有实践都是基于EOS dawn-v4.1.0,请切到该分支然后实践 切换命令:git checkout dawn-v4.1.0 cleos cleos应用程序是用户端命令行交互模块,用于解析用户 ...

  7. eos源码分析和应用(一)调试环境搭建

    转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...

  8. EOS源码分析:transaction的一生

    最近在处理智能合约的事务上链问题,发现其中仍旧有知识盲点.原有的认识是一个事务请求会从客户端设备打包签名,然后通过RPC传到非出块节点,广播给超级节点,校验打包到可逆区块,共识确认最后变为不可逆区块. ...

  9. EOS源码分析(6)Token

    # Token(通证) 区块链一直就有币圈和链圈之分,币圈的人有的埋头挖矿,有的专卖矿机,有的专心炒币,还有的搬砖套利做交易.而链圈的人则更关注区块链技术研发及应用.之前这两个圈子间相互鄙视,谁也看不 ...

最新文章

  1. 记录-JQuery日历插件My97DatePicker日期范围限制
  2. 遍历二叉树的神级方法(Morris)
  3. MATLAB知识点1
  4. libudev-dev 错误 libudev1 (= 204-5ubuntu20) 但是 204-5ubuntu20.5 正要被安装 解决方法
  5. 使用Python实现简易的数据标注工具
  6. 【yarn】INFO ipc.Client Retrying connect to server xxx 8032 Already tried 0 time(s)
  7. 怎么打开jsp文件目录_ppt转换成pdf怎么转?我选择这个办法
  8. spring5源码-aop
  9. 看博客学学Android(二十一)
  10. thinkphp在IIS7.5+环境下部署出现的URL重写问题解决方法
  11. OpenOCD 依赖的deb包
  12. Springmvc集成CXF请看教程二
  13. vim amp; emacs color Scheme
  14. 自定义设置软件的提示声音
  15. 基于udp的服务器消息转发(群发)
  16. 苹果宣布前CEO史蒂夫·乔布斯逝世
  17. vue3 + js-cookie加密解密(普通版本/TS版本)
  18. MySQL binlog时间异常分析
  19. python实习——03
  20. innerText 与 innerHtml的区别 (一)

热门文章

  1. 人力资源战略规划新思考
  2. 浮点数的IEEE745标准表示
  3. python:shape和reshape函数基本讲解
  4. 【mysql的日期和时间类型】
  5. Python之保留小数点后n位、向上取整、向下取整以及四舍五入函数
  6. 分布式技术原理与实战45讲--06 加餐1:如何准备一线互联网公司面试?
  7. 代理arp 无故arp 反向arp
  8. restcontrol 注解
  9. linux sh解释器
  10. java web开发(一) Java Web开发框架对比