
明天,开始总结之前学的知识,写一个完整的合约
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;
//构造函数的初始化
contract chushihua {
address moren ;
uint x;
//假设发送一个参数,开始初始化
/**
如果我想要部署另外一个合约,它的 a 应该被初始化为 2。
那么我们就需要去修改合约,将 uint a = 1; 改为 uint a = 2;。其他的也依此类推。
修改合约是很容易出错的。现在我们面对的是一个状态变量,
但是当我们面对多个状态变量并且它们的值是彼此关联的时候情况就会变得非常复杂。
构建函数就可以帮助我们去管理这种复杂性。
把一切初始化关联逻辑都收敛到构建函数内部,这样我们就可以轻松地构建部署新的合约。
我们定义了一个构建函数,里面使用外部传入的参数 y 对状态变量 x 进行了初始化。
这样,如果我要部署 x 的初始值为 2 的合约,我只需要在创建合约时设定入参为 2 即可。
简单通俗点就是,带有关键词初始化 constructor时,在部署的时候,就要求你输入初始值
与我们之前的合约都不同,我们之前是直接部署。区别就在这里
**/
constructor(uint y){
/**
在Solidity当中,我们常用的两个内建对象是block和msg。block就是区块对象,我们可以了解一下其内部包含的数据和函数。
block对象结构:
block.coinbase (address): 当前块的矿工的地址
block.difficulty (uint):当前块的难度系数
block.gaslimit (uint):当前块gas的上限
block.number (uint):当前块编号
block.blockhash (function(uint) returns (bytes32)):函数,返回指定块的哈希值,已经被内建函数blockhash所代替
block.timestamp (uint):当前块的时间戳
msg对象代表调用合约时传递的消息内容,我们可以看一下其对应的结构。
msg.data (bytes):完整的calldata
msg.gas (uint):剩余的gas量
msg.sender (address):消息的发送方(调用者)
msg.sig (bytes4):calldata的前四个字节(即函数标识符)
msg.value (uint):联盟链中无需使用此数据
*/
moren \= msg.sender;
//参数赋值给x
x \= y;
}
}