智能合约solidity实战1 存入和取出

268 阅读1分钟

刚开始学习solidity,大致看了遍文档,想写个小demo,但是向合约转入eth的功能就一直找不到api,各种网站都逛了一遍,真的是折磨,现在写好了,发出来来给小伙伴们减少一下试错时间。。。

// SPDX-License-Identifier: MITpragma solidity ^0.8.1;contract Bet {    uint endTime;    uint capital;

    constructor () payable{}        function deposit() public payable {}    function getBalance() public returns(uint){      require(address(this).balance>=0.0001 ether,"no money");      payable(msg.sender).transfer(0.00001 ether);      return address(this).balance;    }         fallback() external{    }        receive() payable external{    }}

没错,就这么几行代码,接下来大致解释一下。

代码中deposit函数用来存入eth,getBalance就不说了,自己读吧.

重点:

1、存入eth貌似不能单纯用合约做(主要是我实在找不到。),主要需要前端配合,代码如下图

      const web3 = new Web3(currentProvider)      const Contract = new web3.eth.Contract(interfaces,contractAddress)      const tx = {        from: userAddress, // Required        to:  contractAddress, // Required (for non contract deployments)        data: Contract.methods.deposit().encodeABI(),// Required        value: Web3Utils.toHex(1000000000000000), // Optional        nonce: "0x00", // Optional      }      console.log(tx)      window.ethereum.request({        method: 'eth_sendTransaction',        params: [tx],      }).then(res => {        console.log(res)      })      .catch(        res =>{          console.log(res)        }      )

2.ETH是以太坊主链币,和其他token代币不同,其他代币授权转账应该不难(还没做到),相关概念和资料请自行查询。

3.transfer函数,如:A.transfer(B),调用方A是获取方,参数B为数额,这个函数我一开始理解错误,认为A是付出方,获取方应该在参数里.......只能说思维误区害死人。