网赚论坛

 找回密码
 免费注册
查看: 323|回复: 0
打印 上一主题 下一主题

以太坊Ethereum常见问题FAQ

[复制链接]

29

主题

61

帖子

424

积分

Ⅰ级财主

Rank: 1

积分
424
跳转到指定楼层
楼主
发表于 2017-10-21 18:05:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以太坊常见问题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]
目前在Solidity中也是不可能的。


[/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]
Geth


[/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]

如何安装 geth?


[/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]
9/2/2015 还不能。


[/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]
合约函数接受2维阵列吗?


[/td][td=1,1,715]
Byte32意味着什么?


[/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">
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

广告合作|Archiver|手机版|小黑屋|财富吧

GMT+8, 2024-11-16 14:42 , Processed in 0.514801 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.1

© 2014-2021 财富吧

快速回复 返回顶部 返回列表