zoukankan      html  css  js  c++  java
  • 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
    }
    

      

  • 相关阅读:
    完全卸载Android Studio(卸载得干干净净)
    每日生活总结1
    求解协方差矩阵
    每天一个linux命令:ifconfig命令 临时修改重启后恢复原样
    每天一个linux命令(58):telnet命令
    每天一个linux命令:pwd命令
    每天一个linux命令(38):cal 命令
    每天一个linux命令:scp命令
    login shell与non-login shell的区别
    linux下重要的网络配置文件
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/11532350.html
Copyright © 2011-2022 走看看