BSC智能合约DAPP系统开发方案

2022-10-27 09:19:41 浏览数 (1)

主要函数

  • kill:selfdestruct 是 ethereum 智能合约自带的自毁程序,kill对此方法进行了封装,只有合约的拥有者才可以调用该方法;
  • greet:返回合约 greeter 里的 greeting属性的值;

代码运行分析

第一步 生成智能合约代码对象

我们先把合约代码smartContract_example01.sol 压缩为一行.新建一个ssh session, 切换到geth用户环境su - geth, 然后输入:cat smartContract_example01.sol | tr 'n' ' '. 切换到以太坊控制台,把合约代码保存为一个变量:

代码语言:javascript复制
var greeterSource = 'contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) selfdestruct(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function greet() constant returns (string) { return greeting; } }'
第二步 编译合约代码

然后编译合约代码:

代码语言:javascript复制
var greeterCompiled = web3.eth.compile.solidity(greeterSource)

greeterCompiled.Token.code可以看到编译好的二进制代码 greeterCompiled.Token.info.abiDefinition可以看到合约的ABI

第三步 设置希望返回的字符串
代码语言:javascript复制
var _greeting = "Hello World!"
第四步 部署合约

接下来我们要把编译好的合约部署到网络上去.

首先我们用ABI来创建一个javascript环境中的合约对象:

代码语言:javascript复制
var greeterContract = web3.eth.contract(greeterCompiled.greeter.info.abiDefinition);

我们通过合约对象来部署合约:

代码语言:javascript复制
var greeter = greeterContract.new(_greeting,{from:web3.eth.accounts[0], data: greeterCompiled.greeter.code, gas: 300000}, function(e, contract){
    if(!e) {
      if(!contract.address) {
        console.log("Contract transaction send: TransactionHash: "   contract.transactionHash   " waiting to be mined...");
      } else {
        console.log("Contract mined! Address: "   contract.address);
        console.log(contract);
      }
    }
})
  • greeterContract.new方法的第一个参数设置了这个新合约的构造函数初始化的值
  • greeterContract.new方法的第二个参数设置了这个新合约的创建者地址from, 这个新合约的代码data, 和用于创建新合约的费用gas.gas是一个估计值,只要比所需要的gas多就可以 ,合约创建完成后剩下的gas会退还给合约创建者.
  • greeterContract.new方法的第三个参数设置了一个回调函数,可以告诉我们部署是否成功.

0 人点赞