Ethereum

Difference new() with depoly() of Solidity for Smart Contract

今天在做基于Ethereum的古董投资Dapp(编写完成后笔者会开源)单元测试时发觉了一个问题的存在,如题。我不确定new一个合约后返回的实例(一串十六进制的HASH)是否与deploy返回的HASH一样也是一个合约地址,在社区询问后无果,就自己在remix里写了一小段代码验证我的想法。希望能帮助读者解决这方面的困惑。 需要注意的是笔者在remix里的Environment是Injected Web3,使用MetaMask里的Kovan Test Network去完成测试。测试的Token可以在这里领取:https://gitter.im/kovan-testnet/faucet在gitter里发送你的钱包地址即可。下面进入正题: 图1 图1是我编写的一端简易的测试代码。我通过图右边的deploy直接将合约B部署上测试网络,在图左边的合约B代码中读者可以看见new了合约A的实例,那么我的猜想是否正确呢?我们将在测试网络的Ethereum区块链浏览器上看出结果。 图2 如图2,图左最上方的那条Transaction是我直接deploy后返回的结果(点进链接可查看详细内容,下面会详解)。图左下面三条是我new(点击图右下aInstance函数,详细代码看图1)实例后的结果。 图3 图3是点进deploy返回结果的链接显示的页面,图3下面的input Date是合约B的十六进制字节码,如图3所示创建红框里的合约并且返回其合约地址。对比图4、5、6,图4、5、6是new实例的详情。 图4 图5 图6 对比图3、4、5、6可以看出Transaction的对象(红框里的地址)都是同一串HASH,唯一不同的是图3是创建该合约,而其余三张是通过此合约再去创建另一合约(也就是创建新的合约地址)。所以图3没有图4、5、6最上面选项卡Internal Transaction。 图7 图8 图9 点进选项卡Internal Transaction,图7、8、9是new实例对象通过B合约创建的三个新的合约,图7、8、9红框中显示的是三个不同的合约地址。笔者点击图9红框中合约地址可见下图10的该合约的详情。 图10 图11 图10红框中的十六进制字节码与图11中合约A的字节码相同,点击进入图7、8的合约地址看到的字节码与图10、11的字节码也是相同的。即合约B每一次new都为创建合约A创建了新的合约地址,所以图1中Instance就是新的合约地址。与deploy效果一样返回的也是一个合约地址。 若笔者文中存在错误之处,欢迎各位读者指正,共同学习。

Continue reading...

Principle of Ethereum

简介 不管你们知不知道以太坊(Ethereum blockchain)是什么,但是你们大概都听说过以太坊。最近在新闻里出现过很多次,包括一些专业杂志的封面,但是如果你们对以太坊到底是什么没有一个基本的了解的话,看这些文章就会感觉跟看天书一样。 所以,什么是以太坊?本质上,就是一个保存数字交易永久记录的公共数据库。重要的是,这个数据库不需要任何中央权威机构来维持和保护它。相反的它以一个“无信任”的交易系统来运行—一个个体在不需要信任任何第三方或对方的情况下进行点对点交易的架构。 依然感到很困惑?这就是这篇文章存在的理由。我的目标是在技术层面来解释以太坊的工作原理,但是不会出现很复杂的数学问题或看起来很可怕的公式。即使你不是一个程序员,我希望你看完之后最起码对技术有个更好的认识。如果有些部分技术性太强不好理解,这是非常正常的,真的没有必要完全理解每一个小细节。我建议只要宏观的理解一下事物就行了。 这篇文章中的很多议点都是以太坊黄皮书中讨论过的概念的细分。我添加了我自己的解释和图表使理解以太坊更加简单一点。那些足够勇敢的人可以挑战一下技术,去阅读一下以太坊的黄皮书。 好了, 让我们开始吧! 区块链定义 区块链就是一个具有共享状态的密码性安全交易的单机(cryptographically secure transactional singleton machine with shared-state)。[1]这有点长,是吧?让我们将它分开来看: “密码性安全(Cryptographically secure)”是指用一个很难被解开的复杂数学机制算法来保证数字货币生产的安全性。将它想象成类似于防火墙的这种。它们使得欺骗系统近乎是一个不可能的事情(比如:构造一笔假的交易,消除一笔交易等等)。 “交易的单机(Transactional singleton machine)”是指只有一个权威的机器实例为系统中产生的交易负责任。换句话说,只有一个全球真相是大家所相信的。 “具有共享状态(With shared-state)”是指在这台机器上存储的状态是共享的,对每个人都是开放的。 以太坊实现了区块链的这个范例。 以太坊模型说明 以太坊的本质就是一个基于交易的状态机(transaction-based...

Continue reading...