zoukankan      html  css  js  c++  java
  • EOS开发基础之四:使用cleos命令行客户端操作EOS——智能合约之eosio.bios和eosio.token

    现实世界中的合约,简单地说,是一个参与活动的所有人都需要遵循的协议。合约可以是正式的法律合同(例如,金融交易),或者是简单的游戏规则。典型的活动可以是诸如资金转移(在金融合约的情况下)或游戏动作(在游戏合约的情况下)。

    EOSIO智能合约是在区块链上注册,并在EOSIO节点上执行的软件,它实现了一个“契约”的语义,其动作请求的总帐被存储在块链上。智能合约定义接口(动作、参数、数据结构)和实现接口的代码。代码被编译成一个规范的字节码格式,以便节点可以检索和执行,而合约执行的交易记录都会被存储在区块链上(例如,法律转让、游戏移动)。

    在EOS中,有五个基础的智能合约,分别是eosio.bios、eosio.token、 exchange和eosio.msig、eosio.system,下面我们就开始挨个挨个的聊聊怎么用这几个智能合约哈。

    1、eosio.bios(./cleos set contract eosio ../../contracts/eosio.bios -p eosio

    “./cleos set contract eosio ../../contracts/eosio.bios -p eosio”这条命令的意思是为eosio这个账户加载eosio.bios合约,-p eosio 是指授权的帐户是eosio,权限级别为active(默认)。

    这个合约用于管理链上的堆栈和非堆栈资源,通过确认用户持有的token控制资源分配,包括带宽、CPU以及内存资源。加载eosio.bios智能合约,如下图:

    2、eosio.token(./cleos set contract ${account} ../../contracts/eosio.token -p ${account}

    其实到目前为止,我们在cleos中的操作,多是基于钱包wallet和账户account的,和我们区块链的核心——token——还没有什么交集。

    eosio.token就是一个用于产生token——钱——的合约。

    利用该合约,我们可以创建很多可以由不同用户管理的运行在同一合约上的token。

    那么,我们需要为用户加载一个eosio.token,那我们就先得创建一个用于管理这个合约的account,我们把该account也命名为eosio.token吧。如下图,先生成两对密钥,解锁钱包,将私钥导入钱包,然后创建account,名为eosio.token

    key1:
    Private key: 5KdGLdpuM8SDcRWT6bHHS82vk4mLvow4BMSM87TU1ZC3dMd2e5R
    Public key: EOS6tZtVTFpbxhhW6qCa4ixES4vR5hWPycA17cUSftrcpHR22qQ8w
    key2:
    Private key: 5K3DgxGemuJmeTZay3f8uhkzw6KarbSZbvg2skVijutwsMawerV
    Public key: EOS82jRd6ejTwjEnrwRsmnTTCheG6twxxmtsJUp5icCXWcX123EWf

    现在我们已经创建了eosio.token账户了,那接下来就为它加载eosio.token合约吧:

    2.1加载eosio.token(命令:cleos set contract eosio.token ../../contracts/eosio.token -p eosio.token)

    这样就发布合约成功了(下边那段黄色的字,你们喜欢的话自己读一下是什么意思哈,我没心情看它,回头再想办法解决就是)

     2.2创建自己的货币(./cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' -p eosio.token)

    不说废话了,直接看执行结果吧。

    在这里,eosio这个账户被称为发行人,他现在拥有1000000000 SYS,还能够执行诸如冻结、召回账户和白化用户等操作。所以我们要发行新的SYS token,我们需要取得eosio这个账户的许可。

    上边执行的这条命令创建了一个名为SYS的新的token,其精度为4小数,最大供应量为1000000000SYS。

    2.3发行token给某账户(./cleos push action eosio.token issue '[ "${account}", "100.0000 SYS", "memo" ]' -p eosio)

    通过上边的命令,eosio这个用户给simayi发了100个SYS,现在这100个SYS就是可以用于流通的token了,下边我们来试试转账功能。

    2.4转账(./cleos push action eosio.token transfer '[ "${from}", "${to}", "25.0000 SYS", "m" ]' -p simayi)

    这钱要从simayi那里转到simaguang那,当然得通过simayi的同意了,虽然他们都姓司马,但是亲兄弟明算账嘛。否则系统都不认。

    通过我们小学时候的知识了解到,转账过后,simayi手里面应该还有75 SYS,而simaguang手里头应该是有25 SYS,下面我们通过两条命令来看看情况是不是这个情况吧。

    查simayi:./cleos get currency balance eosio.token simayi

    查simaguang:./cleos get currency balance eosio.token simaguang

    果然哈,我们没有计算错。

    另外我们也能够看出,这转账过程是不花钱的。

    但是,我们为啥看不到eosio这个发行者的token呢?你们猜为什么?

    好了,先到这里吧。

    下一节继续。

  • 相关阅读:
    uva 532 Dungeon Master
    hrbeu 哈工程 Tunnels
    poj 1088 滑雪
    hrbeu 哈工程 Eular Graph
    uva 567 Risk
    hrbeu 哈工程 Minimum time
    产品要不要做先回答的10个问题
    用icacls命令行给目录赋权
    SQL Server的FileStream和FileTable
    cygwin 离线安装包(包括vim,ssh,scp)
  • 原文地址:https://www.cnblogs.com/paluano/p/contract.html
Copyright © 2011-2022 走看看