EOS测试链智能合约部署调用

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
}

  

原文地址:https://www.cnblogs.com/zhangmingcheng/p/11532350.html