美文网首页Dapp开发eos技术研究
eos智能合约开发-04 钱包和账户之间操作

eos智能合约开发-04 钱包和账户之间操作

作者: uestcAries | 来源:发表于2018-08-30 18:06 被阅读65次

    准备
    • 智能合约之间的交互通过action和共享数据文件
    ○ 这个共享数据文件在我本机的位置是.local/share/eosio/nodeos/data/shared_mem,随着节点挖矿运行的时间越来越久,这个目录下的数据文件也越来越大。
    ○ 一个合约可以异步只读访问另一个合约的共享数据文件。
    ○ 针对其他读取权限,通过资源限制算法可以有效避免异步通信结果失真的问题。
    • 合约之间的两种交互模式:
    ○ 内联,意思就是直接采用内部函数体发起,调用其他函数的方式。这可以保证交易无阻碍执行,不必通知外部失败或者成功结果,同时内联也可保证交易始终处于同一作用域以及权限。
    ○ 延迟,通过生产者的判定来决定延后按时执行,可能会发生timeout的问题,但是这种方式可以跨多个作用域工作,并且可以携带着发送给它的合约权限。
    • action和transaction:
    ○ action是一个动作,账户和合约交互是通过action,可以单独发送一个action。
    ○ Transaction是一组动作。所有action都必须成功,该Transaction才会成功。
    ○ 接收到交易哈希表示节点成功接受了这个交易,也意味着其他生产者也有很大可能接收它。
    ○ 交易验证需要通过查看已打包区块中含有的交易历史来确定。

    上一个小节我们创建了钱包
    钱包的本质是一个私钥库, 用来授权发生在区块链的Action

    导入初始账户eosio的主秘钥到钱包
    所有新的blockchains, 都是通过主秘钥启动, 唯一初始化账户eosio, 要与区块链交互, 需要将这个初始化的私钥导入到你的钱包

    /root/.local/share/eosio/nodeos/config/config.ini
    # Key=Value pairs in the form <public-key>=<provider-spec>
    # Where:
    #    <public-key>       is a string form of a vaild EOSIO public key
    # 
    #    <provider-spec>    is a string in the form <provider-type>:<data>
    # 
    #    <provider-type>    is KEY, or KEOSD
    # 
    #    KEY:<data>         is a string form of a valid EOSIO private key which maps to the provided public key
    # 
    #    KEOSD:<data>       is the URL where keosd is available and the approptiate wallet(s) are unlocked (eosio::producer_plugin)
    #
    # 值为[公钥,私钥WIF编码的]
    signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
    
    
    cleos wallet unlock -n aries
    password: Unlocked: aries
    
    root@aries-virtual-machine:/# cleos wallet import -n aries --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
    imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
    

    然后加载 eosio.bios
    我们拥有了一个aries钱包,该钱包内部包含一个默认主密钥的账户eosio,默认的智能合约eosio.bios已经可以使用,这个合约是EOS很多基本action的基础系统,所以要保证这个合约的有效执行。这个合约可以让你能够直接控制资源分配,并且有权限访问API。在公链上,这个合约将管理已募集和待募集token,以储备带宽给CPU、内存以及网络活动使用

    重点记录:
    • 创建钱包
    • 导入账户
    • 默认合约eosio.bios,它的功能是控制资源分配。

    合约的执行

    root@aries-virtual-machine:/# cleos set contract eosio /home/aries/tmp/eos/build/contracts/eosio.bios -p eosio
    Reading WASM from /home/aries/tmp/eos/build/contracts/eosio.bios/eosio.bios.wasm...
    Publishing contract...
    executed transaction: bda3087d918553c93b98fff9f9b0136b75aa16d5c79fe82a10dd1168355d2966  3720 bytes  6455 us
    #         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001621260037f7e7f0060057f7e7e7e7e...
    #         eosio <= eosio::setabi                {"account":"eosio","abi":"0e656f73696f3a3a6162692f312e30050c6163636f756e745f6e616d65046e616d650f7065...
    warning: transaction executed locally, but may not be confirmed by the network yet    ] 
    

    • 命令行工具仍旧是使用cleos,通过set contract来执行指定合约,后面跟着账户名称(这里是默认的eosio,我们刚刚导入的),然后是指定合约的路径。
    • 命令最后的“-p eosio”的含义是:使用账户eosio(使用的是账户的私钥)来为这个action签名。
    • 读取 WAST/WASM文件(这个文件是被新部署到build目录下的)
    • 装配 WASM
    • 发布合约
    • 执行交易(合约也是一个交易),这里通过两个动作来生成一个交易,
    ○ setcode,code描述了合约是如何运行的。
    ○ setabi,abi描述了如何在二进制文件和json文件(代表了各种参数)中转换。

    相关文章

      网友评论

      • 8337ea5e8883:您好,看到您的文章质量非常高,想邀请您成为虫洞社区的首批优质内容签约作者。虫洞社区是专业的区块链技术学习社区。虫洞社区鼓励内容生产者产生高质量内容,并给予合理的回报,也希望能帮助内容消费者获得高质量的区块链内容,并让数字货币投资者获得有价值的投资洞见。同时,虫洞社区已经积累了大量的区块链深度从业者,便于作者建立个人品牌。不知道是否方便加您微信细聊?

      本文标题:eos智能合约开发-04 钱包和账户之间操作

      本文链接:https://www.haomeiwen.com/subject/sepdwftx.html