您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

可能是目前为止最全的以太坊开发入门指南

2023/6/19 4:26:22发布45次查看
以太坊技术开发从入门到精通,干货篇。
目标读者:
专业的程序员;
想深入了解以太坊/区块链及其生态的读者;
如果你已经有一定的以太坊技术基础,只想研究一些落地项目,可以直接跳到后面的项目模块。
预备知识:
了解区块链的概念以及比特币的运行机制。如果不了解,可以先看看阿里云整理的区块链菜鸟入门系列(
github: )。
与智能合约进行交互
你与智能合约的交互(也称做调用函数和读取状态)通过连接到某个以太坊节点,并执行操作码。当前有各种各样的以太坊客户端,可以方便进行开发。geth和parity都提供了控制台或浏览器的方式来更好的与智能合约交互。
如果你想要一个程序的库用来与智能合约交互的接口,也有这样的客户端实现。对于js语言,可以使用web3.js。以于go语言,可以使用在go-ethereum中的abigen的程序,提供了go包,用来与智能合约交互。
如果只是用来测试和开发,可以使用ganache来运行一个本地节点(译者注:这个节点压短区块时间等,可以方便打整的开发与测试)。
当你部署了一个智能合约,你实际进行的操作是向地址0x0发送了一个交易,使用当前合约内容作为参数,一个以太坊交易详解(https://medium/@codetractio/inside-an-ethereum-transaction-fa94ffca912f)。
truffle和embark
一旦你开始写智能合约,你会重复做大量的操作,比如编译源码为字节码和abi,部署到网络,测试然后部署合约等等。你也许希望更关注于你想要实现的东西。
truffle和embark框架,标准化和自动化了这些琐碎的工作。它们提供了一个好的开发,部署,以及更为重要的,测试智能合约的体验。
你可以通过官方文档来开启使用truffle的旅程。
我公众号之前也写了一篇使用truffle开发dapp的文章,作为入门也是一个不错的选择:基于以太坊开发第一个去中心化应用——宠物商店。
embark(https://github/embark-framework/embark)提供了类似的,帮助开发者组织工程的稍有些不同的工具。
当你一开始接触智能合约这块时,应该尽量不要使用框架。直到你明白了使用框架能带来的价值时,才应该开始使用,正如你不应该通过rails new来学习html语言一样。
ethpm
分享是关心,所以ethpm是一个去中心化的智能合约包管理资源库(https://ethpm/registry)。使用ethpm,你可以关联或连接到某个著名的合约或库,减少代码重复,尽可能理想的为未来的开发提供好的基础。
这里的这个规范(https://github/ethereum/eips/issues/190),详细的说明了相关的信息以及背景。truffle和embark均可与之集成,并创造一个愉快的开发体验。
以太坊网络
mainnet-以太坊主网,通常是所有客户端的默认网络。
ropsten - 以太坊使用工作量证明的主测试网络。这个网络,因为低的计算量,容易遭到ddos攻击,分片,或者其它问题。垃圾邮件攻击后被暂时放弃,最近才恢复使用。链接:https://github/ethereum/ropsten
kovan - parity客户端组成的测试网络,使用授权证明来提升对垃圾邮件攻击的抗扰度,并且持续4秒的阻塞时间。链接:https://github/kovan-testnet/proposal
rinkeby - geth客户端组成的测试网络,使用集团共识,尽管计算量低,但是对恶意行为者更有弹性。链接:https://rinkeby.io/
你可以自己搭建你自己的测试网络,也许使用kubernetes(https://github/maximilianmeister/kuberneteth)或者docker-compose(https://capgemini.github.io/blockchain/ethereum-docker-compose),但也许你将很快就可以不需要花什么时间。
智能合约编程语言
solidity
solidity是第一批的描述智能合约的语言。当前是最流行的语言,因此也有最多的例子,文档,和教程。你应该学习这个,除非你有要学习其它的理由。
你可以使用基于浏览器的remix ide来进行快速验证。
下面是一个solidity的合约:
pragma solidity ^0.4.11;contract basictoken { mapping(address => uint256) balances; function transfer(address _to, uint256 _value) returns () { balances[msg.sender] = balances[msg.sender] - _value; balances[_to] = balances[_to] + _value; } function balanceof(address _owner) constant returns (uint256 balance) { return balances[_owner]; }}
lll
lll是一门lisp风格的底层编程语言,就像语言名称看到的这样。虽然以太坊官方并没有将它作为主要需要支持的语言,但它仍旧持续进行着更新,且与solidity在同一个资源库。
这是一个使用lll语言写的一个erc20代币的合约,链接:https://github/benjaminion/lll_erc20/blob/1c659e890e2b30408555b9467a8dfd8988211b3b/erc20.lll
如果你正在学习,也许不是那么的容易习惯lll语言的写法。
serpent
serpent是一个类python的高级语言,最终也会被编译为evm字节码。它主要被augur团队使用。
但最近zeppelin solution团队发现其编译器有一个严重的bug,链接:https://blog.zeppelin.solutions/serpent-compiler-audit-3095d1257929。在这个问题被修复之前都不建议继续使用。
如果你对augur如何解决这些漏洞感兴趣,你可以阅读zeppelin solution的这篇文章。链接:https://blog.zeppelin.solutions/augur-rep-token-critical-vulnerability-disclosure-3d8bdffd79d2
serpent的合约看起来如下:
def register(key, value): # key not yet claimed if not self.storage[key]: self.storage[key] = value return(1) else: return(0) # key already claimeddef ask(key): return(self.storage[key])
智能合约的安全
一旦一个智能合约部署到了以太坊的网络上,它将是永不可变的,且将永久存在。如果你写了一个bug,你将不能下架这个有问题的版本,你只能在后续的版本中修复。
由于许多工程师开发的ethereum和其他智能合同平台来自于web开发,所以这个概念实在是太新,而且是疯狂的。
consensys有一个非常棒的资源叫智能合约的最佳实践,你应该深入的理解一下。链接:...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product