网赚论坛
标题: 以太坊Ethereum常见问题FAQ [打印本页]
作者: gec淘金坊 时间: 2017-10-21 18:05
标题: 以太坊Ethereum常见问题FAQ
以太坊常见问题FAQ,有什么问题也可跟帖提问。
如何查看ethereum网络的状态?
[/td][td=1,1,715]https://stats.ethdev.com/很有用。 https://etherchain.org/statistics/basic也很有用。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217], https://etherscan.io/.
想要给我的账户添加email报警,如何实现?
[/td][td=1,1,715]https://etherscan.io/有这个很酷的功能。 https://frontier.ether.camp显然也有,但是我没有试过。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]我用 https://poloniex.com/exchange#btc_eth,而且非常好用。但请忽视聊天室。 :)
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]http://ether.fund/tool/converterEthereum显然,这是一个非常宽泛的问题,但我常用ELI5来给我的非技术背景的朋友解释……
或者说,所有的比特币通常都存放在参与者的账号中,Ethereum则有第二种类型的账号:合约。合约也是有价值的,而且可以基于一些条件处理其它事情。例如,100个人可以分别支付1美元到一个彩票合约中,该合约承诺会在第100次支付时奖励给一个随意的用户。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]有两种类型的账号,“正常的”(想想比特币)和合约。只有哈希值,可以识别出该账号的类型吗?
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]是一个新概念。它是什么? “gas/startgas” 和“gasprice”之间的关系是什么?
[/td][td=1,1,715]
目前(9/20/15)每个人能在一个交易中花费的最大gas数是3141592个单位。每个单位的最小价格是50000000000 wei. (0.00000005 ether)。因此,在一个样本交易中以gas形式发送的ether数目如下:
单位 * 50000000000 wei/unit = 157079600000000000 wei (0.1570796 ether).
举例)indexof.indexOf.sendTransaction("I am cool", "cool", {from:eth.coinbase,gas:3141592, gasprice:50000000000});
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]. 在这里提到了“Shannon”: https://blog.ethereum.org/2015/08/04/the-thawing-frontier/维基: https://en.wikipedia.org/wiki/Ethereum----------------
回答: https://www.reddit.com/r/ethereum/comments/3g8grm/ether_unit_converter_wei_finney_szabo_btc/Ada = 103 Wei, Babbage = 106 Wei, Shannon = 109 Wei, Szabo = 1012 Wei, Finney = 1015 Wei,
换句话说,Shannon == 1 Gwei == 1 billion Wei
[/td][/tr][tr][td=3,1,985]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]可以,但是没有意义。难度已经很高了。你需要很强大的GPU来挖矿。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]我搭建的时候图便宜用了4GB的,但是不够,又增加了2GB才开始工作。原因就是挖矿时系统RAM需要在内存中存放大量文件。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]查看该GPU效率分解:
https://docs.google.com/spreadsheets/d/1s5SaThZ5eOSAiVMpmuIjz-_YjIlcxttAzKuWKAbczds/edit#gid=0可用的矿池有那些?
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][/tr][tr][td=3,1,985]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]如果你参加了2014年的预售(也叫作Ethersale),应该有一个含有你账号的.json文件。使用该命令行(如果你已经启动geth,请关闭它):
$> geth wallet import /path/to/my/presale.wallet
$> geth account new
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]OR avsa控制台中如何用非常量的(交易型的)函数立即获得返回值
[/td][td=1,1,715]9/2/2015还不能。首先,用非常量的函数进行sendTransaction,等待该交易被执行(例如,发生),然后使用独立的常量函数来获取你需要的值。
参见https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/20_value_incrementer.sol
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]var receipt = web3.eth.getTransactionReceipt(), then display receipt.
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]对于“function increment(int howmuch, int _customvalue) { … }” 可以这样做:
确保你的gas支付是充足的。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]var abi = ;
contract.functionname();
样本来源https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/05_greeter.sol
有时候合约能够编译和部署,而且能将sendTransaction发送到非常量的函数中,但是函数中的逻辑并不会执行。没有错误。
[/td][td=1,1,715]Ex: incrementer3.increment.sendTransaction(3,9, {from:eth.coinbase,gas:1000000});
9/12/2015在交易记录中,”日志”阵列是什么?
[/td][td=1,1,715] blockHash: "0xdcb73cb28e7baaeb1b24e6aeae4e46f7ffea0ee3b5bf1afd8ae5f0eb2312954f",
contractAddress: "0x37f18e3eef435e80f490c0beafd9cf0365686658",
gasUsed: 161639,
transactionHash: "0x3411264089ee335cd8e3af7e2e5de775a1088a40853a8576b215e221f5890e5e",
}
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]{
blockNumber: 224644,
cumulativeGasUsed: 161639,
transactionHash: "0x3411264089ee335cd8e3af7e2e5de775a1088a40853a8576b215e221f5890e5e",
}
:我的猜测是它是用于批处理请求的。批处理中的第二个交易是“1”,等等。我会确认此事。
[/td][/tr][tr][td=3,1,985]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]使用chriseth的在线、实时Solidity编译器。相当好用。忽略其它设备吧。:)
https://chriseth.github.io/browser-solidity/
创建和发布最基本的合约
[/td][td=1,1,715]
[/td][td=1,1,715]如果使用在线solidity编译器,发布之后地址就会在geth中显示出来。
https://chriseth.github.io/browser-solidity/
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]这只是发送请求时的字节代码“数据”。但我看到它常常与ether区块链混淆了,举例:
https://etherchain.org/tx/0x3411264089ee335cd8e3af7e2e5de775a1088a40853a8576b215e221f5890e5e
和
https://etherchain.org/tx/0x232792abb77b7cb15c4f4c8979c999af0c4c278a149334e7ab6b239811717487
第一个是合约创建(更大负载),第二个是终止发送交易。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/05_greeter.sol
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]技巧就是用{from:someaddress, value: web3.toWei(3,”ether”)...}创建合约。
使用非常量的函数(req sendTransaction)在合约中增加一个变量
[/td][td=1,1,715]参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/20_value_incrementer.sol
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]“常量” 函数能够执行一些操作并返回值,但不能改变状态。换句话说,常量函数无法保存或更新合约或区块链中的任何变量。这些函数是用geth中的contractvariable.someMethod(...)来调用的。
非常量函数(缺少常量声明)必须使用contractvariable.someMethod.sendTransaction({from:eth.accounts[x], gas: 1000000})来调用;也就是说,因为它们能够更改状态,因此它们必须发送gas支付来完成工作。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]该实例演示了如何将资金从合约发送至一个地址:
Mappingmapping 映射(mapping)是可迭代的吗?
[/td][td=1,1,715]还不能。开发者chriseth:“我使用秘钥->索引(key->index)映射,并将你的[keys]放入到一个阵列中。”
:“在设计中这是不可能的,因为这些秘钥并没有保存在映射中。当编译器支持这些模板和函数库时,就会有像可迭代映射(https://github.com/ethereum/dapp-bin/blob/master/future_solidity/iterable_mapping.sol之类的复杂(昂贵)数据结构。”
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]在Solidity中如何表征双精度类型/单精度类型(double/float)?
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]比如说你需要一个在外部有事情发生时进行报警的合约。该合约可以是一个火警事件,你可以从web3(geth内部)得到该事件。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]公共 ? 所有 (默认)
内部 ? 该合约和衍生合约
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]一个合约可以有多个构建函数吗?如果可以,它们都是在创建的时候调用吗?
[/td][td=1,1,715]不可以。在相同的合约中不能有多个“function ContractX() {}” 声明,无论是输入还是输出值。
参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/40_multiple_constructor_test.sol
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]举例:https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/35_coin_flipper.sol合约函数能返回结构类型吗?
[/td][td=1,1,715]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]合约中的 “function () { blah blah; }” 是怎么回事?函数怎么才能没有名称?
[/td][td=1,1,715]:“在没有数据(例如,使用contractName.send()),或合约中(例如,你混淆了合约类型)调用了不存在的函数 或者向合约发送新的交易时,才调用[未命名的函数]。”每一个合约只能有一个未命名的函数。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]可以,对于单值的基本类型。对于阵列和结构类型则不可以。Ex:“uint8[4] tester = {0,1,2,3};”将不会编译。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/65_struct_and_for_loop_tester.sol循环的工作原理?
[/td][td=1,1,715]参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/65_struct_and_for_loop_tester.solSolidity就是基本的ASCII。当你将它们作为变量使用时,¥, ž, 等等 (扩展的 ASCII) 和 мỹїš (UTF-8)但是Solidity的字符串类型是UTF-8。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]somevar[0] = "0" 等待添加更多……
: 包含stringUtils 的作品。 https://github.com/ethereum/dapp-bin/blob/master/library/stringUtils.sol我能连接两个字符串吗?
[/td][td=1,1,715]我了解到的信息是使用.call()与使用一个变量(ContractB b;)来举例说明一个合约并执行它的方法(b.doSomething();)相比,后者更受欢迎。为什么?
[/td][td=1,1,715]
和 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/45_pong.sol
作为后者的举例。我不知道目前为啥前者是次优的。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]返回值通常都是数字(不像Javascript),在这些例子中默认是0 。
[/td][/tr][tr][td=3,1,985]
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/35_coin_flipper.sol从其它合约用非常量函数返回数值
[/td][td=1,1,715]关键点是调用合约需要知道它想要调用的函数。
参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/45_ping.sol
和 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/45_pong.sol
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]
[/td][td=1,1,715]说到用完全去中心化的方式来部署一个合约,并对一个特定区块做些事情,这是不可能的。
你可以使用web3来从外部调用函数,但那样就增加了中心化。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]可以。参见https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/50_replicator.sol注意:合约循环目前是不可能的。如果你找到了这样的方法,请告知我,因为我可以用它创建一个类似克龙的合约。
[/td][/tr][tr][td=1,1,53]
[/td][td=1,1,217]参见 https://github.com/fivedogit/solidity-baby-steps/blob/master/contracts/55_2D_array.sol注意:创建uint8+的10x10正方形合约需要花费800,000 gas。17x17的需要2,000,000个gas 。限制是314万个,其实这已经是目前能创建的很低上限了。
“合约教程”中写道:
语法是什么?
[/td][td=1,1,715]
[/td][td=1,1,715]
[/td][td=1,1,715]一个合约可以将一个阵列(静态大小)或字符串或字节(动态大小)传递给另外一个合约吗?
[/td][td=1,1,715]
[/td][/tr][/table]
【原文链接】https://docs.google.com/document/d/14EIe984_86Y-uuNm-a4EsVeD3eI4qAAlz_MZof1qkqM/edit
请将附件或修正内容发送至[email protected] 或@fivedogit
。如果有兼职或者全职的工作需求,请联系我。我的背景是计算机科学学士、销售工程师、Linux(特别是视频系统)、Java、Spring,Hibernate, AWS 和 CDN/DNS相关的技术。.
<div align="left">
欢迎光临 网赚论坛 (http://www.caifuba.net/) |
Powered by Discuz! X3.1 |