我正在尝试让 web3.personal.ecRecover 正常工作。这是我的设置:
Chrome 使用 Remix IDE
MetaMask 注入 web3.js
现在我正在 Chrome 开发控制台中尝试以下命令:
msg = web3.sha3('Schoolbus')
web3.eth.sign(web3.eth.accounts[0], msg , function(error, result){
if(!error)
console.log(result)
else
console.error(error);
})
Run Code Online (Sandbox Code Playgroud)
这返回:
0xd030d9a04df643f62a1502b017f51c41a659268091abbd20e2de97b935724d7c
Run Code Online (Sandbox Code Playgroud)
现在我设置:
signature = "0x36f32cbd6133ce6be7efa4cb73ff3f9ddf9b7db3ba15fa543ab0a93d04a96c102693739f946f2d89eca9030b4c8e01bb6fada1c23f05b6a4956dd63deaf187501b"
Run Code Online (Sandbox Code Playgroud)
并尝试:
web3.personal.ecRecover(msg,signature, function(error, result){
if(!error)
console.log(result)
else
console.error(error);
})
Run Code Online (Sandbox Code Playgroud)
并得到:
0xcc3f70c6caa9fee58bab68f292bdf3132c3c9ae2
Run Code Online (Sandbox Code Playgroud)
显然这不是我使用的公共地址(即web3.eth.accounts[0])
有什么建议来解决这个问题吗?
我如何在合同中获得交易成本?只会是:tx.gasprice?这将始终是 gwei 的值还是 wei ?
如何使用 geth 或 nodejs 或任何其他语言从正在运行的以太坊节点获取块信息?例如,要从比特币获取块数据,有一个配置文件,在确认交易时运行 blocknotify.sh 文件,并且在该 blocknotify.sh 文件中存在以下命令:bitcoin-cli getblock "$@" >> "$@.json"获取块数据,然后我可以发送帖子向 api 请求该块数据。所以我想做同样的事情,即从 ETH 节点获取块数据,并在交易确认时向 api 发送 post 请求。我怎样才能做到这一点 ?
我正在使用下面的 web.py 代码尝试通过本地 geth 节点在 Rinkeby 测试网上发送 1 ETH 的交易。我可以看到在实时本地以太坊节点日志流中提交的交易,但它们似乎从未广播到网络(我永远无法在 rinkeby.io 区块浏览器上看到它们)。我每次都手动设置随机数,但我读到,如果使用了先前的随机数并且它没有广播,它可能会被卡住?作为答案的一部分,如果能够解释随机数的目的/用途,那就太好了。
import web3, json, requests
from web3 import Web3, HTTPProvider
provider = HTTPProvider( 'http://localhost:8545' )
web3 = Web3(provider)
web3.eth.enable_unaudited_features()
with open('/Users/.../Library/Ethereum/rinkeby/keystore/UTC...') as keyfile:
encrypted_key = keyfile.read()
private_key = web3.eth.account.decrypt(encrypted_key, 'password')
tx = {'value': 1000000000000000000, 'to': '0xBa4DE7E3Fd62995ee0e1929Efaf7a19b73df028f', 'nonce': 100000000, 'chainId': 4, 'gasLimit': 6994000, 'gasPrice': 1000000000 }
tx['gas'] = web3.eth.estimateGas(tx)
signed = web3.eth.account.signTransaction(tx, private_key)
web3.eth.sendRawTransaction(signed.rawTransaction)
Run Code Online (Sandbox Code Playgroud) 我正在使用 web3j 查询以太坊区块链。现在我想检查交易是否被挖掘或刚刚发送到网络。我怎样才能做到这一点?
这个问题在 PHP 开发人员中引起了很大的痛苦,他们想找到一种使用 ERC20 合约/代币的方法,即执行某些操作,例如检索合约的基本常量/信息(例如名称、符号、小数、totalSupply)、检查地址的余额、将这些 ERC20 代币发送到其他以太坊地址的能力等等……而无需通过 NodeJS 或其他 JS 平台来使用以太坊的 web3 API。
我遇到了这个 Solidity 代码:
tx.destination.call.value(tx.value)(tx.data)
Run Code Online (Sandbox Code Playgroud)
但不明白它是如何工作的......尤其是tx.data最后。
EtherScan 提供了一个用于交易细节的 API,它是 Geth/Parity 代理 API 的一部分,名称为 eth_getTransactionByHash,但我无法获得 ERC20 令牌被转移的信息以及转移了多少。
与以太坊网络中的 DApp 通信是否需要元掩码?如果不是,那么与智能合约交互的另一种方式是什么?
更新
\n\n由于我无法使用此问题中的方法来实现此目的,因此我创建了自己的库来执行相同的操作(链接)。它不依赖于 go-ethereum 包,而是使用普通net/http包来执行 JSON RPC 请求。
我仍然想知道我在下面的方法中做错了什么。
\n\n定义:
\n\npublic签订合同的变量address这是获取合同所有者的curl 请求。我设法找到了主人。(JSON RPC 文档)
\n\ncurl localhost:8545 -X POST \\\n--header \'Content-type: application/json\' \\\n--data \'{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x_MY_CONTRACT_ADDRESS", "data": "0x8da5cb5b"}, "latest"], "id":1}\'\n\n{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000_OWNER"}\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我尝试在 Golang 中复制它(下面的代码)时,出现json:cannot unmarshal string into Go value of type main.response错误。(我使用的 go-ethereum 代码)
\n\npackage main\n\nimport (\n "fmt"\n "log"\n "os"\n\n …Run Code Online (Sandbox Code Playgroud) ethereum ×10
go-ethereum ×3
erc20 ×2
php ×2
solidity ×2
web3js ×2
blockchain ×1
etherscan ×1
geth ×1
go ×1
javascript ×1
json-rpc ×1
metamask ×1
python ×1
transactions ×1
web3-java ×1
web3py ×1