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>