eos智能合约的编写和调试

编译环境

在《EOS环境搭建》中已经编译并且安装了智能合约的编译工具链

 

合约调试

  1. nodeos配置

调试合约最好在本地搭建一个Nodeos测试节点,运行nodeos时,加入--contracts-console或者通过config.ini设置contracts-console = true。这样在nodeos日志中就会显示合约的详细信息。

  1. 合约中增加打印信息

合约支持的打印函数print.

举例:

Print(“hello”,name{user},”world”,count,”\n”)

 

第一个合约,Hello World

合约的编写需要学习官网文章:

https://developers.eos.io/eosio-home/docs/your-first-contract

 

需要c++ 11的经验

#include <eosio/eosio.hpp>

 

using namespace eosio; //需要使用eosio的命名空间

 

class [[eosio::contract]] hello : public contract {//基于eosio::contract 创建c++11标准的class

  public:

      using contract::contract;//引用基类 contract 的构造函数

 

      [[eosio::action]] //c++11 风格的属性

      void hi( name user ) {

         print( "Hello, ", user);

      }

};

这是个简单的合约,hi为一个Action(就是外部能够调用的函数)。该action打印用户输入的用户名。如果函数不希望被外部调用就不要加“[[eosio::action]]”修饰。

 

  1. 编译合约
eosio-cpp -abigen -o hello.wasm hello.cpp

 

  1. 部署合约

Eos中每个账户只有一个有效合约,可以部署多个,但只有最后一个合约可用

对于hello合约,可用创建一个专用的用户名。

例如:

cleos create account eosio hello EOSpublickeyxxxxxxxx -p eosio@active

 

部署合约:

cleos set contract hello CONTRACTS_DIR/hello -p hello@active

测试

cleos push action hello hi '["bob"]' -p bob@active

 

  1. 合约改进(require_auth)

void hi( name user ) {

   require_auth( user );

   print( "Hello, ", name{user} );

}

require_auth函数对参数user进行判断,判断action的执行者是否有响应权限。

第二个合约

数据持久化通过multi_index实现

参考官网

https://developers.eos.io/eosio-home/docs/data-persistence

代码实例

#include <eosio/eosio.hpp>

 

using namespace eosio;

 

class [[eosio::contract("addressbook")]] addressbook : public eosio::contract {

 

  public:

 

  private:

    struct [[eosio::table]] person { //指定了struct的属性为table

      name key;

      std::string first_name;

      std::string last_name;

      std::string street;

      std::string city;

      std::string state;

 

      uint64_t primary_key() const { return key.value;} //每个multi_index都需要设置主键

    };

 

    typedef eosio::multi_index<"people"_n, person> address_index; //定义一个名为“people”的表,_n 表示eosio::name

};

在合约中实例化一个multi_index表

address_index addresses(get_self(), get_first_receiver().value);
 

第一个参数为code,第二个参数为scope。根据code和scope确定一张表。

以上实例中,get_self()返回合约名称,get_first_receiver().value返回合约的账户名

 

修改表结构

Multi_index的表结构不能修改,如果你需要修改表结构,那么保存的所有数据都将被删除。

查找表中的一条记录

使用Multi_index的find方法

向表中插入数据

Multi_index的emplace方法可用添加数据

修改表中数据

Multi_index的modify方法可修改表中数据

删除表中数据

使用Multi_index的erase方法

 

使用cleos工具查询表中数据:

cleos get table addressbook addressbook people --lower alice --limit 1

其中第一个addressbook为账户名

第二个addressbook为scope

People为表名称

具体程序请参考官网的

https://developers.eos.io/eosio-home/docs/data-persistence实例。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、玩过EOS的都知道,EOS本身更新迭代非常之快,所以有些知识点可能与最新版有所出入,希望小伙伴理解!此文档适用于EOS-v1.0.5以上版本和v1.1.x版本,目前的v1.2.x可能会有极少部分出入,比如eosiocpp工具看更新说明再不用安装的状态下就能使用,目前还未测试。有兴趣的小伙伴可以留言交流。 2、当前文档目录结构介绍: #思考研究问题 1、如何保证EOS中发布的智能合约不被随意篡改? #玩转EOS智能合约代码 #玩转客户端cleos 1、先玩转与智能合约相关的操作 #使用eosiocpp工具编译智能合约生成abi文件和wast文件 #编译合约(无法通过) #安装build/programs下工具 #重新编译合约 #部署合约到账户 #购买RAM #测试调用部署的合约 #更新\升级已经部署过的智能合约(相对空的合约) #更新添加新的函数接口(action)合约 #有关require_auth的合约测试 2、玩转智能合约与数据库相关操作 #参考资料 #持久化API (Multi-Index) 1、一般来讲,对数据库的操作无外乎增删改查 2、表结构示例详解 3、Multi_index定义,建立数据表 4、实例化multi_index 5、操作数据,增删改查 #玩转table表 1、Table表producers 2、Table表global 3、Table表voters 4、Table表rammarket (获取RAM实时价格) 5、Table表refunds (查看账户退款信息) 6、Table表namebids (罗列参与竞拍的账户信息) 3、启动nodeos节点出现脏数据 4、查看账户抵押资产,抵押token,赎回token #查看账户余额(可用余额) #查看SYS货币信息,eosio.token是经营货币的合约 #查看公钥对应账户 #查看子账户(控制账户) #查看账户信息 #查看账户抵押信息 #钱不够那就转账,随便耍 #get transaction无结果了解一下 #卖出RAM(卖给系统账户eosio.ram),字节bytes #抵押token获取CPU和net资源 #赎回抵押token,默认三天后到账,执行后可查看账户状态
要开发一个NFT智能合约,你需要掌握Solidity编程语言和区块链技术。以下是一些步骤: 1. 了解NFT:首先,你需要了解NFT是什么以及它们在区块链上的作用。NFT代表非替代性令牌,这是一种数字资产,是唯一的,不可替代的,并在区块链上以智能合约的形式存储。 2. 设计合约:设计你的合约,包括定义NFT的属性和功能。你需要确定NFT的名称、描述、图像和其他元数据。你还需要定义如何创建、转移和销毁NFT。 3. 编写智能合约:使用Solidity编写你的智能合约代码。你需要定义NFT的结构和函数,例如创建、转移和销毁函数。确保你的代码是安全的,并遵循最佳实践。 4. 部署合约:将你的智能合约部署到区块链上。你需要选择一个适合你的区块链平台,例如以太坊、EOS或TRON,并使用相应的工具将合约部署到该平台上。 5. 测试合约:在合约上运行单元测试和集成测试,确保代码的正确性和安全性。你可以使用Truffle等测试框架来测试你的合约。 6. 发布合约:发布你的合约,让其他人可以使用它来创建、转移和销毁NFT。你可以在区块链上创建一个市场,让用户可以交易他们的NFT。 请注意,开发智能合约需要具备一定的技术能力和区块链知识。如果你是初学者,请先学习Solidity编程语言和区块链技术,然后再着手开发NFT智能合约
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值