`
lxiaodao
  • 浏览: 121289 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

以太坊智能合约构造函数初始化解密

阅读更多
1.编译智能合约源代码得到code
2.部署智能合约
   参考rpc命令,web3有完善的接口
   curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from":"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826","data":"........."}],"id":1}' http://192.168.10.18:7000/rpc
3.构建data举例,智能合约
pragma solidity ^0.4.24;
contract RI {
    // The keyword "public" makes those variables
    // readable from outside.
    address public minter;
    mapping (address => uint) public balances;
    string public accounts;

    // Events allow light clients to react on
    // changes efficiently.
    event Sent(address from, address to, uint amount);

    // This is the constructor whose code is
    // run only when the contract is created.
    constructor (uint apply,string users) public {
        minter = msg.sender;
        balances[msg.sender]=apply;
        accounts=users;
    }

    function mint(address receiver, uint amount) public {
        if (msg.sender != minter) return;
        balances[receiver] += amount;
    }

    function send(address receiver, uint amount) public {
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Sent(msg.sender, receiver, amount);
    }
}

4.没有构造器参数的时候,部署智能合约应该发送data
0x608060405234801561001057600080fd5b50604051610460380380610460833981016040908152815160208084015160008054600160a060020a0319163390811782558152600183529390932082905591909201805190916100669160029184019061006e565b505050610109565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100af57805160ff19168380011785556100dc565b828001600101855582156100dc579182015b828111156100dc5782518255916020019190600101906100c1565b506100e89291506100ec565b5090565b61010691905b808211156100e857600081556001016100f2565b90565b610348806101186000396000f30060806040526004361061006c5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166307546172811461007157806327e235e3146100a257806340c10f19146100d557806368cd03f6146100fb578063d0679d3414610185575b600080fd5b34801561007d57600080fd5b506100866101a9565b60408051600160a060020a039092168252519081900360200190f35b3480156100ae57600080fd5b506100c3600160a060020a03600435166101b8565b60408051918252519081900360200190f35b3480156100e157600080fd5b506100f9600160a060020a03600435166024356101ca565b005b34801561010757600080fd5b50610110610204565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014a578181015183820152602001610132565b50505050905090810190601f1680156101775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561019157600080fd5b506100f9600160a060020a036004351660243561028f565b600054600160a060020a031681565b60016020526000908152604090205481565b600054600160a060020a031633146101e157610200565b600160a060020a03821660009081526001602052604090208054820190555b5050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156102875780601f1061025c57610100808354040283529160200191610287565b820191906000526020600020905b81548152906001019060200180831161026a57829003601f168201915b505050505081565b336000908152600160205260409020548111156102ab57610200565b33600081815260016020908152604080832080548690039055600160a060020a03861680845292819020805486019055805193845290830191909152818101839052517f3990db2d31862302a685e8086b5755072a6e2b5b780af1ee81ece35ee3cd33459181900360600190a150505600a165627a7a72305820383284c7be6ce7a40cd7ecfd2f334a26968e7b27dec29a70986c60e09e54e8680029000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000


5.构造器参数123,,发送的data

0x608060405234801561001057600080fd5b50604051610460380380610460833981016040908152815160208084015160008054600160a060020a0319163390811782558152600183529390932082905591909201805190916100669160029184019061006e565b505050610109565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100af57805160ff19168380011785556100dc565b828001600101855582156100dc579182015b828111156100dc5782518255916020019190600101906100c1565b506100e89291506100ec565b5090565b61010691905b808211156100e857600081556001016100f2565b90565b610348806101186000396000f30060806040526004361061006c5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166307546172811461007157806327e235e3146100a257806340c10f19146100d557806368cd03f6146100fb578063d0679d3414610185575b600080fd5b34801561007d57600080fd5b506100866101a9565b60408051600160a060020a039092168252519081900360200190f35b3480156100ae57600080fd5b506100c3600160a060020a03600435166101b8565b60408051918252519081900360200190f35b3480156100e157600080fd5b506100f9600160a060020a03600435166024356101ca565b005b34801561010757600080fd5b50610110610204565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014a578181015183820152602001610132565b50505050905090810190601f1680156101775780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561019157600080fd5b506100f9600160a060020a036004351660243561028f565b600054600160a060020a031681565b60016020526000908152604090205481565b600054600160a060020a031633146101e157610200565b600160a060020a03821660009081526001602052604090208054820190555b5050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156102875780601f1061025c57610100808354040283529160200191610287565b820191906000526020600020905b81548152906001019060200180831161026a57829003601f168201915b505050505081565b336000908152600160205260409020548111156102ab57610200565b33600081815260016020908152604080832080548690039055600160a060020a03861680845292819020805486019055805193845290830191909152818101839052517f3990db2d31862302a685e8086b5755072a6e2b5b780af1ee81ece35ee3cd33459181900360600190a150505600a165627a7a72305820383284c7be6ce7a40cd7ecfd2f334a26968e7b27dec29a70986c60e09e54e8680029000000000000000000000000000000000000000000000000000000000000007b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000d48656c6c6f2c20576f726c642100000000000000000000000000000000000000


6.上面加粗部分,表达了带参数的时候只能合约的code不同之处。
  如果要仔细体会和分析,可以在geth控制台执行web3.fromAscii来分析。
 
分享到:
评论

相关推荐

    C++构造函数初始化列表

    ### C++构造函数初始化列表详解 在C++编程语言中,构造函数是对象生命周期开始时自动调用的特殊成员函数,用于初始化对象的状态。构造函数初始化列表是C++中一个非常重要的特性,它允许程序员在对象创建时直接对类...

    天轰穿系列教程之-16利用构造函数初始化对象

    天轰穿系列教程之-16利用构造函数初始化对象天轰穿系列教程之-16利用构造函数初始化对象天轰穿系列教程之-16利用构造函数初始化对象天轰穿系列教程之-16利用构造函数初始化对象天轰穿系列教程之-16利用构造函数初始...

    c++ 子类构造函数初始化及父类构造初始化的使用

    "C++ 子类构造函数初始化及父类构造初始化的使用" C++ 中的构造函数初始化是指在类对象创建时对其进行初始化的过程。构造函数是类的特殊成员函数,用于初始化类对象。在 C++ 中,子类构造函数的初始化涉及到父类...

    成员初始化列表与构造函数体中的区别详细解析

    C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,...

    以太坊智能合约审计CheckList1

    以太坊智能合约是区块链技术中的核心组成部分,用于在以太坊网络上执行自动化的、可信的计算。在开发和部署智能合约时,确保其安全性至关重要。为了达到这一目标,智能合约审计CheckList是一个非常实用的工具,它...

    编程思想14章构造函数的初始化表达式

    在上面的例子中,`Inner inner(5)`就是在外类`Outer`的构造函数初始化列表中调用了`Inner`的构造函数。 构造函数的初始化表达式还可以与C++的聚合初始化、列表初始化和默认构造函数相结合。聚合初始化允许你使用大...

    c++初始化列表和构造函数初始化区别.pdf

    c++初始化列表和构造函数初始化区别.pdf

    C++关于构造函数的初始化

    本文将深入探讨C++构造函数中的初始化,包括传统的赋值方式、括号赋值、冒号初始化(也称为成员初始化列表)以及函数体初始化。 首先,C++中存在两种初始化方式:赋值运算符赋值和括号赋值。例如: ```cpp int a =...

    C++构造函数初始化顺序详解

    2.缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 3.创建一个对象时,系统自动调用构造函数 析构函数 1.析构函数没有参数,也没有返回值。不能重载,也...

    构造函数和复制构造函数

    构造函数和复制构造函数的详细介绍 构造函数是C++中的一种特殊函数,它们...构造函数、复制构造函数和拷贝构造函数是C++中三个基本的函数,它们之间有着紧密的联系,并且在对象的初始化和复制操作中扮演着重要的角色。

    C++类构造函数初始化列表

    C++类构造函数初始化列表是创建对象时执行成员变量初始化的一种机制,它的主要作用在于确保对象的成员变量在构造函数的执行体之前被正确初始化。初始化列表以冒号开始,随后列出成员变量及其对应的初始化表达式,每...

    C++ 构造函数初始化列表的好处

    C++ 类对像构造时,需要对类成员变量完成初始化赋值操作。...第三行是初始化列表构造 b1 时调用的复制构造函数。第四行调用了一次默认构造函数……第四行是哪儿来的?  这里需要陈述一下“复制构造函数”和

    以太坊智能合约示例与漏洞分析——竞拍合约

    智能合约定义成员变量、event等,构造函数初始化受益人、拍卖结束时间,如下所示: 出价的函数如下,标注payable说明函数可以接收转账,require(now &lt;= auctionEnd)检查拍卖是否结束,如果已经结束就抛出异常,...

    c#编写构造函数代码

    - **默认构造函数**:无参数的构造函数,用于执行基本的初始化任务。 - **参数化构造函数**:带有参数的构造函数,用于设置更具体的初始值。 #### 构造函数的调用顺序 当创建一个继承自另一个类的新对象时,构造...

    构造函数的部分初始化

    构造函数的部分初始化,可以更好地了解函数如何初始化

    详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同) 首先说一下一个C++的空类,编译器会加入哪些默认的成员函数 默认...

    构造函数的冒号后初始化列表

    主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。

    C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar

    在`MyClass`的构造函数中,`member`的数据成员先被初始化,调用了`MemberClass`的构造函数,传入了42作为参数。 2. 基类构造函数: 当一个类是另一个类的基类时,基类的构造函数会在派生类构造函数之前被调用。这...

    继承类的构造函数

    基类的构造函数是不能继承的,在声明派生类时,派生类并没有把基类的构造函数继承过来,因此,对继承过来的基类成员初始化的工作也要由派生类的构造函数承担。 在设计派生类的构造函数时,不仅要考虑派生类所增加的...

Global site tag (gtag.js) - Google Analytics