Sandbox Utility

在学习、调试和管理与以太坊网络的交互过程中,sandbox实用程序提供了一种使用最常用以太坊实用程序的简单方法。

If no command is given, it will enter a REPL interface with many of the ethers utilities already exposed.

Help

用法: ethers [ COMMAND ] [ ARGS ] [ OPTIONS ] 指令:(默认: sandbox) sandbox 运行一个带有ethers的REPL VM环境 init FILENAME 创建一个新的JSON钱包 [ --force ] 覆盖任何现有文件 fund TARGET Fund TARGET with testnet ether info [ TARGET ... ] 到处账户、地址和ENS名称 send TARGET ETHER 从账户accounts[0]向目标TARGET发送ether [ --allow-zero ] 允许发送到零地址 [ --data DATA ] 在交易中包含数据DATA sweep TARGET 从账户accounts[0]向目标TARGET发送所有ether sign-message MESSAGE 用账户accounts[0]签署信息 [ --hex ] 消息内容是十六进制编码 eval CODE 在一个有ethers的虚拟环境运行代码 run FILENAME 在一个有ethers的虚拟环境运行文件 wait HASH 等待交易哈希完成 wrap-ether VALUE Deposit VALUE into Wrapped Ether (WETH) unwrap-ether VALUE 从Wrapped Ether (WETH)赎回VALUE send-token TOKEN ADDRESS VALUE Send VALUE tokens (at TOKEN) to ADDRESS compile FILENAME 编译Solidity合约 [ --no-optimize ] Do not optimize the compiled output [ --warnings ] 警告错误 deploy FILENAME 编译并部署Solidity合约 [ --no-optimize ] Do not optimize the compiled output [ --contract NAME ] 指定要部署的合约 账户选项 --account FILENAME 从(JSON, RAW or mnemonic)文件加载 --account RAW_KEY 使用私钥(insecure *) --account 'MNEMONIC' 使用助记词(insecure *) --account - 对原始密钥或者助记词使用安全入口 --account-void ADDRESS 使用地址作为无效签名者 --account-void ENS_NAME 使用解析地址添加为无效签名者 --account-rpc ADDRESS 从JSON-RPC provider程序添加地址 --account-rpc INDEX 从JSON-RPC provider程序添加索引 --mnemonic-password 提示输入助记密码 --xxx-mnemonic-password Prompt for a (experimental) hard password PROVIDER 选项 (默认: all + homestead) --alchemy 包含Alchemy --etherscan 包含Etherscan --infura 包含INFURA --nodesmith 包含nodesmith --rpc URL 包含一个自定义的JSON-RPC --offline 转储已签署的交易(不发送) --network NETWORK 要连接的网络(默认: homestead) 交易选项 (默认: query network) --gasPrice GWEI 交易的默认gas限额(以wei为单位) --gasLimit GAS 交易的默认gas限额 --nonce NONCE 第一笔交易的初始nonce --yes 始终接受签名和发送 OTHER OPTIONS --wait Wait until transactions are mined --debug 显示错误的堆栈跟踪 --help 显示此用法并退出 --version 显示此版本并退出 (*) 因为在命令行中包含助记符或私钥,在你系统上的其他用户可能可以读取它们,并可能存储在bash历史文件中。不推荐这样做。

示例

创建新的选项
/home/ethers> ethers init wallet.json 创建新的json钱包 - wallet.json 保持密码和文件安全!如果丢失或者遗失,任何人都不能恢复 选择密码: ****** 确认密码: ****** 加密中... 100% 新的账户地址: 0x485bcC23ae2E5038ec7ec9b8DCB2A6A6291cC003 Saved: wallet.json # 如果你打算尝试试用Ropsten 测试网... /home/ethers> ethers --network ropsten fund 0x485bcC23ae2E5038ec7ec9b8DCB2A6A6291cC003 交易哈希: 0x8dc55b8f8dc8076acded97f9e3ed7d6162460c0221e2769806006b6d7d1156e0
发送 Ether and Tokens
# 发送 ether /home/ricmoo> ethers --account wallet.json send ricmoo.firefly.eth 0.123 密码 (wallet.json): ****** 加密... 100% Transaction: To: 0x8ba1f109551bD432803012645Ac136ddd64DBA72 From: 0xaB7C8803962c0f2F5BBBe3FA8bf41cd82AA1923C Value: 0.123 ether Nonce: 96 Data: 0x Gas Limit: 21000 Gas Price: 1.2 gwei Chain ID: 1 Network: homestead Send Transaction? (y/N/a) y Response: Hash: 0xc4adf8b379033d7ab679d199aa35e6ceee9a802ca5ab0656af067e911c4a589a # Sending a token (SAI) # NOTE: 合同地址也可以使用,但常用的token合同地址也由以太坊管理 /home/ricmoo> ethers --account wallet.json send-token sai.tokens.ethers.eth ricmoo.firefly.eth 1.0 Sending Tokens: To: 0x8ba1f109551bD432803012645Ac136ddd64DBA72 Token Contract: 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359 Value: 1.0 Password (wallet.json): ****** Decrypting... 100% Transaction: To: 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359 From: 0xaB7C8803962c0f2F5BBBe3FA8bf41cd82AA1923C Value: 0.0 ether Nonce: 95 Data: 0xa9059cbb0000000000000000000000008ba1f109551bd432803012645ac136ddd64dba720000000000000000000000000000000000000000000000000de0b6b3a7640000 Gas Limit: 37538 Gas Price: 1.0 gwei Chain ID: 1 Network: homestead Send Transaction? (y/N/a) y Response: Hash: 0xd609ecb7e3b5e8d36fd781dffceede3975ece6774b6322ea56cf1e4d0a17e3a1
签名信息
/home/ethers> ethers --account wallet.json sign-message 'Hello World' Password (wallet.json): ****** Decrypting... 100% Message: Message: "Hello World" Message (hex): 0x48656c6c6f20576f726c64 Sign Message? (y/N/a) y Signature Flat: 0xca3f0b32a22a5ab97ca8be7e4a36b1e81d565c6822465d769f4faa4aa24539fb122ee5649c8a37c9f5fc8446593674159e3a7b039997cd6ee697a24b787b1a161b r: 0xca3f0b32a22a5ab97ca8be7e4a36b1e81d565c6822465d769f4faa4aa24539fb s: 0x122ee5649c8a37c9f5fc8446593674159e3a7b039997cd6ee697a24b787b1a16 vs: 0x122ee5649c8a37c9f5fc8446593674159e3a7b039997cd6ee697a24b787b1a16 v: 27 recid: 0

Scripting

eval命令可用于从命令行执行简单的单行脚本,这些脚本将传递给其他命令或存储在脚本环境变量中。

获取一个账户的格式化余额
/home/ethers> ethers --network ropsten \ --account wallet.json \ eval \ 'accounts[0].getBalance().then(b => formatEther(b))' 3.141592653589793238
获取当前区块数
/home/ethers> ethers --network rinkeby \ eval "provider.getBlockNumber()" 5761009
将Solidity签名转换为JSON
/home/ethers> ethers eval 'utils.Fragment.from( "function balanceOf(address) view returns (uint)" ).format("json")' | json_pp { "inputs" : [ { "type" : "address", "name" : "owner" } ], "type" : "function", "payble" : false, "stateMutability" : "view", "ouputs" : [ { "type" : "uint256" } ], "name" : "balanceOf", "constant" : true }
Compute a topic hash
/home/ricmoo> ethers eval 'id("Transfer(address,address,uint256")' 0xd99659a21de82e379975ce8df556f939a4ccb95e92144f38bb0dd35730ffcdd5
随机创建一个助记符
/home/ricmoo> ethers eval 'Wallet.createRandom().mnemonic' useful pond inch knock ritual matrix giggle attend dilemma convince coach amazing

使用助记符(带密码)

所有助记符都有一个密码,但默认是使用空字符串(i.e. "")作为密码。如果你的助记符有密码,--mnemonic-password将会提示你输入密码以解密该账户。

/home/ricmoo> ethers --account mnemonic.txt --mnemonic-password 密码 (助记符): ****** 网络: homestead (chainId: 1) homestead> accounts[0].getAddress() <Promise id=0 resolved> '0x6d3F723EC1B73141AA4aC248c3ab34A5a1DAD776' homestead>

使用助记符 (with experimental memory-hard passwords)

--xxx-mnemonic-password类似于--mnemonic-password选项,它使用密码对助记符的帐户进行解密, 然而它首先通过scrypt基于密码的密钥派生函数传递密码,which is intentionally slow and makes a brute-force attack far more difficult.

/home/ricmoo> ethers --account mnemonic.txt --xxx-mnemonic-password Password (mnemonic; experimental - hard): ****** Decrypting... 100% network: homestead (chainId: 1) homestead> accounts[0].getAddress() <Promise id=0 resolved> '0x56FC8792cC17971C19bEC4Ced978beEA44711EeD' homestead>
Note

这仍然是一个实验性的功能(hence the xxx).