1 、代码必须跑在nginx下,否则没有eth对象。
2、可以下载ganache来单跑个私服,然后安装谷歌metamask浏览器插件来实验
3、账户1:0xFA387e41FA471172cC729167EBD4862aA7020D91
账户2:0x818DF62ff0bE3B28AE8be25e2e848E10138018B7
4、1000000000000000 为金额
<!doctype html>
<html class="no-js" lang="en">
<meta charset="UTF-8">
<head>
<script src="https://cdn.jsdelivr.net/npm/const@1.0.0/src/const.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/big.js@6.2.1/big.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/web3@1.8.1/dist/web3.min.js"></script>
<script type="text/javascript">
send = async () =>{
alert('test')
const web3 = new Web3(window.ethereum);
ethereum.enable()
//获取地址
let accounts = await web3.eth.getAccounts();
let account = accounts[0];
console.log("地址:"+account)
// 返回指定地址账户的余额
let balance = await web3.eth.getBalance(account);
console.log("账户余额:"+balance)
let contractAbi = [这里输入你要交互合约的ABI]
let contractAddress = '这里输入你自己要交互的0X开头的合约地址'
let myContract = new web3.eth.Contract(contractAbi, contractAddress, {
from: account, // default from address
gasLimit: 70000,
gasPrice: 1000000000 // default gas price in wei, 10 gwei in this case
});
let a = 1000000
let toAddress = document.getElementById("toAddress").value;
console.log("转账地址:"+toAddress)
myContract.methods.transfer(toAddress, 1 * a,).send({from: account}, function(error, transactionHash){
if(!error) {
console.log('transactionHash is' + transactionHash);
} else {
console.log(error);
}
});
}
function login(){
var web3Provider;
if (window.ethereum) {
web3Provider = window.ethereum;
try {
// 请求用户授权
window.ethereum.enable();
} catch (error) {
// 用户不授权时
console.error("User denied account access")
}
}
web3js = new Web3(web3Provider);//web3js就是你需要的web3实例
web3js.eth.getAccounts(function (error, result) {
if (!error)
console.log(result)//授权成功后result能正常获取到账号了
});
}
function sendTransaction(){
console.log(web3js)
web3js.eth.sendTransaction({
from: '0xFA387e41FA471172cC729167EBD4862aA7020D91',
to: '0x818DF62ff0bE3B28AE8be25e2e848E10138018B7',
value: '1000000000000000'
}).on('transactionHash', function(hash){
console.info(hash)
})
.on('receipt', function(receipt){
console.info(receipt)
})
.on('confirmation', function(confirmationNumber, receipt){
console.info(confirmationNumber)
console.info(receipt)
})
.on('error', console.error);
}
</script>
</head>
<body>
<!-- 会导出一个全局的变量: ethers -->
<input type="text" id="toAddress" placeholder="to transfer address" value="0x615DD7fF9E4CE3eB832551C473a21F4AA4Bd727B"/>
<input type="button" οnclick="send()" value="有签名转账(无需提供privateKey)需要metamask解锁" />
<input type="button" οnclick="login()" value="Login" />
<input type="button" οnclick="sendTransaction()" value="Trade" />
</body>
</html>