内容简介:使用在本文中,我们将创建一个简单的待办事项列表智能合约,用户可以在其中添加待办事项元素在合约目录中,创建一个新文件夹
使用 eosio::multi_index
接口实现针对EOS智能合约的CRUD操作,该接口带来了可与传统数据库进行比较的功能。
在本文中,我们将创建一个简单的待办事项列表智能合约,用户可以在其中添加待办事项元素 feed the cat
并将其标记为完成。
存储
在合约目录中,创建一个新文件夹 todo_contract
和一个同名的新文件CPP文件。
mkdir todo_contract cd todo_contract touch todo_contract.cpp vim todo_contract.cpp
从项目文件夹的根目录,执行以下命令:
eosiocpp -n todo_contract
这将为你提供以下文件夹结构:
. ├── todo_contract.cpp └── todo_contract.hpp 0 directories, 2 files
我们将使用ABI操作演示创建,删除和更新功能: create(author, id, description)
, destroy(author, id)
, complete(author, id)
我们的待办事项元素有3个简单的属性。
{ id, description, completed }
作为结构看起来像:
// @abi table todos i64 struct todo { uint64_t id; std::string description; uint64_t completed; uint64_t primary_key() const { return id; } EOSLIB_SERIALIZE(todo, (id)(description)(completed)) };
创建函数(Create)
create函数使用 emplace method 创建一个新的todo元素。
第一个参数是付款人,一个授权当前操作的有效帐户(因此允许对存储使用进行计费)
// @abi action void create(account_name author, const uint32_t id, const std::string& description) { todos.emplace(author, [&](auto& new_todo) { new_todo.id = id; new_todo.description = description; new_todo.completed = 0; });
销毁函数(Destroy)
erase 方法将从表中删除对象并退还现有付款人以存储它。
// @abi action void destroy(account_name author, const uint32_t id) { auto todo_lookup = todos.find(id); todos.erase(todo_lookup); eosio::print("todo#", id, " destroyed"); }
修改函数(Complete)
我们通过使用 modify 方法将完成属性从0更改为1,来完成我们的待办事项。
修改方法中使用的第二个参数是 payer
(account_name)。
传递0表示新修改的行的付款人与原始行相同。
如果新付款人与旧付款人相同,它只改变新旧对象之间不同的地方。
如果新付款人与旧付款人不同,则旧付款人将被拒绝使用现有对象存储并且新付款人将可以。
// @abi action void complete(account_name author, const uint32_t id) { auto todo_lookup = todos.find(id); eosio_assert(todo_lookup != todos.end(), "Todo does not exist"); todos.modify(todo_lookup, author, [&](auto& modifiable_todo) { modifiable_todo.completed = 1; }); eosio::print("todo#", id, " marked as complete"); }
表设置(Table Set up)
我们现在将设置容器,将其视为表。
typedef eosio::multi_index<N(todos), todo> todo_table; todo_table todos;
部署(Deployment)
EOS Asia的完整代码 在这儿
eosiocpp -o todo_contract.wast todo_contract.cpp eosiocpp -g todo_contract.abi todo_contract.cpp cleos --wallet-url http://wallet:5555 -u http://server:7777 set contract mynewaccount /eos/contracts/todo_contract -p mynewaccount
交互操作
Get
cleos --wallet-url http://wallet:5555 -u http://server:7777 get table mynewaccount todo todos
Create
cleos --wallet-url http://wallet:5555 -u http://server:7777 push action mynewaccount create '["mynewaccount", 1, "feed cat"]' -p mynewaccount
Complete
cleos --wallet-url http://wallet:5555 -u http://server:7777 push action mynewaccount complete '["mynewaccount", 1]' -p mynewaccount
Destroy
cleos --wallet-url http://wallet:5555 -u http://server:7777 push action mynewaccount destroy '["mynewaccount", 1]' -p mynewaccount
======================================================================
分享一个交互式的在线编程实战, EOS智能合约与DApp开发入门 :
本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
- web3j教程,主要是针对 java 和android程序员进行区块链以太坊开发的web3j详解。
- 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发,主要是介绍使用node.js、 mongodb 、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- python以太坊,主要是针对 python 工程师使用web3.py进行区块链以太坊开发的详解。
- php以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
- C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。
汇智网原创翻译,转载请标明出处。这里是 原文
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang 和本地数据存储 - 快速灵活的数据存储
- 收集和存储数据——数据仓库(一)
- Python3网络爬虫实战---32、数据存储:关系型数据库存储:MySQL
- 数据库的“行式存储”和“列式存储”
- Flutter持久化存储之数据库存储
- 关于python中数据存储大总结,涵盖文件系统和数据库存储两种方法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Applications (Hacking Exposed)
Joel Scambray、Mike Shema / McGraw-Hill Osborne Media / 2002-06-19 / USD 49.99
Get in-depth coverage of Web application platforms and their vulnerabilities, presented the same popular format as the international bestseller, Hacking Exposed. Covering hacking scenarios across diff......一起来看看 《Web Applications (Hacking Exposed)》 这本书的介绍吧!
XML、JSON 在线转换
在线XML、JSON转换工具
正则表达式在线测试
正则表达式在线测试