{"content":{"title":"一个简单的bep20，usdt转账的html+js示例，用的是ethers！","body":"一个简单的bep20，usdt转账的html+js示例，用的是ethers！\r\n示例来源：B站的一个allthatblock阿婆主发布的ethers.js视频教程+自己整理和测试\r\n【ethers.js教程】 https://www.bilibili.com/video/BV12Z4y1U7yr/?share_source=copy_web&vd_source=0bc2efa6137d3b6cf59b870dfec6d23e\r\n\r\n```<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>Document</title>\r\n</head>\r\n\r\n<body>\r\n    <button onclick=\"connect()\">connect</button>\r\n    <button onclick=\"connectContract()\">connectContract</button>\r\n    <button onclick=\"balance()\">balance</button>\r\n    <button onclick=\"transfer()\">transfer</button>\r\n    <script src=\"https://cdn.ethers.io/lib/ethers-5.2.umd.min.js\"\r\n        type=\"application/javascript\"></script>\r\n    <script>\r\n        let signer, busd, useradd;\r\n        async function connect() {\r\n            if (window.ethereum == null) {\r\n                console.log(\"MetaMask not installed; using read-only defaults\");\r\n            }else{\r\n                const provider = new ethers.providers.Web3Provider(window.ethereum);\r\n                signer = await provider.getSigner();\r\n                useradd = await signer.getAddress();\r\n                console.log('useradd:', useradd);\r\n            }\r\n        }\r\n\r\n        async function connectContract() {\r\n            if (!signer) await connect();\r\n            busd = new ethers.Contract(\r\n                '0x55d398326f99059ff775485246999027b3197955',\r\n                [\r\n                    'function balanceOf(address account) external view returns (uint256)',\r\n                    'function transfer(address recipient, uint256 amount) external returns (bool)'\r\n                ],\r\n                signer\r\n            )\r\n        }\r\n\r\n        async function balance() {\r\n            if (!busd) await connectContract();\r\n            const bal = await busd.balanceOf('0x570d471854c53840d7bB6e366f2A33DD6dF7E9ea');\r\n            console.log('userbal:', bal);\r\n        }\r\n\r\n        async function transfer() {\r\n            console.log('start transfer ', '1000000000000000', 'usdt from ', useradd, ' to ', '0x2Ac7bEaE23b6aD55e555cf5EEc525C4EcBAB885F');\r\n            if (!busd) await connectContract();\r\n            const tx = await busd.transfer('0x2Ac7bEaE23b6aD55e555cf5EEc525C4EcBAB885F', '1000000000000000');\r\n            const r = await tx.wait();\r\n            console.log(r);\r\n            if (r.status == 1) {\r\n                console.log('transfer successed!');\r\n            }\r\n        }\r\n\r\n        /*\r\n        //console.log(r)得到以下内容：\r\n        {\r\n    \"to\": \"0x55d398326f99059fF775485246999027B3197955\",\r\n    \"from\": \"0x570d471854c53840d7bB6e366f2A33DD6dF7E9ea\",\r\n    \"contractAddress\": null,\r\n    \"transactionIndex\": 104,\r\n    \"gasUsed\": {\r\n        \"type\": \"BigNumber\",\r\n        \"hex\": \"0xc993\"\r\n    },\r\n    \"logsBloom\": \"0x00000000000000040080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000008000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000008000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000200000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000\",\r\n    \"blockHash\": \"0x1d93ffac2e567206b33e551227b6828d7ebc426c6a2aa257250ead4aeab0546a\",\r\n    \"transactionHash\": \"0xd70e76ead46e3ee4e305bb11bb30eab20f81e3bda0d9da070293ff7fd6774f53\",\r\n    \"logs\": [\r\n        {\r\n            \"transactionIndex\": 104,\r\n            \"blockNumber\": 36949947,\r\n            \"transactionHash\": \"0xd70e76ead46e3ee4e305bb11bb30eab20f81e3bda0d9da070293ff7fd6774f53\",\r\n            \"address\": \"0x55d398326f99059fF775485246999027B3197955\",\r\n            \"topics\": [\r\n                \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\r\n                \"0x000000000000000000000000570d471854c53840d7bb6e366f2a33dd6df7e9ea\",\r\n                \"0x0000000000000000000000002ac7beae23b6ad55e555cf5eec525c4ecbab885f\"\r\n            ],\r\n            \"data\": \"0x00000000000000000000000000000000000000000000000000038d7ea4c68000\",\r\n            \"logIndex\": 300,\r\n            \"blockHash\": \"0x1d93ffac2e567206b33e551227b6828d7ebc426c6a2aa257250ead4aeab0546a\"\r\n        }\r\n    ],\r\n    \"blockNumber\": 36949947,\r\n    \"confirmations\": 1,\r\n    \"cumulativeGasUsed\": {\r\n        \"type\": \"BigNumber\",\r\n        \"hex\": \"0xaedc49\"\r\n    },\r\n    \"status\": 1,\r\n    \"byzantium\": true,\r\n    \"events\": [\r\n        {\r\n            \"transactionIndex\": 104,\r\n            \"blockNumber\": 36949947,\r\n            \"transactionHash\": \"0xd70e76ead46e3ee4e305bb11bb30eab20f81e3bda0d9da070293ff7fd6774f53\",\r\n            \"address\": \"0x55d398326f99059fF775485246999027B3197955\",\r\n            \"topics\": [\r\n                \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\r\n                \"0x000000000000000000000000570d471854c53840d7bb6e366f2a33dd6df7e9ea\",\r\n                \"0x0000000000000000000000002ac7beae23b6ad55e555cf5eec525c4ecbab885f\"\r\n            ],\r\n            \"data\": \"0x00000000000000000000000000000000000000000000000000038d7ea4c68000\",\r\n            \"logIndex\": 300,\r\n            \"blockHash\": \"0x1d93ffac2e567206b33e551227b6828d7ebc426c6a2aa257250ead4aeab0546a\"\r\n        }\r\n    ]\r\n}\r\n\r\n        */\r\n\r\n    </script>\r\n</body>\r\n\r\n</html>\r\n```"},"author":{"user":"https://learnblockchain.cn/people/18975","address":"0x570d471854c53840d7bb6e366f2a33dd6df7e9ea"},"history":null,"timestamp":1710414980,"version":1}