ETH与EOS两者智能合约进行简单的对比。

1、编译智能合约(合约编译成.wasm与.abi格式后即可部署到区块链)

[root@C03-12U-26 testcontract]# cat testcontract.cpp
#include <eosiolib/eosio.hpp> class [[eosio::contract]] testcontract : public eosio::contract
{
public:
testcontract( eosio::name receiver, eosio::name code, eosio::datastream<const char*> ds )
: eosio::contract(receiver, code, ds), _students(receiver, code.value)
{} //添加学生
[[eosio::action]]
void add(eosio::name user, std::string studentName,std::string studentGender,uint32_t studentAge,uint32_t studentHeight)
{
require_auth(user);
eosio::print("Add student ", studentName);
_students.emplace(get_self(), [&](auto& p) {
p.id = _students.available_primary_key();
p.studentName = studentName;
p.studentGender = studentGender;
p.studentAge = studentAge;
p.studentHeight = studentHeight;
});
} //根据主键删除学生
[[eosio::action]]
void del(eosio::name user, uint64_t id)
{
require_auth(user);
eosio::print("Del student", id);
auto itr = _students.find(id);
if (itr != _students.end()) {
_students.erase(itr);
}
} //根据主键修改学生
[[eosio::action]]
void update(eosio::name user, uint64_t id,std::string studentName,std::string studentGender,uint32_t studentAge,uint32_t studentHeight)
{
require_auth(user);
eosio::print("update student", studentName);
auto itr = _students.find(id);
if (itr != _students.end())
{
_students.modify(itr, user, [&]( auto& p ) {
p.studentName = studentName;
p.studentGender = studentGender;
p.studentAge = studentAge;
p.studentHeight = studentHeight;
});
}
} //清空表,待定
[[eosio::action]]
void clear(eosio::name user)
{
require_auth(user);
std::vector<uint64_t> keysForDeletion;
for(auto& item : _students) {
keysForDeletion.push_back(item.id);
} for (uint64_t key : keysForDeletion) {
eosio::print("remove from _students ", key);
auto itr = _students.find(key);
if (itr != _students.end()) {
_students.erase(itr);
}
}
} //private: -- not private so the cleos get table call can see the table data.
// create the multi index tables to store the data
struct [[eosio::table]] students
{
uint64_t id; // primary key
std::string studentName;
std::string studentGender;
uint32_t studentAge;
uint32_t studentHeight; uint64_t primary_key() const { return id; }
uint64_t by_age() const {return studentAge; }
}; //数据表根据age排序
typedef eosio::multi_index<"students"_n, students, eosio::indexed_by<"studentage"_n, eosio::const_mem_fun<students, uint64_t, &students::by_age>>> studentstable; //students数据库表
studentstable _students;
}; EOSIO_DISPATCH( testcontract, (add)(del)(update)(clear))

2、部署智能合约

解锁账号钱包

cleos -u https://jungle2.cryptolions.io:443  wallet unlock -n zmcheng-wallet

部署合约

cleos -u https://jungle2.cryptolions.io:443 set contract zmcheng12345 /root/github.com/testcontract -p zmcheng12345@active

Reading WASM from /root/github.com/testcontract/testcontract.wasm...
Publishing contract...
executed transaction: 785f421fe911a142b7cc4b15131cf3f4947847531ed8c52150aa148fe405ea0d 7536 bytes 1560 us
# eosio <= eosio::setcode {"account":"zmcheng12345","vmtype":0,"vmversion":0,"code":"0061736d0100000001d0012060000060037f7e7e0...
# eosio <= eosio::setabi {"account":"zmcheng12345","abi":"0e656f73696f3a3a6162692f312e3100050361646400050475736572046e616d650...
warning: transaction executed locally, but may not be confirmed by the network yet

调用合约(增删改查)

[root@C03-12U-26 testcontract]# cleos -u https://jungle2.cryptolions.io:443 push action zmcheng12345 add '["zmcheng12345","zmcheng","male",25,170]' -p zmcheng12345@active
executed transaction: a64271659aea1ce07fd05a4ff1bb0188c441de04263f3a18b819cbee205d2bbd 128 bytes 273 us
# zmcheng12345 <= zmcheng12345::add {"user":"zmcheng12345","studentName":"zmcheng","studentGender":"male","studentAge":25,"studentHeight...
>> Add student zmcheng
warning: transaction executed locally, but may not be confirmed by the network yet ]
[root@C03-12U-26 testcontract]# cleos -u https://jungle2.cryptolions.io:443 get table zmcheng12345 zmcheng12345 students
{
"rows": [{
"id": 0,
"studentName": "zmcheng",
"studentGender": "male",
"studentAge": 25,
"studentHeight": 170
},{
"id": 1,
"studentName": "www",
"studentGender": "male",
"studentAge": 26,
"studentHeight": 170
}
],
"more": false
}
[root@C03-12U-26 testcontract]# cleos -u https://jungle2.cryptolions.io:443 push action zmcheng12345 update '["zmcheng12345",1,"www","male",12,123]' -p zmcheng12345@active
executed transaction: 765c35452964de54771c3fe505daad272a8a53ec61954a2cc43350f7f84e86e3 128 bytes 213 us
# zmcheng12345 <= zmcheng12345::update {"user":"zmcheng12345","id":1,"studentName":"www","studentGender":"male","studentAge":12,"studentHei...
>> update studentwww
warning: transaction executed locally, but may not be confirmed by the network yet ]
[root@C03-12U-26 testcontract]# cleos -u https://jungle2.cryptolions.io:443 get table zmcheng12345 zmcheng12345 students
{
"rows": [{
"id": 0,
"studentName": "zmcheng",
"studentGender": "male",
"studentAge": 25,
"studentHeight": 170
},{
"id": 1,
"studentName": "www",
"studentGender": "male",
"studentAge": 12,
"studentHeight": 123
}
],
"more": false
}
[root@C03-12U-26 testcontract]#
[root@C03-12U-26 testcontract]# cleos -u https://jungle2.cryptolions.io:443 push action zmcheng12345 del '["zmcheng12345",1]' -p zmcheng12345@active
executed transaction: 1a64a42ebccac0f9b7061c42a0fa8daaebe7b1a18db1cb058fe479608ee9170a 112 bytes 255 us
# zmcheng12345 <= zmcheng12345::del {"user":"zmcheng12345","id":1}
>> Del student1
warning: transaction executed locally, but may not be confirmed by the network yet ]
[root@C03-12U-26 testcontract]# cleos -u https://jungle2.cryptolions.io:443 get table zmcheng12345 zmcheng12345 students
{
"rows": [{
"id": 0,
"studentName": "zmcheng",
"studentGender": "male",
"studentAge": 25,
"studentHeight": 170
}
],
"more": false
}

  

EOS测试链智能合约部署调用的更多相关文章

  1. Solidity truffle,部署合约到Ropsten测试链或主链,调用合约(转)

    Solidity truffle,部署合约到Ropsten测试链或主链,调用合约 转 https://blog.csdn.net/houyanhua1/article/details/89010896 ...

  2. EOS智能合约开发(四):智能合约部署及调试(附编程示例)

    EOS智能合约开发(一):EOS环境搭建和创建节点 EOS智能合约开发(二):EOS创建和管理钱包 EOS智能合约开发(三):EOS创建和管理账号 部署智能合约的示例代码如下: $ cleos set ...

  3. 使用 Browser-solidity 在 Go-Ethereum1.7.2 上进行简单的智能合约部署

    目录 目录 1.基本概念 1.1.什么是智能合约? 1.2.什么是Solidity? 1.2.1.Solidity的语言特性 1.3.什么是 Browser-solidity? 2.Browser-s ...

  4. EOS之hello智能合约解析

    传送门: 柏链项目学院   EOS的智能合约与以太坊区别很大, EOS 的智能合约基于 WebAssembly(WASM) 技术执行用户生成的应用程序和代码.WASM是一项新兴的网络标准,得到了谷歌, ...

  5. Eos的Wasm智能合约的局限性

    官方只支持用C++写智能合约 用C++写智能合约门槛过高,会把许多开发者挡在门外,C++的复杂性也会让智能合约的设计变得困难. Wasm智能合约的效率并不是最优 由于C++最终也是编译成wasm字节码 ...

  6. Remix+Geth 实现智能合约部署和调用详解

    Remix编写智能合约 编写代码 在线调试 实现部署 调用接口 Geth实现私有链部署合约和调用接口 部署合约 调用合约 获得合约实例 通过实例调用合约接口 Remix编写智能合约 编写代码 Remi ...

  7. 用Java为Hyperledger Fabric(超级账本)开发区块链智能合约链代码之部署与运行示例代码

    部署并运行 Java 链代码示例 您已经定义并启动了本地区块链网络,而且已构建 Java shim 客户端 JAR 并安装到本地 Maven 存储库中,现在已准备好在之前下载的 Hyperledger ...

  8. 区块链入门(5)Truffle 项目实战,Solidity IDE, 智能合约部署

    在上一张我们学习了Truffle项目的创建,部署等相关内容,今天我们就来实战一下. 今天我们要做3件事: 1) 学习搭建一个Solidity IDE(Remix). 2) 使用这个Solidity I ...

  9. 用Java为Hyperledger Fabric(超级账本)编写区块链智能合约链代码

    编写第一个 Java 链代码程序 在上一节中,您已经熟悉了如何构建.运行.部署和调用链代码,但尚未编写任何 Java 代码. 在本节中,将会使用 Eclipse IDE.一个用于 Eclipse 的 ...

随机推荐

  1. MySQL MHA--故障切换模式(GTID模式和非GTID模式)

    GTID和非GTID故障切换模式选择 MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始支持基于GTID的复制,在切换时可以采用GTID模式和非 ...

  2. 基于glew,freeglut的imshow

    OpenGL显示图片,这篇博客使用glew + freeglut + gdal来实现imshow. 主要修改: 使用BGR而不是RGB,保持和opencv行为一致 纯C,去掉C++相关的 去掉GDAL ...

  3. 解决shiro多次从redis读取session的问题

    /** * 重写sessonManager * 解决shiro多次从redis读取session的问题 */ public class CustomSessionManager extends Def ...

  4. 矩阵迹tr(AA*)的计算公式证明

    与tr(AB)=tr(BA)的证明思路相同,均使用矩阵的元素表示形式进行证明.

  5. HttpClient代码设置代理

    由于对接faceBook接口,本地测试时候要设置代理才能调试. (http和https通用) public SSLContext createIgnoreVerifySSL() throws NoSu ...

  6. 分析和研究Monkey Log文件

    Log 在Android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧 . 下面我们就来说说如何处理log文件 . 什么时候会有Log文件的产生 ...

  7. Java学习 从0.1开始(一)

    写在前面: 之前从事过.NET,C,C++相关的开发,Java是一直没有学习的新领域.最近,应工作需要,开始学习Java相关的知识.又因为新公司并没有完整的系统架构,所以学习方向会侧重架构方向(Cod ...

  8. 前端性能----页面渲染(DOM)

    CSS会阻塞渲染树的构建,不阻塞DOM构建,但是在CSSOM构建完成之前,页面不会开始渲染(一片空白),CSSOM构建完成后,页面将会显示出内容. DOM(Document Object Model) ...

  9. JVM JDK1.8 以后的新特性 VisualVM的安装使用

    一.JVM在新版本的改进更新以及相关知识 1.JVM在新版本的改进更新 图中可以看到运行时常量池是放在方法区的 1.1对比: JDK 1.6 及以往的 JDK 版本中,Java 类信息.常量池.静态变 ...

  10. 线程池的使用(ThreadPoolExecutor详解)

    为什么要使用线程池? 线程是一个操作系统概念.操作系统负责这个线程的创建.挂起.运行.阻塞和终结操作.而操作系统创建线程.切换线程状态.终结线程都要进行CPU调度——这是一个耗费时间和系统资源的事情. ...