刚开始学习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是付出方,获取方应该在参数里.......只能说思维误区害死人。