EOS开发(2) -- 发布智能合约

eos.png

目录

EOS开发(1) -- 安装及常用工具介绍
EOS开发(2) -- 发布智能合约
EOS开发(3) -- currency合约分析

之前我写过一篇文章,如何在以太坊上构建dapp,感兴趣的可以先去看下以太坊上如何编写发布智能合约的,eos现在测试链3.0还没有发布,所以相比以太坊来说工具还不完善,所以想要深入了解的话需要花点功夫研究.

EOS 常用命令介绍

  • eosd
eosd 是 eos的核心后台进程,想钱包账户查询服务,生产区块服务都是依赖这个进程的启动
  • eosc
eosc 用来和eosd暴露出的rest接口交互的一个命令行工具为了使用eosc,
你需要指定eosd实例的ip地址和端口号,执行以下eosc可以看到下面列出的各种用法

$ ./eosc
ERROR: RequiredError: Subcommand required
Command Line Interface to Eos Client
Usage: ./eosc [OPTIONS] SUBCOMMAND

Options:
  -h,--help                   Print this help message and exit 
  # 下面这个用来指定eosd实例ip,默认本地地址
  -H,--host TEXT=localhost    the host where eosd is running 这
  # 下面用来指定端口号 默认 8888 
  -p,--port UINT=8888         the port where eosd is running
  --wallet-host TEXT=localhost
                              the host where eos-walletd is running
  --wallet-port UINT=8888     the port where eos-walletd is running
  -v,--verbose                output verbose messages on error

Subcommands:
  # 获取版本信息
  version                     Retrieve version information
  # 创建钱包 或者账户等命令
  create                      Create various items, on and off the blockchain
  # 去区块链上查询的命令
  get                         Retrieve various items and information from the blockchain
  # 发布或者更新智能合约命令
  set                         Set or update blockchain state
  # 账户间转账的命令
  transfer                    Transfer EOS from account to account
  # 点对点网络节点交互连接的命令
  net                         Interact with local p2p network connections
  # 和钱包交互的命令
  wallet                      Interact with local wallet
  # 执行基准测试的命令
  benchmark                   Configure and execute benchmarks
  # 推消息到链上的命令
  push       Push arbitrary transactions to the blockchain

发布合约前准备工作

  • 创建一个钱包
    创建钱包前我们需要知道一个钱包可能有多个账户,账户之间是交互的主体,eos可以锁定钱包来控制该钱包下所有账户资金的安全,所以首先我们需要创建一个钱包,然后再创建一些账户,把这些账户的私钥导入到钱包中
cd ~/eos/build/programs/eosc/
./eosc wallet create 
上面命令会输出一个密码 这个密码是用来锁定或者介绍钱包用的 这个需要保存好,而且会生成一个名为的default钱包
  • 此时我们default钱包里没有账户所以我们要导入一个账户,还记得上一节我们备份的genisis.json.back那个文件吗,这个文件中有个inita账户的私钥,我们可以把它导入到我们的钱包中
./eosc wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
  • 创建秘钥对
    因为eos提供了权限控制的概念,提供了有owner 和 active的角色,owner代表所有者,active代表可以操作(其实这两个都是特别高的权限,都能做任何交易上的操作,只是owner权限更高一点),eos 创建账户需要指定 owner key 和 active key,所以我们需要先创建两对key
cd ~/eos/build/programs/eosc/
$ ./eosc create key
Private key: 5JL6auvLndKnbtTk63EjPFVZ2giFKiUZo97siZx5PXcXsbQVEcq
Public key: EOS5U7dBVwkwiUvsBBYuhR2yhkWYXYCK5mi6JgZjE7jwvXyxbArd1 # owner key

$ ./eosc create key
Private key: 5JXgdQwueP9WNXpYWkQkRgL18LEvVy4e9KwyAPzdVxdT9ibqVDW
Public key: EOS5HUmMgJRoxiuPdeiGpbCJvQ7pGkSAEKV45d1WVbkkN8vFHWjYJ # active key

每执行一次create key ,都会生成一对公私钥对
  • 创建账户
./eosc create account inita test  PUBLIC_KEY_1(owner_key) PUBLIC_KEY_2(active_key)
上面的命令相当于创建了一个test用户,因为inita是我们已经导入进来的,这里inita可以当做test的创建者,key1,key2把我们上面生成的两个公钥输入进去就ok了

$ ./eosc create account inita test EOS5U7dBVwkwiUvsBBYuhR2yhkWYXYCK5mi6JgZjE7jwvXyxbArd1 EOS5HUmMgJRoxiuPdeiGpbCJvQ7pGkSAEKV45d1WVbkkN8vFHWjYJ
441183ms            main.cpp:1195                 main                 ] Failed with error: Assert Exception (10)
status_code == 200: Error code 401
: {"code":401,"message":"UnAuthorized","details":"signatures do not satisfy declared authorizations (3030002)\nTransaction declares authority '{\"account\":\"inita\",\"permission\":\"active\"}', but does not have signatures for it.\n"}

参数替换,执行后我们发现上面执行失败,提示未授权,其实是我们还没有把刚刚创建的active 秘钥导入钱包

  • 导入创建的active key 秘钥到钱包
$ ./eosc wallet import 5JXgdQwueP9WNXpYWkQkRgL18LEvVy4e9KwyAPzdVxdT9ibqVDW
imported private key for: EOS5HUmMgJRoxiuPdeiGpbCJvQ7pGkSAEKV45d1WVbkkN8vFHWjYJ

可以看到导入成功

  • 再次执行创建账户 test
$ ./eosc create account inita test EOS5U7dBVwkwiUvsBBYuhR2yhkWYXYCK5mi6JgZjE7jwvXyxbArd1 EOS5HUmMgJRoxiuPdeiGpbCJvQ7pGkSAEKV45d1WVbkkN8vFHWjYJ
{
  "transaction_id": "76f574b783e3c67599047009c84acb72e2be3d1c08c1b5e6f303d0f19be99b60",
  "processed": {
    "ref_block_num": 36260,
    "ref_block_prefix": 3203619337,
    "expiration": "2018-03-14T15:19:25",
    "scope": [
      "eos",
      "inita"
    ],
    "signatures": [
      "20422d4f3f4900344ef774c65e5704fa1abea3796e9353eda466478b80d47d59e54d00cd9e1c65a3507242cb91eebc0f52334d21f129db1494ee3d832ddf9b85ac"
    ],
    "messages": [{
        "code": "eos",
        "type": "newaccount",
        "authorization": [{
            "account": "inita",
            "permission": "active"
          }
        ],
        "data": {
          "creator": "inita",
          "name": "test",
          "owner": {
            "threshold": 1,
            "keys": [{
                "key": "EOS5U7dBVwkwiUvsBBYuhR2yhkWYXYCK5mi6JgZjE7jwvXyxbArd1",
                "weight": 1
              }
            ],
            "accounts": []
          },
          "active": {
            "threshold": 1,
            "keys": [{
                "key": "EOS5HUmMgJRoxiuPdeiGpbCJvQ7pGkSAEKV45d1WVbkkN8vFHWjYJ",
                "weight": 1
              }
            ],
            "accounts": []
          },
          "recovery": {
            "threshold": 1,
            "keys": [],
            "accounts": [{
                "permission": {
                  "account": "inita",
                  "permission": "active"
                },
                "weight": 1
              }
            ]
          },
          "deposit": "0.0001 EOS"
        },
        "hex_data": "000000000093dd74000000000090b1ca0100000001024c59ba35833eabc71d794ed79ba8ab26a232ddd4c4790c2282f20200cc0baf73010000010000000102343387e05944b65216def1599960aca2d6a03adcfd37930b5aac21b97f4c5839010000010000000001000000000093dd7400000000a8ed32320100010000000000000004454f5300000000"
      }
    ],
    "output": [{
        "notify": [],
        "deferred_trxs": []
      }
    ]
  }
}

可以看到执行成功了,是这样的创建账户前需要创建者账户里有钱,因为eos基于dpos一种pos的变种,有stake(eos token)才能去使用资源,这笔钱会从创建者账户里扣除,这里也就是inita

  • 查询test账户信息
$ ./eosc get account test
{
  "account_name": "test",
  "eos_balance": "0.0000 EOS",
  "staked_balance": "0.0001 EOS",
  "unstaking_balance": "0.0000 EOS",
  "last_unstaking_time": "2106-02-07T06:28:15",
  "permissions": [{
      "perm_name": "active",
      "parent": "owner",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS5HUmMgJRoxiuPdeiGpbCJvQ7pGkSAEKV45d1WVbkkN8vFHWjYJ",
            "weight": 1
          }
        ],
        "accounts": []
      }
    },{
      "perm_name": "owner",
      "parent": "",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS5U7dBVwkwiUvsBBYuhR2yhkWYXYCK5mi6JgZjE7jwvXyxbArd1",
            "weight": 1
          }
        ],
        "accounts": []
      }
    }
  ]
}

可以看到 "staked_balance": "0.0001 EOS",表明test账户里有0.0001个eos,不过这写token被锁定了

  • 部署currency合约
$ ./eosc set  contract test  ../../contracts/currency/currency.wast ../../contracts/currency/currency.abi
test 这里表示合约发布的账户

执行命令后后你会看到返回一个带有transaction_id的json字符串,说明部署成功了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354