您所在的位置: 首页> 住宿指南>EOS DAWN 3.0安装及智能合约初体验

EOS DAWN 3.0安装及智能合约初体验

2023-10-06 04:47
  1. EOS DAWN 3.0安装及智能合约初体验
  2. EOS Dawn 3.0智能合约--新格式
  3. EOS开发(一)--安装及常用介绍工具
  4. EOS开发(3)--货币合约分析
  5. EOS开发(2)--智能合约发布
  6. EOS Dawn 3.0智能合约--blog_view
  7. EOS智能合约开发(4):智能合约部署与调试(附编程示例)
  8. EOS Dawn 3.0安装指南
  9. EOS Hello智能合约分析
  10. 1. EOS智能合约开发-HelloWorld

EOS DAWN 3.0已正式发布。这次终于可以在mac上运行了。之前的版本经过各种折腾并没有真正跑起来。最多只是出块而已,但智能合约并没有成功执行。下面主要介绍如何在Mac上启动EOS DAWN3.0并运行货币智能合约。

下载源码

命令行执行
git克隆https://www.luxury-yachtsforsale.com/EOSIO/eos --recursive

构建EOS

下载源码后,我们可以使用EOS提供的自动构建脚本来构建EOS。

cd eos
./eosio_www.luxury-yachtsforsale.com

使用自动构建时,可能会构建不成功。我遇到了这个问题。 EOS需要先安装一些依赖项。理论上,自动脚本可以自动为您安装这些依赖项。但由于环境不同,有些依赖无法安装成功,需要自动安装和手动安装。说一下我遇到的问题

  1. MongoDB自动脚本安装失败,我手动执行了这个brew install mongodb安装成功。
  2. doxygen 自动脚本安装失败。问题是brew下载doxygen安装程序失败,但是在浏览器上可以下载。解决方法是先检查/usr/local/Library/Formula目录下是否存在doxygen.rb文件。这通常发生在 brew install doxygen 下载它时。如果存在doxygen.rb文件,可以根据安装brew install doxygenhttps://ftp.stack找到该文件的下载路径.nl/pub/users /dimitri/doxygen-1.8.14.src.tar.gz 下载此文件并将其放在 ~/Library/Caches/Homebrew 目录中。执行 brew install doxygen。这样doxygen就应该安装成功了,然后执行./eosio_www.luxury-yachtsforsale.com即可成功构建EOS。

当然,您也可以不使用自动构建脚本来构建EOS。请参考官方文档手动安装所有依赖项。这里我就不多介绍了。

启动单节点测试网络

成功安装EOS后,我们就可以在本地启动单节点测试网络了。

可以直接用命令启动单节点网络

nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin

这样做的缺点是每次启动都需要手动输入这么长的字符串,会比较麻烦。

EOS 为我们提供了一个配置文件,无需后续配置选项。默认的 EOS 配置位于 ~/Library/Application Support/eosio/nodeos/config 目录中。您可以使用 --config-dir 参数指定其他目录作为配置文件的存放目录。注意这个目录一开始是不存在的。可以在build/programs/nodeos目录下执行./nodeos,然后立即使用Ctrl + C闭包。 EOS会自动生成这个目录,并生成两个文件,config.ini和genesis.json。

图片.png

接下来我们需要修改config.ini文件,直接将以下配置复制到config.ini文件末尾。

# 在陈旧的链上启用生产,因为单节点测试链几乎总是陈旧的
启用陈旧生产=true
# 启用测试网生产者的区块生产
生产者名称 = eosio
# 加载区块生产者插件,这样就可以生产区块了
插件= eosio::生产者插件
# 钱包插件
插件 = eosio::wallet_api_plugin
# 以及 API 和 HTTP 插件
插件 = eosio::chain_api_plugin
插件 = eosio::http_plugin# 下面的验证步骤将使用它来查看帐户历史记录
插件 = eosio::account_history_api_plugin

官方文档显示genesis-json也需要修改。其实不需要修改。只需使用默认的即可。

最后执行eos/build/program/nodeos/目录下的./nodeos即可成功启动EOS。启动成功后,可以看到已经有区块生成了。

图片.png

运行货币智能合约

EOS已经默认提供了一些智能合约示例。我们直接使用就可以了。

创建钱包

每个智能合约都需要一个关联的帐户。账户需要使用钱包来创建,所以当我们启动EOS时我们需要加载钱包插件来创建账户。在前面的配置文件中,我们已经加载了钱包插件,所以这里不需要做任何额外的操作。

使用cleoswallet create命令创建钱包:

cd ~/eos/build/programs/cleos/
./cleos钱包创建

这将创建一个默认钱包并输出密码。保存以供以后使用。

加载Bios智能合约

eosio.bios合约设置为系统默认合约。这个合约可以让我们直接控制其他账户的资源分配以及一些私有的API调用。

$ ./cleos 设置合约 eosio ../../contracts/eosio.bios -p eosio

创建币币合约账户

为货币合约生成货币账户,需要两对公钥和私钥对,一对为public-OwnerKey,另一对为public-ActiveKey

cd ~/eos/build/programs/cleos/
./cleos 创建密钥 # OwnerKey
./cleos 创建密钥#ActiveKey

这将输出两个公钥和私钥对,如下所示:

私钥:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
公钥:EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

保存这两个公钥和私钥对,稍后会用到。

将生成的两个私钥导入钱包:

./cleos钱包导入
./cleos钱包导入

使用cleos create account命令生成货币账户。使用eosio来验证货币账户。 eosio 是我们在 genesis.json 文件中指定的生产者帐户。上面生成的公钥作为币种账户的OwnerKey和ActiveKey使用。

./cleos 创建账户 eosio 货币  

执行后会返回一个结果,如下:

执行的交易:fe5c9db1b5173dd4bd1ed79c23056104427ab62b0086cf117175abb322532d93 346字节101544个周期# eosio <= eosio::newaccount {"creator":"eosio","name":"currency","owner":{"threshold":1,"keys":[{"key":"EOS6eRfSRYNcrsLmLMomWbBk.. ”。 +

验证账户是否创建成功:

./cleos 获取账户币种

如果一切正常,输出将类似于以下内容:

{
  "account_name": "货币",
  “权限”:[{
      "perm_name": "活动",
      “父母”:“所有者”,
      “必需的身份验证”:{
        “阈值”:1,
        “键”:[{
            “密钥”:“EOS8kjeKVzFfqYyqcG8EnRLvMyLjJ7nmSM8p7QqDazGnjMEtQd1dp”,
            “重量”:1
          }
        ],
        “账户”:[]
      }
    },{
      "perm_name": "所有者",
      “父母”:“”,
      “必需的身份验证”:{
        “阈值”:1,
        “键”:[{
            “密钥”:“EOS6eRfSRYNcrsLmLMomWbBk317gz2TcBqArL7JwaqvaYkWYALe73”,
            “重量”:1
          }
        ],
        “账户”:[]
      }
    }
  ]
}

上传币合约到区块链

上传之前,我们可以验证一下区块链上是否已经有货币合约:

./cleos 获取代码货币
代码哈希:0000000000000000000000000000000000000000000000000000000000000

一串0表示区块链上还没有货币合约。

使用币币账户上传币币合约:

./cleos 设置合约货币../../contracts/currency

正常执行会返回transition_id的json字符串。

同样我们可以验证合约是否上传成功:

./cleos 获取代码货币

如果返回以下内容,则说明合约上传成功:

代码哈希:9b9db1a7940503a88535517049e64467a6e8f4e9e03af15e9968ec89dd794975

在使用货币合约之前,我们需要创建并发行这个货币:

./cleos 推送操作货币创建 '{"issuer":"currency","maximum_supply":"1000000.0000 CUR","can_freeze":"0","can_recall":"0","can_whitelist":" 0"}' --permissioncurrency@active
./cleos 推送操作货币发行 '{"to":"currency","quantity":"1000.0000 CUR","memo":""}' --permissioncurrency@active

接下来验证币种账户初始余额:

./cleos 获取表币货币账户
{
  “行”:[{
      “余额”:“1000.0000 CUR”,“冻结”:0,
      “白名单”:1
    }
  ],
  “更多”:假
}

可以看到币种账户有1000 CUR。

使用货币合约转账

使用币币合约的转账动作将钱从币币账户转账到eosio账户:

./cleos 推送操作货币转账 '{"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"我的第一笔转账"}' --权限货币@active

如果执行成功,会有类似如下的输出:

执行的交易:de83ee65f983be89bebd2fc5d5ba066acaadcdebdbfc15f8f1221b98f76551ea 271字节109135个周期
# 货币 <= 货币::转账 {"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"我的第一次转账"}
>> 转让
# eosio <=currency::transfer {"from":"currency","to":"eosio","quantity":"20.0000 CUR","memo":"我的第一笔转账"}

查看货币账户余额

我们先看一下eosio的余额:

./cleos 获取表币eosio账户
{
  “行”:[{
      “余额”:“20.0000 CUR”,
      “冻结”:0,“白名单”:1
    }
  ],
  “更多”:假
}

可以看到eosio账户已经有20 CUR

查看币种账户余额:

./cleos 获取表币货币账户
{
  “行”:[{
      “余额”:“980.0000 CUR”,
      “冻结”:0,
      “白名单”:1
    }
  ],
  “更多”:假
}

还可以看到币币账户最初有1000 CUR,转入了20到eosio账户,现在还剩下980 CUR。

这样一个简单的货币智能合约就完成了。这个货币合约有点类似于以太坊ERC20代币。操作感觉比较简单。