哪里做的以太坊以太坊 智能合约 入门开发比较安全?

点击这里,将文章分享到自己的动态
如何开发可升级的以太坊智能合约
本文是对以太坊中可升级智能合约领域的各种实现策略的总结 ,目的是汇总迄今为止的相关资源, 以帮助我们在设计智能合约时,考虑如何对其进行升级和更新。100%可升级机制目前有两种主要策略用来实现可升级的智能合约:使用代理合约将逻辑和数据分离成不同的合约。这两种方法要解决的根本问题是如何更新合同的逻辑,同时仍然保留对合同状态的访问。代理合约代理合约使用delegatecall操作码将函数调用转发到可更新的目标合约。 由于delegatecall 保留了函数调用的状态,因此可以更新目标合约的逻辑,并且状态将保留在代理合约中以供 更新后的目标合约的逻辑使用。 与delegatecall一样,msg.sender将保持代理合约的调用者身份。由于最近的拜占庭硬分叉,现在可以获取函数调用的返回大小了,因此与&首次提出的方法相比,目前这种方法可以通用。 在的文章中可以 看到一个通用代理合约的例子,你可以更详细地了解这个机制。希望你马上开始学习以太坊智能合约和去中心化应用开发,可以访问入门级 的&以及更进阶的。分离逻辑和数据合约这中方法到将智能合约拆分两个合约:包含数据(变量,结构,映射等)以及getter/setter的数据合约包含如何更新这些数据的业务逻辑的逻辑合约逻辑合约通过setter更新数据,而数据合约只允许逻辑合约调用setter。 这允许在保持数据不变 的同时更换实现逻辑,从而实现完全可升级的系统。通过引导用户使用新的逻辑合约(通过诸如ENS的解析器)并更新数据合约的权限来允许新的逻辑合约 执行setter,就可以实现合约的更新。查看的视频以更好地了解这一机制。使用键值对数据模型分离逻辑和数据合约这种策略的工作原理与上述类似,只是不使用最终期望数据结构(struct,mapping等)来定义合约数据模型, 所有数据都被抽象化并存储在键值对中,然后使用一个标准的命名系统以及sha256散列算法用于查找数据值。可以查阅的文章以更好地理解这种机制。部分可升级策略创建一个完全可升级的合约听起来不错,但需要一个很大的妥协:保证合约的不可变性。 因此在很多情况下 实现部分可升级的合约可能是更合理的选择。在此策略中,智能合约的核心功能可以保留为不可升级。 其他可能不太完整或更复杂的组件则 采用可升级策略实施。这方面已经有一些很好的案例:以太坊名称服务:ENS核心合约是一个非常简单的合约,不能更改。 域名注册商则可以由管理员升级。 域名注册商是一个合约工厂,如果使用一个新的域管理器,它可以与以前的所有 数据状态重新链接,而不会有太多麻烦。&:603DEX(去中心化交易所)核心智能合约可以完全升级,而代理合约(每个用户一个)保持不变。 0x“代理”合约(不同于前面介绍的代理策略)包含用户资金和相关设置。 由于这个原因,它不是0x合约系统的可升级部分。其他挑战在所有情况下,都需要对是否保持智能合约的不变性进行取舍。创建可选的可升级智能合约系统对用户来说是可能并且有价值的,但是增加了复杂性。对Solidity编译器的更改可能会破坏新旧合约之间的兼容性。制定可升级策略时需要考虑gas开销。结论没有一个策略是完美的,选择正确的策略取决于要实施的智能合约。 所有策略都非常复杂,智能合约设计人员应该对 他们所选择的可升级策略非常了解,以避免安全漏洞。为了创建一个可升级的智能合约,代理机制似乎是最好的全面策略,因为它允许程序员将可升级机制 与合约设计区分开来,这使得一切变得更容易,并且会产生更少的错误,而错误是我们需要升级合约的主要原因。在最简单的核心逻辑不变的情况下,采用部分升级策略也是保持用户信任的好主意。首先设计不可升级的智能合约系统,然后制定可升级的策略,这是一种实用且理想的方式。参考资源思路与观点 Zeppelin Solution :&:&ConsenSys :&Evoluchain :&代理合约 Jorge Izquierdo :& 经济学 :&&,& B9lab团队 :& Manuel Araoz :& @Ownage :& Nick Johnson :&&,& Jorge Izquierdo :& Manuel Araoz :& Jorge Izquierdo :& Tjaden Hess :& @Martin Swende :&教程2018-02:&2018-03:。分离逻辑和数据合约 @Thomas Wiesner :&杰克坦纳:&&,& Lukas K :&。 我们学习了在区块链上建立保险 @nikolai :&@monax :&@monax :&@Z.com-cloud-blockchain :&使用键值对数据模型分离逻辑和数据合约 Hassan Abdel-Rahman : David Rugendyke :&, Chandan Gupta :&&,& Elena Dimitrova :&
若觉得本文不错,就分享一下吧!
评论加载中...
看过此文的用户,还看了以下文章
正在加载中基于以太坊的智能合约安全代码审计指南_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于以太坊的智能合约安全代码审计指南
&&基于以太坊的智能合约安全代码审计指南的全方面指导,值得推荐
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩4页未读,
定制HR最喜欢的简历
你可能喜欢没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!您访问的页面似乎遇到了一点问题,请刷新重试以太坊智能合约编程入门(1)
写一篇入门教程,讲一下怎么使用以太坊构建智能合约和应用。
总览关键的术语以及以太坊客户端和智能合约语言
讨论工作流以及dapp框架和工具
编程,快速编写测试,以及使用truffle开发一个智能合约dapp
以太坊官方网站
上有一些示例。以及官方的文档。还有一个学习智能合约的好地方:dappsforbeginners,虽然这个网站可能已经过时了。
这篇文章的目的就是给这些示例做个补充,然后介绍一些有用的开发工具,帮助大家更容易地使用以太坊,智能合约,开发dapp。
先看看一些术语:
公钥密码学。假设alice有一个公钥和一个私钥。她可以使用她的私钥来创建一个数字签名,然后bob可以使用alice的公钥来验证,看那个签名是不是真的是用alice的私钥发出的,是不是真的是alice发出的。当你创建了一个太坊或比特币钱包,那么那串长长的“0xdf…5f”地址就是公钥,而私钥保存在别的地方。像coinbase这样的比特币钱包服务商,替你保存着你钱包的私钥,当然你也可以自己保存私钥。如果你把钱包的私钥丢了,那么那个钱包里的所有资金就将永远丢失,所以,你最好备份好你的私钥。我曾经丢过私钥,那种感觉不好受。
点对点网络。像bittorrent一样,以太坊的所有节点都是分布式网络上的点,以太坊上没有中心服务器。[将来以太坊上将有一种混合的半中心服务器,这样能方便用户和开发者使用,这个后面再说]
区块链。区块链就像是一个公共账本,或是记录所有交易的数据库。
以太坊虚拟机。使用以太坊虚拟机你可以在以太坊上开发更强大的程序,比在比特币上开发的更强大。
节点。你可以运行一个节点,然后通过这个节点,使用以太坊虚拟机,可以读取以太坊区块链上的数据,或者向以太坊网络上写入数据。一个完全节点需要下载整个区块链。
矿工。网络上的节点的工作就是挖矿,处理区块链上的区块。你可以在这个地址查看当前以太坊的活跃矿工部分列表:。
工作量证明(proof of
wor)。矿工之间需要竞争去完成一些数学题目。第一个算出数学题目答案(区块链的下一个区块)的矿工将赢得一笔奖励:一些以太。然后每个节点都更新到那个区块。每个矿工都想赢得下一个区块,因此这激励着它们持续地更新,然后所有人都保持着一个真实的区块链,整个网络也由此达成了共识。[以太坊计划从pow转成pow与pos混合的机制,不过这不在这篇文章的讨论范围]
以太。或者简称eth。它是一个真正的数字货币,你可以用它来买东西。在这个,你可以在上面交易。
gas。在以太坊网络上运行和存储数据需要耗费一定数量的eth。这样以太坊才能有效率。
dapp。去中心化的app,使用了智能合约的应用。dapp的目标是(应该是)拥有一个漂亮的智能合约界面,以及任意额外的功能,比如ipfs(一种在去中心化网络上存储和服务的方式,不过不是以太坊创建的)。dapp也能在一台中心服务器上运行,如果这台服务器能跟以太坊节点通信的话,它们也可以在本地的以太坊节点上运行。[与普通的webapp不同的是,dapp或许不是在服务器上的。它们或许使用区块链来提交交易然后获取数据,而不是通过一个中心化的数据库。用户使用一个钱包地址,把数据保存在本地,而不是使用典型的用户登录系统。很多方面的架构都与现在的web不一样]。
以太坊客户端,智能合约语言
开发和部署智能合约,不需要运行一个以太坊节点。可以查看下面的。但是如果你正在学如何运行一个以太坊节点,那么可以看一下这些基础部分,这也不难。
运行一个以太坊节点的客户端
以太坊有多个不同的客户端实现(这意味着你可以有多种方式与以太坊网络进行交互),包括c++,go,python,java,haskell,等等。为什么要这么多实现呢?因为不同的语言面向不同的人。而且这也拓展了以太坊网络的安全性和生态系统。我用的一直都是,go语言版本,有时候用一个叫做testrpc的工具,这个工具用的是python版本的客户端,。现在我们用的是新工具,ethersim用的是。ethereumjs是一个javascript客户端,它不支持真正的区块链挖矿,所以它不是一个完整客户端,但是开发和测试的时候可以模拟挖矿。
交互控制台。一旦你用了这些客户端,就有了一个节点,那么你就能和区块链进行同步,创建钱包以及发送接收eth了。在geth上,你可以通过来实现。或者通过(远程处理调用),使用一个命令比如cURL来通过url获取数据。
在测试网络上运行一个节点。如果你安装了客户端,比如geth,然后在正在的网络上运行的话,它需要花一点时间来下载整个区块链,并与网络同步。(你可以在stats.ethdev.com
上查看最新的区块信息,然后把它跟你的客户端的节点log对比,看看你是否完全同步了)但是在真正的网络上运行智能合约的话,你需要花费一些eth。不过你可以在本地的测试网络上免费地运行客户端。这样也不需要下载整个区块链,而且会创建以太坊网络的一个私有实例,因此对于开发来说就更快。
testrpc。你可以用geth来运行一个测试网络,但是有其他快速的方法,比如使用testrpc。testrpc会为你创建一批预存资金的账号。而且它也非常快,而且更易于开发和测试。你可以先用testrpc开始,然后等到你的合约像模像样了,在使用geth,要开始使用geth,只需要指定一个networkid就可以:geth-----netwokid“12345”。后面我会在例子中介绍testrpc的用法。[现在testrpc的开发者把重心都放在ethersim上了,把ethersim当作testrpc的替代品,我会更新这个实例,最终也使用ethersim。如果你想的话也可以一开始就使用ethersim]。
智能合约编程语言
使用solidity。开发智能合约的语言有好几种:solidity,有点像javascript;serpernt,类python语言;还有一个LLL,基于lisp的语言。以前serpent流行过一段时间,不过现在最流行的是solidity,solidity也更健壮,所以,我们用solidity。你跟喜欢python?那还是用solidity。
solc编译器。用solidity写好智能合约后,就用solc来编译。可以在进行安装。如果你想用solc,你也可以用一些机遇浏览器的编译器,比如或者,不过后面的编程的例子是使用solc进行编译的。
web3.js api。在智能合约编译好,发送到网络上之后,你就可以通过以太坊来调用它了,并且可以创建跟这些合约互动的web
这些就是在以太坊上开发智能合约,构建dapp的基本工具。
1.&Truffle
是 solidity 开发框架
1.1.&安装 Truffle
# 安装 Nodejs
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt-get install -y nodejs
# 安装truffle
sudo npm install -g truffle
# 安装testrpc
sudo npm install -g ethereumjs-testrpc
1.2.&创建项目
cd ~/ethereum
mkdir truffle-project
cd truffle-project
truffle init
neo@netkiller ~/ethereum/truffle-project % truffle init
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!
truffle compile
truffle migrate
Test contracts: truffle test
neo@netkiller ~/ethereum/truffle-project % tree
|-- contracts
`-- Migrations.sol
|-- migrations
`-- 1_initial_migration.js
|-- truffle-config.js
`-- truffle.js
3 directories, 4 files
1.3.&配置 Truffle
truffle.js
module.exports = {
// to customize your Truffle configuration!
module.exports = {
// to customize your Truffle configuration!
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*" // Match any network id
1.4.&编译智能合约
neo@netkiller ~/ethereum/truffle-project % truffle compile
Compiling ./contracts/Migrations.sol...
Writing artifacts to ./build/contracts
truffle默认只会编译最后一次修改过的合约文件, 这是为了减少比重复编译。"--all"选项,可以强制编译所有文件。
neo@netkiller ~/ethereum/truffle-project % find build
build/contracts
build/contracts/Migrations.json
1.5.&migrate
neo@netkiller ~/ethereum/truffle-project % truffle migrate
Using network 'development'.
Network up to date.
1.6.&部署智能合约
neo@netkiller ~/ethereum/truffle-project % truffle deploy
Using network 'development'.
Network up to date.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 以太坊智能合约编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信