玩转Metamask
Metamask给浏览器提供了一个web3环境, 不止Dapp可以调用,你自己也可以手动调用. 利用这个可以做很多有趣方便的事情
请确认您已经在浏览器中安装Metamask

查 看web3对象
以Chrome浏览器为例,随便打开一个网页,然后在页面上右键,点击检查,就会弹出浏览器的选项卡, 切换到Console(控制台)栏,在下面输入 web3.
有了这个web3对象,我们可以做不少事.
以太坊交易调用智能合约时,交易data前几位默认是函数签名. 这个签名是由合约函数声明哈希后取前几位生成的,我们可以利用这个web3轻松计算签名.
> web3.sha3("approve(address,uint256)")
"0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba"
approve是以太坊ERC20的授信函数,我们可以在Etherscan上找一个授信交易看看实际的data

授信交易
MethodID: 0x096ea7b3 正好就是函数声明的sha3结果前8位.
注意啦,这个web3对象是可以通过web3.eth.sendTransaction接口实际发出链上交易的.
我们日常会遇到一些case,想把一个地址里的所有ETH全部提取出来,但是因为gas的原因,我们每次总会剩一点点ETH提不干净.这可以逼坏了一些强迫症患者,利用这个web3,我们很容易就可以做到提取全部ETH.
打开console输入以下内容
function withdrawal(to, gasPrice) {
web3.eth.getBalance(web3.eth.coinbase, (err, balance) => {
if (err) {
console.error(`fail to get balance of ${web3.eth.coinbase}`, err)
} else {
gasPirce = web3.toWei(gasPrice, 'gwei')
const gas = new web3.BigNumber(21000)
const cost = gas.mul(gasPrice)
const left = balance.minus(cost)
web3.eth.sendTransaction({
to,
value: left,
gasPrice
}, console.log)
}
})
}
这里我们定义了一个提现函数, 先获取账户余额,再计算转账油费,然后提取(余额 - 油费), 最后账户上就会一点ETH都不剩啦.
使用方法如下:
//用4gwei的价格,提现当前账户所有ETH到0x92694d5c7e2655e3f358130ebd0e7Db3FbD3e455地址
> withdrawal("0x92694d5c7e2655e3f358130ebd0e7Db3FbD3e455", 4)
回车后Metamask会弹出交易提示框,点击确认就会发出转账啦.
后面的数字表示油价,单位是Gwei. 另外提现交易不可以用Metamask的交易加速功能,加速功能会上调油价,这样剩余的ETH就不够发送了.
新版本的Metamask增加了一个隐私保护,必须用户允许当前页面连接到Metamask后才能调用交易功能,否则会报错:
Uncaught Error: invalid address
解决方法: 可以先访问 https://tools.94eth.com, 页面会请求连接Metamask, 允许后, 再打开控制窗口重复上述操作.
Last modified 3yr ago