智能合约入门

本教程的目的是演示如何设置
可用于试验智能合约的本地区块链。

本教程的第一部分将重点介绍:

  • 启动私人区块链
  • 创建钱包
  • 加载Bios合同
  • 创建帐户

本教程的第二部分将指导您创建和部署
自己的合同。

  • eosio.token合同
  • Exchange 合同
  • Hello World 合约

本教程假设您已经安装了EOSIO,nodeos并且cleos在您的路径中。

第1步:启动您的节点

您可以使用以下单个命令启动自己的单节点区块链:

$ nodeos -e -p eosio --plugin eosio::chain_api_plugin \
        --plugin eosio::history_api_plugin

此命令设置许多标志并加载一些可选插件,我们将在本教程的其余部分中使用这些插件。假设一切正常,您应该每0.5秒看一次块生成消息。

...
3165501ms thread-0   producer_plugin.cpp:944       produce_block        ] Produced block 00000a4c898956e0... #2636 @ 2018-05-25T16:52:45.500 signed by eosio [trxs: 0, lib: 2635, confirmed: 0]
3166004ms thread-0   producer_plugin.cpp:944       produce_block        ] Produced block 00000a4d2d4a5893... #2637 @ 2018-05-25T16:52:46.000 signed by eosio [trxs: 0, lib: 2636, confirmed: 0]

这意味着您的本地区块链是实时的,生成块,并准备好使用。

有关参数的更多信息,nodeos请使用:

nodeos --help

第2步:创建电子钱包

钱包是授权区块链上的操作所必需的私钥的存储库。这些密钥存储在使用为您生成的密码加密的磁盘上。此密码应存储在安全的密码管理器中。

$ cleos wallet create --to-console
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JuBXoXJ8JHiCTXfXcYuJabjF9f9UNNqHJjqDVY7igVffe3pXub"

注意:以前,在本教程中,钱包由您当地的管理人员nodeos通过eosio::wallet_api_plugin。不再使用此选项,因为cleos会自动启动keosd

$ cleos wallet unlock \
        --password PW5JuBXoXJ8JHiCTXfXcYuJabjF9f9UNNqHJjqDVY7igVffe3pXub
Unlocked: default

直接在命令行上使用您的密码并将其记录到您的bash历史记录中通常是不安全的,因此您也可以在交互模式下解锁:

$ cleos wallet unlock
password:

出于安全考虑,通常最好在不使用钱包时将钱包锁定。要在不关闭的情况下锁定钱包,nodeos您可以:

$ cleos wallet lock
Locked: default

在本教程的其余部分中,您将需要解锁您的钱包。

 

上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中(如下所示)

$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

第3步:加载BIOS合同

现在我们有一个带有eosio加载帐户密钥的钱包,我们可以设置默认的系统合同。出于开发目的,eosio.bios可以使用默认合同。通过此合同,您可以直接控制其他帐户的资源分配并访问其他特权API调用。在公共区块链中,此合同将管理标记的放样和取消,以保留CPU和网络活动的带宽以及合同的内存。

eosio.bios合同可以在中找到contracts/eosio.bios你的EOSIO源代码文件夹。下面的命令序列假定它是从EOSIO源的根目录执行的,但您可以通过指定完整路径从任何地方执行它${EOSIO_SOURCE}/build/contracts/eosio.bios

$ cleos set contract eosio build/contracts/eosio.bios -p eosio@active
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083  4068 bytes  10000 cycles
#         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e...
#         eosio <= eosio::setabi                {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...

此命令序列的结果是cleos生成具有两个操作的事务,eosio::setcodeeosio::setabi

代码定义了合同的运行方式,abi描述了如何在参数的二进制和json表示之间进行转换。虽然abi在技术上是可选的,但所有EOSIO工具都依赖于它以便于使用。

每次执行交易时,您都会看到如下输出:

executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083  4068 bytes  10000 cycles
#         eosio <= eosio::setcode               {"account":"eosio","vmtype":0,"vmversion":0,"code":"0061736d0100000001ab011960037f7e7f0060057f7e7e7e...
#         eosio <= eosio::setabi                {"account":"eosio","abi":{"types":[],"structs":[{"name":"set_account_limits","base":"","fields":[{"n...

这可以理解为:setcode定义的动作eosio是通过eosio合同执行的{args...}

#         ${executor} <= ${contract}:${action} ${args...}
> console output from this execution, if any

正如我们稍后会看到的,可以通过多个合同处理操作。

这次电话会议的最后一个论点是-p eosio@active。这告诉cleos我们使用eosio帐户的活动权限签署此操作,即使用eosio我们之前导入的帐户的私钥对操作进行签名。

 

第4步:创建帐户

现在我们已经设置了基本系统合同,我们可以开始创建自己的帐户。我们将创建两个帐户,user并且tester我们需要将密钥与每个帐户相关联。在此示例中,两个帐户将使用相同的密钥。

为此,我们首先为帐户生成密钥。

$ cleos create key
Private key: 5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR
Public key: EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4

然后我们将此密钥导入我们的钱包:

$ cleos wallet import --private-key 5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR
imported private key for: EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4

注意:请务必使用cleos命令生成的实际键值,而不是上面示例中显示的键值!

密钥不会自动添加到钱包中,因此跳过此步骤可能会导致您失去对帐户的控制权。

 

创建两个用户帐户

接下来,我们将创建两个帐户,usertester使用我们在上面创建和导入的密钥。

$ cleos create account eosio user EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
executed transaction: 8aedb926cc1ca31642ada8daf4350833c95cbe98b869230f44da76d70f6d6242  364 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"user","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxentZZ...

$ cleos create account eosio tester EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
executed transaction: 414cf0dc7740d22474992779b2416b0eabdbc91522c16521307dd682051af083 366 bytes  1000 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"tester","owner":{"threshold":1,"keys":[{"key":"EOS7ijWCBmoXBi3CgtK7DJxentZZ...

注:create account子命令需要两个按键,一个是OwnerKey(这在生产环境中应保持高度安全),一个用于ActiveKey。在本教程示例中,两者都使用相同的密钥。

因为我们正在使用,所以eosio::history_api_plugin我们可以查询由我们的密钥控制的所有帐户:

$ cleos get accounts EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
{
  "account_names": [
    "tester",
    "user"
  ]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值