现在位置:首页 > 以太坊2.0
  • imToken2.0钱包如何搜索和添加代币?imToken2.0钱包添加代币教程

    全文导读 imToken2.0钱包如何搜索和添加代币?首先imtoken的比特币钱包是没有搜索和添加代币功能的, 所以你需要在imtoken的以太坊钱包或者EOS钱包下添加代币和搜索代币, 这里以添加以太坊 ERC20 代币为例。 imToken2.0钱包如何搜索和添加代币?首先imtoken的比特币钱包是没有搜索和添加代币功能的, 所以你需要在imtoken的以太坊钱包或者EOS钱包下添加代币和搜索代币, 这里以添加以太坊 ERC20 代币为例。 图文教程: 进入以太坊钱包资产首页, 点击 "+" 号按钮, 进入资产管理页面。 imToken2.0钱包如何搜索和添加代币?imToken2.0钱包添加代币教程 点击顶部搜索框, 输入 Token 名称或者合约地址, 然后选择你想要添加代币的, 点击 "+"。 imToken2.0钱包如何搜索和添加代币?imToken2.0钱包添加代币教程 注: 因为 Token 名称会有重名, 所以在添加代币时, 请认真核对合约地址。 添加完代币之后, 返回输入合约地址或输入 Token 名称的界面, 检查代币的开关是否打开(一定要查看代币开关按钮是否打开,如果未打开,显示已添加的代币,资产首页也不会显示代币)。 imToken2.0钱包如何搜索和添加代币?imToken2.0钱包添加代币教程 然后返回首页资产列表, 查看已经添加的代币。 imToken2.0钱包如何搜索和添加代币?imToken2.0钱包添加代币教程
  • imToken2.0钱包怎么用?imToken2.0钱包高级使用攻略

    全文导读 imToken2.0钱包怎么用?从imToken 2.0.0 Beta 1开始,imToken 2.0已有26个版本上线接受用户的检阅啦。常常会有用户通过各渠道问我们:你们不支持隐藏资产余额嘛?怎么知道自己的版本是不是最新版呢?DApp 浏览器怎么个玩法呀?看着别人流畅的操作 imToken2.0钱包怎么用?从imToken 2.0.0 Beta 1开始,imToken 2.0已有26个版本上线接受用户的检阅啦。常常会有用户通过各渠道问我们:你们不支持隐藏资产余额嘛?怎么知道自己的版本是不是最新版呢?DApp 浏览器怎么个玩法呀?看着别人流畅的操作,优雅的姿态,不禁问自己,我们用的是同一个 imToken吗?今天就和大家分享下 imToken 2.0 的那些隐藏玩法,原来你和高阶玩家只差一篇文章的距离。 一、长按唤起钱包管理 长按底部导航栏中的「钱包」,即可轻松唤起钱包管理,多链钱包切换,单手操作也不怕! 再也不用横跨屏幕对角线「管理钱包」啦! imToken2.0钱包怎么用?imToken2.0钱包高级使用攻略 二、一键隐藏资产 BTC/ETH/Cosmos/EOS 钱包操作相同,只需点击资产余额,就会由数字变为,一键掩饰贫穷/富有啦;请注意,隐藏后钱包地址也变为,点击右边的二维码还是可以显示并复制哦 imToken2.0钱包怎么用?imToken2.0钱包高级使用攻略 三、DApp 隐私设置(启用/关闭) 为了解决原始以太坊提供商对象带来的安全风险增加,以太坊社区通过 EIP 1102 提案后,imToken 及时响应社区,DApp 浏览器默认开启「DApp 隐私模式」,即DApp 首次访问钱包地址时都需要你的授权,大幅改善了用户隐私; 如下图操作,你可以按需选择关闭或开启「DApp 隐私模式」,又或是清空 DApp 授权: imToken2.0钱包怎么用?imToken2.0钱包高级使用攻略 四、资产排序随心定 代币种类太多,无论是转账还是查看都太费劲?「偏爱」的代币无法前置方便关注?还没有了解「资产排序自定义」功能你就 OUT 啦! imToken2.0钱包怎么用?imToken2.0钱包高级使用攻略 五、版本情况了然于胸 如何知道我的 imToken 是否为最新版本?除了应用商店中的「更新内容」在哪里才能看到以往的版本更新介绍呢? ——简单!如下图操作,前往「版本日志」所有版本就了然于胸啦: imToken2.0钱包怎么用?imToken2.0钱包高级使用攻略 PS:大家是否有注意过 2.4.0.547 中的「547」有什么含义呢?—— imToken 2.0 至今面向用户的上线版本仅 26 个,但是开发内部打包次数已达 547 次;每一个你下载使用的版本背后,都是 imToken 团队不断的设计、否定、测试、优化、完善,对产品严谨的态度,以及坚持一贯的品质、品位。
  • imToken钱包防丢防盗指南?

    全文导读 imToken钱包防丢防盗指南?作为一名imtoken钱包用户,如何更好保护自己的数字资产安全问题?有哪些策略供大家选择?这个问题可以说是数字资产行业一个永恒的话题,在分享具体策略之前呢, imToken钱包防丢防盗指南?作为一名imtoken钱包用户,如何更好保护自己的数字资产安全问题?有哪些策略供大家选择?这个问题可以说是数字资产行业一个永恒的话题,在分享具体策略之前呢,我通常会先和大家解释清楚两个问题: 了解中心化钱包和去中心化钱包的区别; 安全是相对的,没有绝对的安全,针对每个人的不同情况,可能有不同的安全策略。 那么我先和大家分享一下,什么是中心化钱包,什么是去中心化钱包,它们的根本区别是什么呢? 其实它们最根本的区别就是,私钥是否自持。 imToken钱包防丢防盗指南? 去中心化钱包有几个特点:首先私钥是用户自持,当然密码也是用户自持,其次呢,资产是存储在区块链上,而不是托管在中心化的服务器上,然后目前也无需实名认证, 即可生成钱包,生成钱包的成本也很低 同时,无法实现“账户冻结”、“交易回滚”等操作。 那么在传统的互联网技术中,也可以说在使用中心化钱包的时候,我们会看到有注册登录这样的功能,用户也不会和私钥打交道, 同时呢,如果用户忘记密码,还可以通过注册的邮件或者手机号, 得到找回密码服务局。 但是目前上述提到的服务, 在去中心化钱包中是不存在的。这使得去中心化钱包有一个好处就是,很难遭受黑客的集中攻击, 用户也不用担心钱包服务商出现监守自盗的情况。 钱包安全的本源是「防盗」「防丟」, imtoken钱包所有的安全策略其实都是围绕这两点展开,这里有钱包安全 10 不原则, 具体内容是: 不使用未备份的钱包 不使用邮件传输或存储私钥 不使用微信收藏或云备份存储私钥 不要截屏或拍照保存私钥 不使用微信、QQ 传输私钥 不要将私钥告诉身边的人 不要将私钥发送到群里 不使用第三方提供的未知来源钱包应用 不使用他人提供的 Apple ID 我认为只要 imtoken钱包普通用户确保以上几点,举一反三,那么就足可以确保你的钱包是安全的。
  • imtoken钱包如何修改钱包密码?

    全文导读 imtoken钱包如何修改钱包密码?在去中心化钱包中,所有用户的身份验证内容,如交易密码、私钥、助记词等都保存在用户手机本地,并不保存在中心化服务器中,所以用户忘记密码无法通过第三方机构(例如 imToken 团队)来重置。 imtoken钱包如何修改钱包密码?在去中心化钱包中,所有用户的身份验证内容,如交易密码、私钥、助记词等都保存在用户手机本地,并不保存在中心化服务器中,所以用户忘记密码无法通过第三方机构(例如 imToken 团队)来重置。 imtoken钱包如何修改钱包密码? 在 imToken 1.0 中,解决办法是通过重新导入助记词或者私钥来重新设置新的密码。 重置密码教程:「我」-「管理钱包」-「选择要修改的的钱包」 -「修改密码」-「马上导入」-「助记词/私钥」 在 imToken 2.0 中,如果身份密码忘记,只能删除 App 重新导入身份助记词重置密码。如果导入的钱包密码忘记,可以通过导入助记词或者私钥来重新设置新的密码。 重置密码教程:「点击下拉按钮打开钱包列表」-「导入的钱包“+”」-「选择导入的钱包类型」-「输入钱包助记词或者私钥并设置新的密码」-「提示钱包已存在点击确认」 PS: 一定要确保备份的助记词或者私钥是正确的。
  • imToken钱包2.0ETH钱包备份教程

    全文导读 为了出现下列情况时能够恢复钱包,我们必须对钱包进行备份。imToken App被删除了,钱包被删除了,手机丢失 /损坏,备份钱包有两种方式,你可以任选其一进行备份 为了出现下列情况时能够恢复钱包,我们必须对钱包进行备份。 imToken App被删除了 钱包被删除了 手机丢失 /损坏 备份钱包有两种方式,你可以任选其一进行备份: 1、通过备份助记词备份(下图中蓝色路径); 2、通过备份keysotre备份(下图中粉色路径); 3、备份私钥(下图中绿色路径) 当前版本的imtoken提供了三种备份方法,供用户选择。 在备份之前有必要先讲解一下,我们是如何控制钱包的: 一个钱包由两部分组成:公钥和私钥。 公钥就是钱包地址,有了地址就能收款,就相当了知道门牌号就能给该地址寄东西了; 有私钥才可以把钱包里的资产往外转,可以理解为私钥就是房子的钥匙,有了钥匙就能把房子里的东西往外拿。 助记词=私钥=keystore+密码,它们之间的关系可以参考下图。 imToken钱包2.0ETH钱包备份教程 下面分别讲解两种备份方式。 imToken钱包2.0ETH钱包备份教程 按照上图点击「备份钱包」,跳转至如下页面: 2-1:通过助记词备份钱包 imToken钱包2.0ETH钱包备份教程 点击「备份助计词」,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 输入钱包密码(这相当在备份之前先确认你的身份),然后点击「确认」,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 备份注意事项: 用手按顺序且工整的抄下你的助记词,放在安全的地方,建议多备份几份; 一定不要截图,有人截图了助记词然后账户被盗。切记! 助记词很重要,有了助记词可以做到恢复(生成)钱包和重置密码,就能转走钱包里所有的资产; 不能像我这样把助记词公布出来,我是为了写教程特意创建了一个不会用来存资产的钱包。 建议助记词的保管方式: 1、抄到本子上,锁在家里安全的地方; 2、断网的环境下,将助记词记录到excel或其他文本上,然后加密,存放在一个专门用来保存它的U盘里。(这类操做时无论是手机还是电脑,都一定要断网,否则都有被盗的风险。谁都不能保证自己的手机或者电脑是绝对安全的,断网是比较好的方式) 按照上图提示点击下一步,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 按照你抄写的顺序将12个助记词,依次点选到框中,完成后点击「确认」。 这个过程是系统在确认你是否把助记词按顺序记录下来了; 注意:这里系统只是让你做了一个简单的确认,你不光要记住单词的顺序,还必须记住单词的正确拼写,因为当时需要通过助计词恢复钱包时,不仅要求顺序要对,拼写也要正确,否则将无法恢复钱包。 如果你的输入正确,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 如果出现上面的画面说明顺序没错,如果你能保证你的拼写没错的话,点击「确认」 跳转至如下画面: 恭喜你,通过助记词的备份顺利完成! imToken钱包2.0ETH钱包备份教程 2-2: 通过keystore备份 在上图这个页面中点击「备份keystore」,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 输入密码并点击「确认」后,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 iPhone手机推荐使用自带备忘录或copy然后复制到备忘录或其他文档中。这里讲解通过备忘录备份。 注意: keysotre备份后拷贝下来,比如拷贝到excel里,然后对Excle进行加密。 不要通过发邮件、微信和qq等各种网络途径备份,虽然keystore是加密过的私钥,但是存在被暴力破解的风险。 点击上图中的备忘录(Add to Notes),跳转至如下页面: blob.png 点击「存储」,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 参照上图,右上角点击「保存」,跳转至如下页面: imToken钱包2.0ETH钱包备份教程 第三种备份方式是私钥备份,和助记词一样,直接抄到本子上。私钥的样式为64 位 16 进制的哈希值字符串,如这样的:56f759ece75f0ab1b783893cbe390288978d4d4ff24dd233245b4285fcc31cf6
  • imtoken钱包如何导入BTC钱包?

    全文导读 imtoken如何导入BTC钱包?用户在使用 imToken 2.0 的时候, 必须要使用助记词生成一个数字身份, 如果你之前没有备份助记词, 或者你是第一次使用去中心化钱包, 那么你可以点击创建身份, 关于如何创建数字身份, 可以点击这里查看教程。如果你之前有备份过助记 imtoken如何导入BTC钱包?用户在使用 imToken 2.0 的时候, 必须要使用助记词生成一个数字身份, 如果你之前没有备份助记词, 或者你是第一次使用去中心化钱包, 那么你可以点击创建身份, 关于如何创建数字身份, 可以点击这里查看教程。如果你之前有备份过助记词, 那么你可以使用恢复身份功能, 导入助记词来生成数字身份。那么在当前数字身份下, 如何导入BTC钱包呢? 这里以导入比特币助记词为例: 点击 "钱包" 首页顶部下拉切换钱包按钮, 点击 "导入的钱包" 右侧 "+" 号按钮 imtoken钱包如何导入BTC钱包? 进入 "选择钱包类型" 界面, 点击 "比特币钱包", 进入 "导入 BITCOIN 钱包" 界面 imtoken钱包如何导入BTC钱包? 选择 "助记词", 并在输入框中输入助记词(每个助记词之间以空格分隔), 输入钱包密码, 选择是否是隔离见证钱包地址 imtoken钱包如何导入BTC钱包? 注: 这里有一点需要注意的是, 在选择地址类型时, 是选择 "隔离见证" 还是 "普通钱包", 隔离见证钱包是以 3 开头的 BTC 地址, 而普通钱包是以 1 开头的 BTC 地址。 什么是隔离见证? 隔离见证, 英文全称 (Segregated Witness, 简称: Segwit), 最早由比特币核心开发者 Pieter Wuille 在 2015 年提出。它是目前比特币应对扩容比较好的解决方案。支持隔离验证的钱包地址统一以数字 "3" 开头, 与多重签名钱包保持一致。 隔离见证的好处: 更好的安全性。 可以增大区块容量。 检查交易更快速。 交易手续费会比普通地址类型 (以 1 开头的地址) 更便宜。
  • imToken钱包转账失败应该怎么办?

    全文导读 imToken钱包转账失败应该怎么办?imToken是一款移动端轻钱包App应用。旨在为普通用户提供一款安全放心、简单好用、功能强大的数字资产钱包应用。大家在使用imToken的过程中肯定碰到过转账失败的情况,今天我就来为大家详细讲解一下如何处理转账失败的问题 imToken钱包转账失败应该怎么办?imToken是一款移动端轻钱包App应用。旨在为普通用户提供一款安全放心、简单好用、功能强大的数字资产钱包应用。大家在使用imToken的过程中肯定碰到过转账失败的情况,今天我就来为大家详细讲解一下如何处理转账失败的问题。前方高能预警,请系好安全带 ~ 转账失败大致分为两种情况:一种情况是交易未被打包导致转账失败,另外一种情况是交易在打包的过程中发生了错误导致交易失败。 交易未被打包导致转账失败 交易未被打包不会扣除矿工费,绝大多数未被打包的情况是矿工费设置的过低导致的。通过http://etherscan.io/ 查询会出现以下几种提示 1.Sorry,we are unable to locate this Transaction Hash imToken钱包转账失败应该怎么办? 截图中的提示表明,这笔交易未被打包。小编发送这笔交易时 http://ethgasstation.info 推荐的 Gas Price 为 61 Gwei。小编设置的 Gas Price 为 1 Gwei。这笔交易因为设置的 Gas Price 过低,被丢弃的概率是比较大的。 2.Pending 状态 重新发送一笔交易,将 Gas Price 设置为 40 Gwei,发送交易后查询这笔交易的详细状态 imToken钱包转账失败应该怎么办? 截图中的信息表明,这笔交易已经进入了打包队列,正在排队。只要耐心等待打包成功就可以了。 解决办法 转账时设置合适的矿工费。在 imToken 2.0 国际版中,设置矿工费的滑动杆最大值和最小值都是从以太坊网络实时获取的,推荐的矿工费就是能够保证你这笔交易成功的最小值,所以只要按照 App 内部推荐的矿工费数值设置就可以了。 imToken钱包转账失败应该怎么办? 那么问题又来了,如果我这笔交易已经发送成功但是矿工费设置的过低,我想加速交易应该如何操作呢? 在目前已经发布的版本中的解决办法是发送一笔相同的交易 ( 这里的相同指收币地址相同,代币转账数量相同 ) 并调高 Gas Price,只要后发送的这笔交易成功了,前一笔交易就会失败。 在下一个版本我们会增加 ETH 的加速功能,可以在交易发送后通过提高这笔交易的 Gas Price 的方式加速这笔交易,请大家耐心等待 ~ 打包过程中出现错误导致失败 打包过程中出现问题大概分为三种类型: 1.Reverted 错误 imToken钱包转账失败应该怎么办? 2.Bad instruction 错误 imToken钱包转账失败应该怎么办? 3.Out of gas 错误 imToken钱包转账失败应该怎么办? 其中Reverted错误和Bad instruction错误都是智能合约的问题,所以出现这种情况联系代币的发行方询问解决办法就可以了。 提示Out of gas错误是因为转账设置的Gas值低于合约默认值导致的,目前大部分智能合约的Gas值都是60000.但是某些合约比较复杂,调用的时候需要更高的Gas值。这时重新发送一笔交易,通过高级选项设置Gas值高于默认Gas值就能够成功发送这笔交易了。
  • 以太坊教程:Rollup Bridge 介绍(三):Celer cBridge

    本文受众:对汇总了解的区块链爱好者 Celer cBridge 是一个跨链资产转移方案,cBridge 同时支持了 L1 和 L2、以及 L1 与 L1 之间的桥接。我们可以从 cBridge 的 Web App 上看到他们已经支持了许多知名的 L1 和 L2 项目。 cBridge 支持的链种 本篇文章会时间在cBridge背后的技术实现,包含原理、契约实践以及运维的介绍。 道原则 cBridge 主要使用了 HTLCs 技术来实现跨链的资产转移,对于 HTLCs 不熟悉的读者,可以先参考这篇文章了解其原理以及应用场景:http://bcoin.io/guides/swaps.html 流程 cBridge 在其契约中 GitHub 的文件里描述了 cBridge 的道流程,以下为节选部分: 发送方在源链上发起转移交易 cBridge节点通过使用发送方的hashlock,在岸设置链上发起转账交易 发送方在源链上确认交易 cBridge 节点在目的地链上确认交易 为了帮助理解,我将一步步画成的如下图: cBridge 澜 下面会就四个关键步骤依序进行细节说明: 首发发送方发起转移交易 整个cBridge跨链的资产转移流程地址会由源链的发送方(即使用cBridge进行转帐的用户)发起帐单。发送方会负责产生哈希锁,设置转帐的时限,并与转的信息(令牌、 token 数量、目的地链代号、授权人地址)一起向部署在源链的 cBridge 合约发起转出请求。接收合约到请求后会的token数量,从发送方有将转移合约,导致转帐时限先要后转,才能将token取出。 第二步: cBridge 节点发起转账交易 在链下的cBridge节点会持续监控各链上cBridge合约的动作,当它发现源链上有突发的新转出请求,它会在链上获得转出的细节,主动对目的地进行部署链上的 cBridge 契约在请求中发起转移。 以协议方为指定的人地址,并使用与转让相同的哈希锁,限时转让以及取款时(约源链上设定限时2/3),准予转让的令牌 数量扣掉 cBridge 节点转发的成本和交通后,从 cBridge 节点转移到目的地链上的 cBridge 合约。 此时cBridge节点不知道,要外送方在第三步完成源链上转出散列锁,并揭散散列锁的答案后,cBridge本身有能力执行旅游链上转入的偏。 第三步:发送方确认交易 发送方确认 cBridge 节点有在目的地链上提交相应的转移后,就可以在请求链源上转移出请求的外部阶段。发送方首先要对源链的 cBridge 合约提交转移出哈希锁的答案,合约无误后,转出指定的令牌数量转移到cBridge节点,完成源链上转出的验证节点。 第四步:cBridge 节点确认交易 在链下的cBridge节点节点发送到监控方已经在源链上完成转出源后,准备好发送方节点时传播的哈希锁,到目的地链上的cBridge合约提交哈希锁,完成转入链上的链,此时的链上的人会收到来自源头的发送方,完成跨链的资产转移。 细节步骤看起来很繁琐,但对于cBridge App的用户来说,只要进行表演签名操作(第一步先转出,第三步对转出交易),并等待一些时间(3~5分钟) ,过程中完全不需要切换下载的网络,使用起来是非常简单流畅的。 退款 不小心是转出 自己转出在一个有效时间里转出,当有任何约定没有履行义务时,在设定的时限,自己有能力可以直接要求cB 合约免除任何人去处理转帐后的令牌,不需要提供哈希锁的答案。因为信用卡能够保护双方的资产,不会导致资产被永久锁在 cBridge 合约上。 因为是临时,目的地链的转出会比源链的转出更早,有可能cBridge节点对转出进行退款,用户才对转出进行确认,此时才会对用户造成损失。 当前cBridge Web App设置的转出时间截止时间为12,对应的转出时间约为12 * 2/3 = 8小时,时间相对充足,一般正常的转帐只需要几分钟,如果过程中出现非预期的状况,还可以有东南亚的反应时间处理。 简单的操作体验背后的代价 眼尖的读者可能已经发现,cBridge 道踏板中的第三与第四步,与典型的 HTLC 不同。 ,cBridge 节点可以到链源链取回它在链源公园付给每个人的链上。Celer官方说明这是为了提升用户体验,如果走典型的HTLC流程,用户在确认转出要外的步骤中,切换钱包的网络至目的地链,还需要专门在目的地链上的钱包里准备的gas token来支付自由的交易,对用户来说非常不方便。 因此cBridge调整了最后两个步骤的顺序,让用户只需要源源链进行操作,来致命的提升用户的体验。但这样的调整并不是没有成本,它会为用户带来额外的风险。 一个想链上:当用户在尝试源头,c桥节点收到用户的成功后,却没有在目的地链上将转移到海外给人(可能是、gas token或不足)是当机),节点节点链上的转账在生日当天,cBridge节点有能力对转账进行实时的操作,cBridge节点有可以无偿转帐用户获得的令牌。这部分必须仰赖用户自己的行动去降低风险,当你发现在有效区间内等了社交久的时间,国内人还没有得到目标,用户必须要自己主动去寻找链提供散列锁的答案,完成转移到特定的动作,以防止资产被恶意取走。 安全分析 综上所述,我们针对发送方和 cBridge 节点在 cBridge 四个操作步骤中可能产生的安全问题,进行分析与整理: 如果发送方执行了初步但是cBridge节点没有往下执行,此时发送方的资产会单方面被扣押在源链的cBridge合约中,必须要等待12小时,才能进行退款。 如果 cBridge 节点执行了第二步但发送方没有下执行,此时发送和 cBridge 节点资产的两个会被扣押押在源链和目的地链的 cBridge 合约中,必须更新帐单到期后,才能进行相关方需要的是,cBridge 能够在目的地链上的转移有更短的到期时间(8 小时比发送方更早完成)。 如果发送方执行了第三步但 cBridge 节点没有往下执行,此时发送已将资产转给 cBridge 节点,但目的地链上的新西兰人还没有收到相应的消息。到目的地链上的转移在到期后,cBridge 节点甚至有能力进行回转移,而导致发送方单方面的损失。 这个情况取方发送方带来安全疑虑,发送方需要在转入日期前(8 内),自己(或委托人)到目的地链上完成转入。人却迟迟没有收到任何收获,这时候就需要提高警觉了。 cBridge节点执行完第四步但交易没有成功(例如天然气),这时候发送方仍有损失的风险。以保护自己的资金安全。 契约实践 cBridge契约实践很简单,提供了转出、转入、确认以及退款的功能,人数众多,都是cBridge流中的核心动作,而且这些方法都可以让任何人去使用的。因此当节点在转帐过程中出现问题时,用户能够直接对资产进行操作,保护自己的。 cBridge 约定方法界面 特别要注意合约方法转出的第一个参数地址_bridge。这个参数链要填入才能为服务这些跨转帐需求(例如支持1,000 USDT从以太坊交易到Polygon)的cBridge地址,位置,用户在进行跨链转帐之前,必须先确定好要找哪个cBridge节点来服务。 Celer 官方提供了一个网关服务,负责 cBridge 节点的信息,用户将转帐的信息该给服务,它会尽快转用户转帐需求,且济州状态最好的岭节点(例如成功率高、低低等),用户在进行转接时填入塞勒推荐的cBridge节点。 由于 Celer 官方实际提供网关的相关信息,有技术背景的用户可以开始去操作 cBridge Web App,了解其背后的实践细节。 此外,契约里也有一些人可以去关注的重要事件: LogNewTransferOut事件:transferOut完成时会发出的事件,会记录转出的transferId。 LogNewTransferIn事件:transferIn完成时会发出的事件,会记录转入的transferId及其对应的转出的transferId(srcTransferId)。 在 cBridge 合约上不管是要确认呼叫请求,都需要提供 transferId,因此 transferId 在 cBridge 的应用中是控件的信息。除此之外,通过这两个事件的观察,帮助我们将跨链的转出和转入关联起来,有监控追踪转帐的状态,并在接下来发生的时候有什么能力。 cBridge 合约事件界面 节点运维 Celer官方自己开源了cBridge节点的实践,任何人都可以跑起的节点,但cBridge现阶段有白名单机制,想服务cBridge节点来服务用户一定要先跟官方接洽。 养节点的好处是可以从各个笔跨链转帐单中带一些带的链转帐,但还要考量到运维节点的,Celer 官方很贴心地在 cBridge 节点 GitHub 文件里详细了运维节点需要注意的事项,包括机器建议配备,支持的还有货币种类和需要提供的流动性,各条的建议链配置,运维节点数据的最佳操作等等,节点甚至建统计的API ,让运维者能够随时监控节点的交易状况。 从 GitHub 文件的程度以及量了运维节点的官方资料,可以找到 Celer 对社区的用心。 结语 以上是对于cBridge背后技术实现的介绍,如果有任何想要分享,想要了解更多,都可以一起讨论?
  • 以太坊教程:Rollup Bridge 介绍(二):Hop Protocol

    本篇是 Rollup Bridge 介绍的第二篇,建议先从第一篇 Maker Bridge 看起: 以下所称 L2 皆指 Rollup 而非 Plasma 或侧链 以下所称「资产」和「代币」两个词指的是一样的东西 以下所称「七天」和「Rollup 挑战期」两个词指的是一样的东西 快速跨 Rollup 资产转移 如果你现在要从 Rollup A 把资产搬到 Rollup B,要怎么搬?答案是从 Rollup A 提款至 L1,再从 L1 存款到 Rollup B。所以你要等 Rollup A 的挑战期,然后再等 Rollup B 的存款到账(通常不会很久)才能成功完成跨 Rollup 的资产转移。 图片来源:Steven Wu from imToken Labs 而 Hop protocol 就像是前篇介绍里 fast withdrawl 的例子一样,只是现在流动性提供者是在 Rollup B 上去垫付而不是在 L1。以下会以 fast transfer 来指跨 Rollup 资产转移,以便和 fast withdrawl 做出区分。 从高维来看 Hop protocol 就跟 fast withdrawl 一样简单,流动性提供者承担资产锁住七天的风险及机会成本,收取手续费;使用者支付手续费,换取能快速把资产转移到另一个 Rollup 的服务。 注:Hop protocol 里把流动性提供者称作 Bonder。 而如同 fast withdrawl 的例子,如果没有人来垫付你的 fast transfer,你就必须自己走完正常的路线:回到 L1 再进到 Rollup B。 注:Rollup A 和 Rollup B 都支援 Rollup Bridge 的功能也是必要条件,否则无法安全可信地把转账讯息从 A relay 到 B 上。 不过实现 Hop protocol 其实没有这么简单。首先,每一个 Rollup 的提款方式、挑战期以及存款时间都不一样。每一个 Rollup 都需要 Hop protocol 团队去对接。 注:Hop protocol 也可以接上 ZK Rollup,ZK Rollup 因为没有挑战期所以设计会比较不一样,但一样需要团队去对接。 而整个 Hop protocol 的安全性会取决于其所接入的 Rollup 中安全性最低的那个。如果某一个 Rollup (或甚至 Rollup 上面的某一个代币合约)出现漏洞,导致攻击者可以任意凭空印钞,那攻击者就可以马上通过 Hop protocol 来换成其他 Rollup 上的资产。 其实就和跨链桥一样,你的防守范围从一条链变成了多条链上的无数个资产,其安全性不容轻忽。 接下来会介绍一些 Hop protocol 的设计细节 批量处理 如果每一笔 transfer 背后对应的 Rollup A -> L1 -> Rollup B 步骤,流动性提供者都要一笔一笔跑过一次,那会耗费很多 gas。所以 Hop protocol 提供批量处理的功能,流动性提供者可以等待一段时间,收集垫付完的 transfer,再把它们一并处理。 hToken hToken 是 Hop protocol 的代币,但这个不是治理代币,而且每个代币在 Hop protocol 里都有相对应的 hToken,例如 ETH 有 hETH,DAI 有 hDAI。 为什么需要 hToken? 首先,它能统一代表同一种代币,简化使用介面的复杂度:使用者不需要选择他要换的是 Optimism ETH 还是 Arbitrum ETH,使用者操作的都是 hETH。 其次,Hop protocol 不需要负责维护一个正统代币的清单。任何人都可以在 Rollup 上发行一个 Dai 合约,那 Hop protocol 要怎么知道哪一个才是 Maker 团队部署在 Rollup 上的 Dai 合约?答案是:Hop protocol 不需要知道,它只需要知道 hDAI。(你可能会想:拿到 hDAI 可以干嘛?hDAI 等于 Dai 吗?我们马上就会讲到) 最后,延续上一点。假设今天没有 hDAI,而我要从 Rollup A transfer Dai 到其他 Rollup。Hop protocol 就必须在 Rollup A 上记载 Rollup B C D E … 上的 Dai 合约地址,而且其他 Rollup 也都要依照办理。所以这样全部 Rollup 上总共记载的数目会是 NNM(N 是 Rollup 数量,M 是代币数量)。另外,谁有权力决定哪一个 Dai 合约才是正统? 好,那我今天拿到 hDAI 后可以干嘛?答案是拿去 AMM 换成 Dai。我们先不讨论 AMM 从哪里来,因为只要有诱因就会有人建出 hDAI/Dai 的 AMM 交易对并提供流动性。 注:这里的 AMM 指的 L2 上的 AMM。 先介绍 hToken 哪里来:任何人都可以到 L1 的 Hop protocol 合约抵押代币获得 hToken,例如抵押 Dai 获得 hDAI。流动性提供者一定会需要抵押来获得 hToken,因为他们垫付的代币会是 hToken。 接下来,假设使用者要从 Rollup A 把 Dai transfer 到 Rollup B,这过程会包含 (1) 把 Dai 换成 hDAI、 (2) transfer hDAI 到 Rollup B、 (3) 在 Rollup B 上把 hDAI 换成 Dai 其中 (1) 和 (3) 都会有 Dai/hDAI 互换的需求,有需求自然就会有人愿意提供 Dai/hDAI 流动性来赚取手续费。 图片来源:Steven Wu from imToken Labs 当然,如果你没有被说服为什么需要 hToken,那 hToken 和 AMM 看起来就会像是故意挤出来扒使用者皮的玩法。你可以想想看假设没有 hToken 的话,这个 protocol 的哪些运作流程、使用者介面会长得不一样,会是更好、还是更坏。(或许真的会变得更好?) 最后是一些我想到的可能的问题。 手续费怎么估?如果没有人垫付? 你可能有注意到,这个垫付的模式是你直接申请 transfer 然后等人来垫付,所以你在申请 transfer 时就要写好你愿意支付的手续费是多少,如果你的手续费太低,那下场就会是你要自己跑完 transfer 过程 — 等待七天。 另外一个模式是你和流动性提供者先在链下协议好手续费,然后再送 transfer 申请到 Rollup。但是因为现在是在两条不同 Rollup 上,表示交易不会是原子的:如果你在 Rollup A 上送出了你和流动性提供者协议好的 transfer,结果流动性提供者没有在 Rollup B 上依约垫付给你,你必须要有管道能够在 Rollup B 上证明你在 Rollup A 上和该流动性提供者的 transfer 协议。而这个管道会需要 Rollup B 能够读取到 Rollup A 的交易(因为这样才能以去中心化的方式来证明),这并非做不到,但是考量到其复杂度和带来的效益,可能不太值得。 所以目前这个模式会是比较可行的,但也表示计算手续费这边要小心,避免没有人来垫付,导致使用者要等七天。 另外不同 Rollup 上收取 gas 费用的方式不一样,也是 Hop protocol 团队在设计估算手续费功能需要注意的地方。 Happy case 以外情况的 demo? 目前 Hop protocol 团队提供的 demo 只有 happy case 的 demo,没有 demo 发生没人垫付的情况或是流动性提供者平常在不同 Rollup 间搬运、平衡资产的过程。
  • 以太坊教程:Rollup 不完全指南(精选)

    Rollup 最近在 Ethereum 社区风靡一时,有望在未来成为 Ethereum 的主要扩容解决方案。但这项技术到底是什么样的呢?它可以给我们带来什么变化?我们如何使用这项技术?这篇文章将试图回答其中的一些关键问题。 背景:什么是 Layer 1 和 Layer 2 扩容? 目前主要有两种区块链扩容方式。 首先,你可以直接提高区块链交易吞吐量,但这类技术主要挑战为「当区块容量越大时,区块链将更难以验证,而且很可能逐渐变得更中心化」。为了避免这样的风险,开发者可以提高客户端软件的效率(译者注:比如 Turbo Geth),或者使用 Sharding 技术让构建和验证工作分散到许多节点上,目前 Ethereum 准备借助 Eth2 升级引入 Sharding 技术。 其次,你也可以改变使用区块链的方式。用户不必将所有交易放在区块链上,而是可以通过 Layer2 协议在链下执行大部分交易。即链上的智能合约只需执行两个任务:处理存取款和验证链下交易的有效性。由此减轻链上负担,提高交易处理效率。 State channels vs plasma vs rollups 目前主要有三种 Layer 2 扩容方案:State channels、Plasma 和 Rollups,这三种各有优劣。 译者注:译文中省略 State channels 和 Plasma 科普内容,主要讲述 Rollups 部分。 术语说明 Batch:批处理交易,指将 Layer2 交易批量打包并提交到 Layer1 的 Rollup 合约。 Sequencer:排序者,指在 Layer2 上打包排序交易的角色,类似 Layer1 的矿工。 State root:状态根,指 Layer2 上所有状态(账户余额、合约代码等)通过 Merkle Tree 生成的哈希值。 Rollups 参考:Optimistic rollups: http://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/optimistic_rollups/ 和 ZK rollups。:http://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-rollups Plasma 和 State Channels 是「完全」的 Layer2 方案,因为它们试图将数据和计算都转移至链下。然而,由于存在「数据可用性的博弈问题」,意味着这两种方案不可能安全地满足所有应用场景。Plasma 和 State Channels 通过依赖所属权的 owner(译者注:因为提交欺诈性证明需要证明资产所属权,这也是为什么 Plasma 采用 UTXO 方案,所以无法解决像 Uniswap 资产所属权场景的问题。感谢 Chih Cheng Liang 指点)来解决该问题,但这使它们无法完全通用化。 另一方面,Rollups 是一种「混合」的 Layer2 方案。Rollups 将计算(以及状态存储)转移至链下,但同时将每笔交易的部分数据保留在链上。 为了提高效率,他们使用了不少 fancy 的压缩技巧,尽可能地使用「计算」代替「数据」。其结果是系统的扩容仍然受限于底层区块链的数据带宽,但效率是可观的:Ethereum ERC20 代币转账成本约为 45,000 gas,而 Rollup 中的 ERC20 代币转账仅使用 16 字节的链上空间,成本低于 300 gas。 事实上,数据上链是关键(注意:将数据放在 IPFS 上是行不通的,因为 IPFS 不提供任何给定数据是否可用的共识,所以数据必须放到区块链上)。将数据放在链上并获得共识,如果任何人愿意,他们可以在本地处理 rollup 中的所有操作,从而允许他们监测欺诈交易,请求提款,或亲自生成 transaction batches。因为没有数据可用性问题,所以恶意或离线运营者所造成的损失会更少(比如他们不能造成 1 周的延迟),从而为谁有权发布 batches 打开了更大的设计空间,并简化 rollups 系统。最重要的是,没有数据可用性问题也意味着不再需要将资产映射到 owners。 这是 Ethereum 社区对 rollups 比以往的 Layer2 扩容方案更兴奋的关键原因:Rollups 是完全通用的,我们甚至可以在 rollup 内运行一个 EVM,使得现有的 Ethereum 应用不必编写过多新的代码就可以迁移到 rollups 上。 那么 Rollup 到底是如何工作的呢? 链上会有一个智能合约维护着 state root:rollup 状态的 Merkle root(即 rollup 内部的账户余额、合约代码等信息的 Merkle 化)。 任何人都可以发布一笔 batch 交易,这是一个高度压缩的交易集合,包含旧的 state root 和新的 state root。合约会检查 batch 中的旧 state root 是否匹配当前的 state root,如果匹配,则将 state root 更新到新的 state root。 为了支持存款和提款,我们增加了交易的能力,其输入或输出是「外部」的 rollup 状态。如果一个 batch 来自外部的输入,那么提交该 batch 的交易也需要将这些资产转移到 rollup 合约中。如果一个 batch 有对外的输出,那么在处理该 batch 时,智能合约将会执行「提现」操作。 这一切就这么简单! 除了一个主要的细节:如何知道 batch 中的 post-state roots 是正确的呢? 如果有人可以用任意 post-state root 提交一个 batch 而没有任何惩罚,他们就可以直接将 rollup 内的全部资产转给自己。这个问题有两种截然不同的解决思路,从而衍生出两种「口味」的 rollup 方案。 Optimistic rollups VS ZK rollups 以下是这两种「口味」的 rollups 方案描述: Optimistic rollups,采用欺诈性证明:rollup 合约会跟踪历史的 state roots 和每一个 batch 的哈希值。如果有人发现某个 batch 的 post-state root 不正确,那么他们可以向合约提交证明,证明该 batch 计算错误。合约验证该证明有效后,会对该 batch 和之后的所有 batch 进行回滚。 ZK rollups,采用有效性证明:每一个 batch 都包含一个称为 ZK-SNARK 的密码学证明(例如采用 PLONK 协议),它可以证明 post-state root 是执行该 batch 的正确结果。无论计算量有多大,合约都可以迅速地在链上验证证明。 但两种「口味」的 rollup 之间有着复杂的权衡: 方案权衡:http://www.notion.so/50a740eec456419089d93f3ec3008ad0 总的来说,我的观点是: 短期内,Optimistic rollups 很可能在通用的 EVM 计算中胜出,而 ZK rollups 则可能在简单的支付、交易和其他特定应用场景中胜出,但最终从中长期来看,随着 ZK-SNARK 技术的改进,ZK rollups 将在所有场景中胜出。 欺诈性证明剖析 Optimistic rollup 的安全性主要取决于:如果有人将一个无效 batch 发布到 rollup 合约中,那么保持跟踪链上信息并发现欺诈的任何人都可以发布欺诈性证明,向合约证明该 batch 无效并回滚。 如图所示,声称某 batch 无效的欺诈性证明将会包含这些绿色数据:该 batch 本身(对照存储在链上的哈希值核对)和 Merkle tree 的部分内容,从而证明该 batch 读取或修改特定账户。 而该树中的黄色节点可以从绿色的节点重建,所以不必提供。这些数据足以执行该 batch 并计算 post-state root(注:类似 stateless clients 验证单个区块的方式)。如果计算出的 post-state root 和该 batch 中提供的 post-state root 不一样,那么说明该 batch 具有欺诈性。 如果一个 batch 存在错误,但之前所有的 batches 都是正确的,那么就可以创建一个欺诈性证明以表示该 batch 是错误的。 请注意对旧的 batches 声称无效的处理:如果存在多笔无效 batches 提交到 rollup 中,那么最好尽量证明最早无效的 batch。当然,如果一个 batch 是正确的,那么永远不可能创建一个欺诈性证明以表示其无效。 Rollups 是如何压缩数据的? 一笔简单的 Ethereum 交易(比如发送 ETH)通常消耗约 110 字节。然而,在 Rollup 上发送 ETH 仅仅消耗约 12 字节。 字节消耗对比 为了达到这样的压缩效果,一方面是采用了更简单高级编码,而目前 Ethereum 的 RLP 在每个值的长度上都浪费了 1 字节。另一方面,还有一些巧妙的压缩技巧: Nonce:该参数的目的是为了防止「重放」。如果账户的当前 nonce 是 5,那么该账户的下一笔交易必须使用 nonce 5,但一旦交易被处理,那么该账户中的 nonce 就会被递增到 6,这样采用 nonce 5 的交易就不会被执行。在 rollup 中,我们可以完全省略 nonce,因为我们只是从 pre-state 中恢复 nonce。同时由于签名会采用最新的 nonce 进行检查,如果有人试图使用旧的 nonce 重放交易,那么签名将无法通过验证。 Gasprice:我们可以允许用户使用固定范围的 gasprices 进行支付,例如 2 的 16 次幂(译者注:主要为了节省字节)。或者,我们也可以在每笔 batch 中收取固定费用,甚至可以将 gas 支付完全移到 rollup 协议之外,让交易者通过特定渠道向 batch 创建者支付费用。 Gas:我们同样也可以将 gas 设置为 2 的多次幂。另外,我们也可以在 batch 层面设置 gas 限制。 To:我们可以使用「索引」来代替 20 字节的地址(例如:一个地址是「树」中的第 4,527 个地址,我们就可以用索引 4,527 来表示它,同时我们也会在状态中添加一个子树来存储索引到地址的映射)。 Value:我们可以用科学计数法存储 value。在大多数情况下,转账仅需 1~3 有效位。 Signature:我们可以使用 BLS 聚合签名,它允许许多签名聚合成一个约 32-96 字节的签名(取决于协议)。然后,这个签名可以一次性对整个消息集和发送者进行 batch 检查。表中的 ~0.5 表示一个区块中可验证的聚合签名的数量是有限制的,因为它需要在一次欺诈证明中验证签名。 ZK rollups 特有的一个重要压缩技巧:如果交易的一部分仅用于验证,并与计算状态更新无关,那么这部分可以省略。这在 Optimistic rollup 中是做不到的,因为该数据仍然需要包含在链上,以防将来欺诈性证明检查所需,而在 ZK rollup 中,证明数据正确性的 SNARK 已经提供了任何验证所需的数据。 一个重要的例子是隐私保护 rollups:在 Optimistic rollup 中,每笔交易中 ~500 字节用于隐私的 ZK-SNARK 需要上链,而在 ZK rollup 中,覆盖整个 batch 的 ZK-SNARK 已经足以表明「内部」的所有 ZK-SNARKs 是有效的。 这些压缩技巧是 rollup 扩容的关键,如果没有这些技巧,rollup 或许只能在基础链的扩容上有大约 10 倍的提升(在一些特定的计算量大的应用中,简单的 rollup 也已经很强大),但有了这些压缩技巧,几乎所有应用的扩容系数都可以超过 100 倍。 谁可以提交 batch? 关于哪些人可以在 Optimistic rollup 或 ZK rollup 中提交 batch 的问题存在许多流派。一般来说,大家都认为提交 batch 的用户必须先交纳一大笔押金,如果该用户提交欺诈性的 batch(例如采用一个无效的 state root),那么这笔押金的一部分将被烧掉,另一部分作为奖励给到提交欺诈性证明的用户。但除此之外,还存在许多可能性: Total anarchy:任何人都可以在任何时候提交 batch。这是最简单的方法,但它有一些严重的缺点,比如存在这样的问题:多个参与者同时生成并试图提交 batch,而其中仅有一个 batch 可以成功被收录。这将导致大量的浪费,比如没有意义的生成 batch 证明或者提交 batch 到链上。 中心化的 Sequencer:通过 Sequencer 这样的角色提交 batch(除了提现操作:首先由用户自己提交提现请求,如果 Sequencer 在下一个 batch 中没有处理该提现交易,那么用户可以亲自提交一个 batch 处理提现)。这是最「高效」的,但它依赖于一个中心化的角色。 Sequencer 拍卖:通过拍卖(比如每天)来决定谁有权利成为第二天的 Sequencer。这种方案的优点是可以筹集资金,而这些资金可以通过 rollup 的 DAO 来分配(参考:MEV 拍卖)。 从 PoS 集合中随机选择:任何人都可以将 ETH(或者 rollup 协议的代币)存入 rollup 合约中,每一个 batch 的 sequencer 都会从其中一个存款人中随机选择,被选中的概率与存款金额成正比。这种方案的主要缺点是大量资产被锁定,导致资金效率低。 DPoS 投票:Sequencer 通过拍卖选中,但如果他们表现不佳,那么代币持有者可以投票将其踢出,并举行新的拍卖来替代他们。 改进提交 batch 和 state root 的方式 目前一些正在开发的 rollup 方案采用的是 “split batch” 模式,即提交 Layer2 batch 的动作和提交一个 state root 的动作分开执行,这会有一些关键优势: 你可以允许许多 sequencers 并行发布 batch,以提高抗审查能力,而不用担心一些 batch 会因为其他 batch 已经被打包而无效。 如果一个 state root 存在欺诈,你不需要回滚所有 batch,仅恢复该 state root 即可,并等待有人为该 batch 提供新的 state root。这样可以更好地保障交易发送者的交易不会被回滚。 总的来说,这是一个相当复杂的技术组合,它们试图在涉及效率、简单性、抗审查和其他目标的复杂权衡中获得平衡。但现在谈哪种组合最有效还为时过早,而时间会证明一切。 Rollups 将会带来多大的扩容? 目前 Ethereum 的 gas limit 是 1,250 万,交易中每个字节的数据需要消耗 16 gas。那么如果一个区块仅包含一个 batch(我们假设使用 ZK rollup,将会消耗 50 万 gas 用于验证证明),那么该 batch 会有(1,200 万 / 16)= 75 万字节。如上图所示,每一位用户转账 ETH 仅消耗 12 字节,那么也就是说,该 batch 最多可以包含 62,500 笔交易。 在平均区块时间为 13 秒的情况下,这相当于达到约 4,807 TPS(对比 Ethereum 目前 ETH 转账的 1,250万 / 21,000 / 13 约为 45 TPS)。 部分用例扩容提升规模 那么扩容上限可以这么计算: (L1 gas cost) / (bytes in rollup 16) 12million / 12.5million。 现在值得注意的是这些数字还是过于乐观,原因有几个: 首先,最重要的是一个区块几乎永远不会仅包含一个 batch,因为将可能会存在多个 rollup 方案同时运作。第二,存款和提款将持续存在。第三,短期内使用量会很低,所以固定成本成为主要消耗。但即使将这些因素考虑在内,预计扩容规模也会超过 100 倍。 现在,如果我们想要超过 ~1,000 - 4,000 TPS,该怎么办呢?这就是 ETH 数据分片的意义所在,sharding 建议每 12 秒开辟一个 16MB 的空间,这个空间可以被任何数据填满,系统保证对这些数据的可用性达成共识,而这些数据空间可以被 rollup 使用。 这个约 1,398 kB/s 的数据量比当前 Ethereum 60 kB/s 提高了 23 倍,从长远来看,数据容量有望进一步增长。因此,使用 Eth2 分片数据的 rollup 可以处理高达约 100k TPS,未来甚至会更多。 Rollup 还有哪些尚未解决的挑战? 虽然现在 Rollup 的基本概念已经被大家所熟知,我们也很确认它们从根本上是可行的、安全的,以及已有多个 rollup 方案被部署到主网上,但 rollup 的设计仍然存在许多地方没有被很好地探索,将 Ethereum 生态系统的大部分内容完全迁移到 rollup 上以利用其扩容能力也存在不少挑战: User and ecosystem onboarding - 使用 rollups 的应用不多,用户对 rollups 也不熟悉,目前很少有钱包开始整合 rollups,而商家和慈善机构还不接受它们用于支付。 Cross-rollup transactions - 有效地将资产和数据 (例如 oracle 输出) 从一个 rollup 转移到另一个 rollup 中,而不会产生经过 Layer1 的费用。 Auditing incentives - 如何最大限度地提高至少一个诚实节点会真正全面验证一个 Optimistic rollup 的概率,以便出错时他们会发布欺诈性证明。对于小规模的 rollup(几百个 TPS 以下)来说,这不是一个重要的问题,可以简单地借助利他主义,但对于更大规模的 rollup 来说,需要更严谨地推理这个问题。 Exploring the design space in between plasma and rollups - 是否存在一些方法可以将状态更新的相关数据放在链上,而不是所有的数据。 Maximizing security of pre-confirmations - 许多 rollup 为了更快的用户体验,提供了一个「预确认」的概念,即 sequencer 立即给予一个承诺,交易将被包含在下一个 batch 中,如果他们食言,sequencer 的押金将被销毁。但这种方案的经济安全性是有限的,因为可能同时向许多用户做出承诺,这种机制能否获得改进? Improving speed of response to absent sequencers - 如果一个 rollup 的 sequencer 突然下线,那么快速和经济地从这种情况中恢复过来将是非常有价值的:要么快速且经济地大规模退出到另一个 rollup,要么更换 sequencer。 Efficient ZK-VM - 生成通用 EVM 代码的 ZK-SNARK 证明(或者将现有的智能合约编译适配到其他 VM)可以被正确执行,并且有一个明确结果。 结论 Rollups 是一种强大的 Layer2 扩容范式,预计将成为 Ethereum 短期和中期(甚至长期)扩容的基石。我们已经看到了 Ethereum 社区对此感到大大的兴奋,因为这与之前的 Layer2 扩容方案不同,它们可以支持通用的 EVM 代码,允许现有的智能合约轻松迁移。 这是通过一个关键的妥协来实现的:放弃将数据和计算完全放在链下,而是将每笔交易的少量数据留在链上。 Rollups 方案有很多种,在设计空间上会有很多选择:可以采用欺诈性证明的 Optimistic rollup,或者采用有效性证明的 ZK rollup(又名 ZK-SNARKs)。Sequencer(可以将交易 batch 发布到链上的用户)可以是一个中心化的角色,也可以是一个去中心化的角色,或者是介于两者之间的其他选择。 总的来说,Rollup 仍然是一项早期阶段的技术,一切仍在迅速发展,特别是 Loopring,ZKSync 和 DeversiFi 已经运作了几个月。期待在未来的几年内,Rollup 领域会出现更多令人兴奋的工作成果。
  • 以太坊教程:Rollup Bridge 介绍(一):Maker Dai Bridge

    作者:Nic Lin,imToken 资深区块链工程师 本文受众:对 Rollup 有所了解的区块链爱好者 Maker 的 Optimism Dai Bridge 是一个 Optimistic Rollup 上的快速资产提领协议。 Photo by Wilbur Wong on Unsplash 在介绍 Maker Bridge 之前,你要先对 Rollup 有一些了解,本文不会对 Rollup 做太多介绍。 了解 Rollup Rollup 未来在以太坊的角色:http://imtokentool.com/ydf/291.html Vitalik:Rollup 不完全指南(精选):http://imtokentool.com/ydf/312.html 在 Optimistic Rollup(Rollup 的其中一种)设计中,都先假设交易是正确的,如果发现有错再透过欺诈性证明来挑战错误的交易,但也因为要让欺诈性证明有时间可以送达,所以会有一段称为挑战期的延迟时间。一笔交易要等到顺利通过挑战期后(期间没有被挑战),链上合约才会接受它是正确的。 但这个挑战期也因此成为影响 Optimistic Rollup 使用者体验的缺点,所以有人提出了快速资产提领协议来解决这个使用体验的痛点。 在进入正题之前,先对标题做一些解释。首先,要能达到「快速」资产提领,并不是因为这些 Rollup 真的支持快速提领资产,而是需要一个中介商、一个流动性提供者来先垫付资产。 其次,标题是 Rollup Bridge 的介绍,但 Rollup Bridge 可以用来指该 Rollup 本身提供的 L1 <-> L2 Bridge,也可以用来指其他建构在 L1 <-> L2 Bridge 之上的 Bridge。本文介绍的是后者:搭建在 Optimism L1 <-> L2 Bridge 之上的 Maker Dai Bridge,用来让使用者快速提领资产回 L1。 快速资产提领是我从 fast withdrawal 翻过来的,可能有其他更好的翻译 以下所称的 L2 皆指 Rollup 而非 Plasma 或 Sidechain 以下所指 Rollup 为 Optimistic Rollup,因为 Optimistic Rollup 才有挑战期的问题 以下所称「资产」和「代币」两个词指的是一样的东西 以下所称「七天」和「Rollup 挑战期」两个词指的是一样的东西 以下 「Rollup Bridge」 指的是 Rollup 本身提供的 L1 <-> L2 Bridge,「Maker Dai Bridge」 指的是搭建在 Rollup Bridge 之上的 Bridge Rollup Bridge Rollup 的安全性是锚定在它所在的 L1 上的(例如 Optimism 锚定在 Ethereum 上):你要针对 L2 的交易进行审查攻击,等同于对 L1 交易进行审查攻击;你要重组 L2 ,进行双花攻击,等同于你要重组攻击 L1。 Rollup Bridge 是 L1 和 L2 互动的管道,你要从 L1 送讯息到 L2 合约或是你要把 ETH 存到 L2,都是透过 Rollup Bridge 来帮忙把讯息传递过去;反之亦然,你要从 L2 送讯息到 L1 合约或是你要把 ETH 提回 L1,也是透过 Rollup Bridge。Rollup Bridge 的安全性和 L2 交易的安全性是一样的,不会因为它多跨到了 L1 所以更不安全。 所以 Rollup Bridge 代表的是什么意思?Rollup Bridge 提供了一个安全、去中心化的方式让 L1 和 L2 能够进行互动、让 L1、L2 的资产能够互相转移。 注:Rollup Bridge 不是自然而然就会出现的东西,它不会因为你今天做了一个 Rollup,就自动生出 Rollup Bridge 的功能,而是要搭配你的 Rollup 协议来打造你的 Rollup Bridge。 如果你透过跨链桥用 MPC 的方式来执行跨链交易,你需要相信参与 MPC 的节点。但在 Rollup Bridge 里没有这样的角色,透过 Rollup Bridge 送讯息就跟送 Rollup 交易一样,其安全性和抗审查性是受 Rollup 本身所保障,所以才会说 Rollup Bridge 是去中心化的方式. Fast withdrawal(快速提领资产回到 L1) 一开始有说到,「快速」并非真的是 Rollup 支持快速转移资产,而是有一个流动性提供者来先垫付这笔资产。 Rollup 的挑战期是为了确保交易的安全性,所以任何人要从 L2 提取资产回 L1 都不可避免地要等待挑战期。不过如果今天你相信一笔提现交易是正确可信的,并且你也相信重组攻击很难会发生,所以你愿意冒这个险的话,你就可以提议在 L1 先代垫这笔提现交易,并从中间抽点手续费。反之,如果对方希望一个小时后(而非七天后)就能在 L1 拿到钱,且愿意被抽点手续费的话,那就成交,两边都开心。 运作流程 对方先在 L2 透过一个 fast withdrawal 合约来申请 fast withdrawal,fast withdrawal 合约背后走的一样是正常的提取流程,要等七天。这时候你看到了这笔 fast withdrawal 交易,且确认这笔交易是可信、很难被重组攻击后,你就到 L1 的 fast withdrawal 合约申请垫付,垫付的对象会是该笔 L2 fast withdrawal 交易的 ID。 注:这时候 L1 的 fast withdrawal 合约还不知道有这笔 L2 fast withdrawal 交易的存在。 等到七天挑战期过了,这个 L2 fast withdrawal 交易会被传递到 L1 fast withdrawal 合约。如果你之前有先垫付这笔交易,合约里会有纪录,那合约就会直接把这笔交易所提领的资产转给你。如果没有人来垫付,那合约就会照正常流程,把提领的资产转给当初的提领者。 注: 你垫付的金额会是对方提领的金额扣掉给你的手续费。 如果没有 Rollup Bridge,就没办法安全可信地把 fast withdrawal 讯息 relay 到 L1 上,就不会有人敢先做垫付的动作,因此 Rollup Bridge 是 fast withdrawal 的必要条件之一。(当然 Rollup 团队是一定会做出 Rollup Bridge 的功能的,否则没有人会想要用这个 Rollup) Maker Dai Bridge Maker Dai Bridge 大致是就是上面描述的 fast withdrawal,只是里面的流动性提供者不是别人,而是 Maker 的财库。 如同你放入抵押品(例如 ETH),Dai 财库就会铸造出 Dai 给你。 Maker Dai Bridge 也是相似的概念,你放入提领 Dai 的凭证(这个凭证要等到挑战期过后才能提领 Dai),Dai 财库铸造出 Dai 给你。等到挑战期过了,你就可以偿还借款、拿出抵押的凭证并用凭证去领出 Dai。 这个铸币的功能将会让 Maker Dai Bridge 在 fast withdrawal 服务的竞争里占尽极大优势,因为它不像其他流动性提供者一样要承担资本利用率、资产曝险的风险,而且理论上它的流动性可以到无限大。再来,因为抵押和借出的资产都是 Dai,也不需要考虑被清算的可能。最后,除非 Rollup 被攻击破坏,否则这些借款都会保证如期还款。 缺点 但 Maker Dai Bridge 也不是没有缺点,这个缺点是:它的安全性要多仰赖一个对象 — 它的 Oracle(预言机)服务。 注:Maker 协议本身有一群中心化的 Oracle 负责将代币在现实世界中的价格送到链上。Maker 协议仰赖这些 Oracle 的报价来决定哪些贷款已经进入可清算的状态。 因为 Dai 财库自己没办法判断 L2 上的提领是否是有效的,所以需要一个第三方在链下模拟交易执行,确认提领的有效性。就像 Optimisitic Rollup 节点不需要等 Operator 上传最新的状态,自己模拟交易执行都能得到正确的状态。 所以 Maker Bridge 会直接沿用原本已经建立好、经过实战测试的 Oracle 服务来担任这个第三方。 运作流程 首先是使用者把 Dai 存到 L1 Maker Bridge,L2 Maker Bridge 会铸出 oDAI 给使用者去用。 当使用者要提领回到 L1 时,向 L2 Maker Bridge 申请提领、销毁 oDAI。等待一段时间,这笔 L2 提领交易被放进 L1 的 Rollup 合约的交易日志后,Oracle 就可以执行并判断这笔 L2 提领交易的有效性。如果有效,Oracle 会到 L1 Maker Bridge 上批准,L1 Maker Bridge 会铸造出 fDAI 给使用者,这个 fDAI 是一个领取凭证,等到 L2 提领交易的挑战期结束后,可以拿这个领取凭证去取出 Dai。使用者接着拿 fDAI 到 Dai 财库去抵押换出 Dai 来使用。 最后,当 L2 提领交易的挑战期结束后,使用者(或其他人)就可以偿还借款、取出 fDAI 并用 fDAI 去提领 Dai。 注:fDAI 会是以 NFT 的形式存在,因为每一笔提领的解锁时间都不同,所以会是 Non Fungible(非同质化)。 为什么还需要多一层 fDAI? 假设没有 fDAI,Oracle 批准后 L1 Maker Bridge 就直接解锁 Dai 给使用者。则当 Oracle 作恶时,会导致 L1 Maker Bridge 的 Dai 被解锁拿走,这时候 Maker Bridge 上的 L1 Dai 会比 L2 oDAI 还少,这会导致 L2 有部分的人的 oDAI 会提领不出来。所以 Maker Bridge 改成用 fDAI 抵押借款的方式,把风险转嫁到 Dai 财库,也就是 Maker 代币的持有者:当 Oracle 作恶时,结果会是 Dai 财库新增一笔坏账,但 Maker Bridge 上的 L1 Dai 和 L2 oDAI 还是维持 1:1 的映射。 注:这边会需要设计让使用者有偿还贷款、取回 fDAI 并拿 fDAI 去领回当初提领的 Dai 的动机,否则抵押 fDAI 能借出 100% 提领的 Dai 的金额,那使用者就没有动机去完成提领的动作,Maker protocol 就只能自己负担这个成本。fDAI 抵押只能借出 X%(X < 100) 或是使用者提领时能退回部分手续费都是可能的机制,细节要等到 Maker Bridge 测试完才能知道。 附注 目前 Maker 只支持 Optimistic Rollup(更准确地来说是只有 Optimism),因为当前的 ZK Rollup 大多数都还未支持 L1 <-> L2 的互动(如前述,这是必要功能)。而且 ZK Rollup 的挑战期比 Optimisitc Rollup 的挑战期要短得多,快速资产提领不会是 ZK Rollup 使用者急需的功能。 目前 Maker Optimism Dai Bridge 仍在测试中。 一样的设计可以用于其他 Optimistic Rollup,例如 Arbitrum。只需要针对 Arbitrum 的 Rollup Bridge 来做相对应的修改。 Thanks to Kimi Wu and Chang-Wu Chen.
  • Rollup未来在以太坊的角色是什么?

    以太坊2.02020-10-310评论240
    以太坊扩容在社区中的讨论如火如荼,多个解决方案正在加紧开发,并有望在今年全部上线主网。在整个以太坊 Layer2 方案爆发的前夕,imToken 联合 ETHPlanet、EthFans、ECN、上海前沿技术研讨会和 HiBlock 等多家优秀的以太坊生态社区与公司,共同策划一场以太坊扩容主题系列活动。4 月 23 日举办了第一场活动:Rollup - 以太坊 L2 扩容新范式杭州线下 Meetup。 以下是本次 imToken 首席科学家 Chang-Wu 的分享:「Rollup 未来在以太坊的角色」 的文字版,由 imToken 整理。 演讲整理 我先带大家了解一下什么是 Rollup,以及 Rollup 未来与 Eth2 路线图又是一个什么样的关系。 首先,我们都知道现在以太坊网络的一个 block(区块) ,它的计算单位是 gas limit(笔者注:每笔链上交易都会消耗 gas),每个区块的 gas limit 都有上限,目前这个上限值已经被调整为 1500 万,这 1500 万就代表每个区块可以包含的计算单元,也就是每个区块里所有交易累计消耗的 gas limit 不能超过 1500 万 gas。 举例来说,单纯的 ETH 转账,每笔的 gas limit 是 21000。如果一个区块中所有交易都是 ETH 转账,那么单个区块中最多可包含的交易笔数就是 1500w / 21000 = 714 笔。同时,目前以太坊出块平均时间是 12 秒,那么用 714 除以 12,我们就可以知道目前以太坊网络每秒可处理交易数的上限。 最近大家都看到了,现在的网络是非常拥挤的,尤其是在柏林升级前,区块 gas limit 只有 1200 万的时候。但即使是通过升级把 gas limit 提升到了 1500 万,我们仍然看到每个区块几乎都是满的,区块空间利用率接近饱和。 也就是说这时候你想要放入更多的交易其实是很困难的。同时我们也注意到,因为一些 DeFi 项目的兴起、需求等等,每当市场上有震荡的时候,手续费就会特别昂贵。过去一段时间,我相信大家也注意到在星火矿池维护的实时评估 gas 的网站上,有时甚至能看到 900、1000 Gwei 这样非常昂贵的手续费的产生。 所以在这一现状下我们认识到由于 DeFi 不停增长的需求,导致网络拥挤、每个区块都是饱和的状态、手续费昂贵。即便近期(在柏林升级中)提升了区块的 gas limit,但仍不足以满足链上的交易需求。 对此,我们越来越需要通过扩容来支撑以太坊网络整体的交易量。这就是我们今天想要和大家介绍的主题 - Rollup,中文叫做卷叠。通过引入 Rollup 技术方案,我们可以将以太坊网络的交易处理能力由当下 Eth1 上的 20 TPS(每秒可处理交易)提升至 4000 TPS(从理论上估计)。 那么 Rollup 是什么,以及它在 Eth2 路线图中又会扮演什么样的角色呢? 我们都知道 Eth2 想要通过分片的方法来提升整体的交易量。具体而言,分片是通过将交易发送到不同的 Eth2 分片去做执行,因为分片本身的设计允许不同的交易在不同分片上平行处理,以此从最底层的协议上进行优化,达到给网络整体扩容的目的。但是呢,我们也都知道,Eth2 的阶段 0 是去年 12 月份刚上的,上面谈到的分片实际运转起来可能要等到阶段 1.5 或阶段 2。如果没有过渡或者说妥协的方案出来,这中间将是漫长的等待期,而且期间网络将一如既往的拥堵。这也是为什么 Rollup 二层网络解决方案在近期越来越受到欢迎和普及。 那接下来,我们开始介绍 Rollup,我会通过说明 Rollup 的每一个步骤来向大家解释它是如何实现扩容的。 首先,下图中间黑线上面代表 Layer1,下方代表 Layer2。Layer1 的主网就是现在 Eth1 的主链,Rollup 项目方会在这条主链上部署一个智能合约。 用户在这个合约中可以 deposit(存入)资产,存入后,Rollup 运营商或服务商就会在二层网络上把这些资产映射出来。关于具体的映射方式,我们可以把它想像成是以数据库的方式,映射成一个存储的格式,而这个格式可以表示每一个账号现在有多少余额。 通过这种方式将用户在主网 Layer1 的存入资产与二层网络账户上的余额进行映射。然后,用户就可以在 Layer2 上进行转账、兑换等操作。那么,当用户们在 Layer2 发起大量交易时,由谁来对这些交易进行筛选、排序和打包呢? 在当前的 Rollup 二层网络方案中,这个角色一般由项目方来承担,我们称其为 sequencer(排序者)。sequencer 的角色,有点像是在打包这些交易,类似 Layer1 的矿工。但区别在于,sequencer 是先把交易整理好,然后才去做打包交易的动作。比如在二层网络中用户 A 给用户 B 转 10 个 token,用户 B 给用户 C 转 20 个 token,这些交易就会由 sequencer 来负责验证处理,并且打包整理成最后用户 A、B、C 的余额应该各有多少。 但仅做到以上这些仍是不够的,因为以太坊上一笔交易占据的空间非常大。例如仅收款方的地址,就占 20 个 bytes,ECDSA 签名占 64 bytes。对于以太坊区块有限的空间来说,这些数据所占用的空间较大,那么我们是否有办法压缩这些数据呢? 方法是有的。现在以太坊上一个地址是 20 bytes,在二层网络上,我们可以通过编码的方式进行压缩。具体来讲,Layer1 上的一个普通地址通过编码可以从 20 bytes 压缩到 3 bytes。同样的,上面提到的 ECDSA 签名数据和其他数据也可以进行压缩。sequencer 的职责就是压缩交易,并将压缩后的数据放在 Data(以太坊交易的一个字段)中同步到 Layer1 上。以上就是 Rollup 处理交易的过程说明。 到这一步,我们看到即使是在 Layer2 上,sequencer 最终同样需要把所有交易打包后的数据上链。这里有两个问题需要回答: 为什么要把数据放到链上? 原因在于只有当数据上链时,数据才具备可用性,其他人就可以通过这些数据来验证其中包含的交易是否真的成功。避免由于 sequencer 作恶(比如将一笔转账的收款地址替换为自己的地址)造成的资产损失。因此数据上链是必要的。 如何确保上链的数据是正确的(即如何保证数据的有效性)? 这就要求 sequencer 要对数据进行验证,一般是通过提交 Proof(证明)来确保上链数据正确。 在第二个问题上,目前的 Rollup 方案主要区别在于对数据和 Proof 的处理上。有的方案只把数据上链,但不对数据进行验证,也就是缺乏 Proof,比如 Optimism(笔者注:他们通过欺诈性证明来保障链上数据有效)。有的方案则是将数据和对数据的 Proof 同时上链来保证数据的有效性,比如 zkRollup 通过零知识证明对数据进行验证,并且把验证得到的 Proof 和数据一起上链,以此确保对应数据在链上的有效性和资金的安全性。所以 zkRollup 是目前被大家公认为比较安全的方案。 整体来看 Rollup 方案,Layer1 上的智能合约就像是城堡,其中的资金安全性依赖于 Layer1 自身的安全性。在 Layer1 上需要保存各账户的状态转换数据,同时要把 Layer2 上交易压缩后的数据同步到 Layer1 上,至于要不要做 Proof 则取决于具体的项目方的取舍。 Layer2 则负责执行交易,将本来在 Layer1 上处理的交易转移到 Layer2 上。当前对数据正确性的验证主要有两种典型的方案: Validity proof:即指类似于 zkRollup 的零知识证明方案。将数据和对数据的 Proof 同时上链。 Fraud proof:即指类似于 Optimism 的欺诈性证明方案。由于只将数据上链,所以 Optimism 需要用户或项目方自身去监测 sequencer 是否如实地把交易数据同步到了 Layer1 上。如果监测到欺诈行为,那么就可以通过提交欺诈性证明来保障资产安全。 最后,关于数据可用性,从形态上可以简单分为两个代表:zkRollup 和 Optimism。主要区别在于对哪些数据上链(on-chain) / 不上链(off-chain)方面的取舍。大部分方案都是把数据上链的,但是也有一些方案选择对一部分数据不上链处理,这么做的好处在于可以进一步提升扩容性能,而不用受区块自身可存放数据容量大小的限制;另一个原因是,有些应用顾虑到隐私性或其他一些特性,并不希望所有数据都上链,因而做了取舍,对这部分在这次分享中我们不去详细讨论。 在数据上链 / 不上链取舍上有一个典型的例子:zkPorter,也就是未来的 zkSync 2.0。他们宣称在 zkSync 2.0 中可以达到 24,000 TPS,这主要是通过默克尔树实现的,在不同分支中分别存放 zkRollup 与 zkPorter。对于在意安全性的用户来说,zkRollup 是一个更可靠的选择;但在对安全性要求相对较低的应用中,则可以考虑使用部分数据不上链的 zkPorter(效率更高,处理能力更好)。zkSync 2.0 通过这种混合的方式实现有保障性的安全和效率的提升。 那么为什么说 Rollup 和 Eth2 的路线图有关?其实前面有提到过,Eth2 分片上的交易执行暂时还无法立即到位,社区可能还要在等一段时间。但是在 Phase1 和 Phase 1.5 间,当分片的数据库成型时,其中的每个分片就好比是一个主网,这些分片的数据层就可以用来存储 Rollup 的数据。 当未来有分片的时候,虽然我们不能在其上立即进行交易,但是我们可以通过把 Rollup 的数据存到这些分片中提前发挥分片的作用,达到进一步扩容的目标。 这部分就是我今天的分享,谢谢大家。
  • 为什么我们需要zkPorter?zkPorter常见问题汇总!

    以太坊2.02020-10-310评论367
    背景介绍 关于以太坊社区扩大的讨论很热烈,许多解决方案都亟待开发,预计今年将全部连接到主网络上。 在以太坊2计划爆炸前夕,imToken与ETHPlanet、EthFans、ECN、上海前沿技术研讨会、HiBlock等多家优秀的以太坊生态社区和公司合作,开展了以太坊的扩展主题系列活动。 4月23日,举办了第一届活动: Rollup -以太坊L2扩展新范式杭州线下Meetup。 以下是这次zkSync的市场占有率。 ZK porter —— whyrollupsarenotenough的文本版由imToken Riely组织。 你好,我叫安格拉。 我是zkSync的产品经理。 很高兴今天有机会和大家分享我们最新的进展—— zkSync 2.0。 大家都希望Rollup在今年夏天早点普及。 随着Rollup的广泛使用,预计矿工费用将便宜100倍。 虽然我们目前看到很多小资金使用zkSync网络,但总体来说,我们认为目前的Rollup尚未得到广泛验证,因此不建议大资金流入。 但是再过几个月,我们的Rollup就会越来越安全。 当时,zkSync对大规模资金也同样安全可靠,支持NFT和zkEVM,可以将更多的APP部署到zkSync网络上。 同时,也可以看到以太坊过高,充斥着其他链条(BSC、Polkadot、Solana、Polygon等)的用户回到以太坊。 另外,Coinbase IPO也吸引了很多新用户,我相信他们也想试试! 2020年至2021年间,以太坊的用户数量增加了12倍。 但是矿工费呈指数级增长,上升了192倍 2018年,以太坊的可扩展性预计将不足,无法为10亿级用户提供服务。 为此,我开始了zkRollup运动。 但是,根据上图的趋势,目前的Rollup计划提供的可扩展性仍然难以满足可能快速增长的用户和需求,预计Rollup普及一段时间后,矿工的费用可能会变高。 因此,基于zkRollup,我们有了新的突破- ZK波特。 在谈论zkPorter之前,我先介绍一下zkSync 2.0是如何工作的。 zkSync 2.0有默克尔的根,该默克尔的根分为两部分。 第一部分是ZK滚动上方向,ZK滚动上方向帐户位于ZK滚动上方向的默克尔叶节点上。 第二部分是ZK端口,ZK端口的所有帐户都位于ZK端口默克尔的叶节点上。 ZK滚动上升 那么,Rollup的安全性如何? Rollup的安全性主要由两个重要因素决定。 第一个是数据的有效性,第二个是数据的可用性。 数据的有效性保证你的资产不会被别人使用; 数据的可用性保证了资产的归属权,也就是说证明了你对资产的所有权。 zkRollup将交易计算和存储转移到zkSync网络,通过将处理后的数据提交给以太坊主节点来扩大以太坊的性能。 具体而言,当前zkSync网络的验证者总结用户在双层网络上的交易,用zkSNARK算法压缩后,将得到的默克尔根进一步上传到网络上,从而保证了块内所有交易的有效性 关于数据的可用性,通过将处理后的数据放入以太网的呼叫数据中来保证。 那么为什么是呼叫数据而不是智能合约呢? 这是因为在同等安全性的前提下,放入呼叫数据比放入智能合约要便宜。 zkRollup将每次交易压缩的数据传输给以太网主机,因此保证了zkRollup数据的有效性和可用性,与以太网基本相同。 ZK波特 zkPorter和zkRollup的主要区别在于数据的可用性。 想想为什么Rollup不能达到我们希望的扩展性。 这是因为每次交易都会将压缩的数据放在以太网上,但是以太网的块大小是有上限的。 我该怎么办? 现在,您可以通过选择提供链中数据可用性的zkPorter来实现预期的可扩展性。 ZK端口帐户的数据可用性由zkSync令牌所有者保障。 使用zkSync 2.0,您可以享受zkRollup和ZK门户帐户的混合体体验(可以自由选择,完全互通)。 守护者(guardian )通过质押其zkSync令牌来参与权益证明,并通过在区块上签名来确认zkPorter账户的数据可用性。 当然,在没有免费午餐的情况下,zkPorter比以太坊的安全性要低一些,因为zkPorter向zkSync令牌所有者(即守护程序)保证了数据的可用性。 但是,需要强调的是,zkRollup的安全性不变,具备与以太坊相同的安全性。 请看下图的蓝点。 这个蓝点是zkRollup的数据可用性。 绿色圆点表示由zkSync令牌所有者组成的保证网络中的数据可用性。 对应上图中的蓝点,就数据有效性而言,zkPorter和zkRollup的有效性由zkSNARK保证,且账户状态的正确性与以太坊主拥有相同的安全保证。 这意味着没有人可以转移你账户上的资产。 那么,zkPorter具体提供了哪些数据可用性? 通常,在谈论区块链的安全性时,需要考虑最坏的情况。 最坏的情况下,让我们看看系统的安全性如何得到保证。 让我们先来看看zkSync的令牌所有者——卫士。 他们需要签名以验证每个zkSync块的数据可用性。 的zkSync所有者拒绝生产块,对zkSync网络也没有多大影响。 因为zkRollup和zkPorter还可以询问其他有关数据可用性的问题。 最坏的情况是,互联网遭遇了大量的攻击。 在这种情况下,攻击者可以签字确认最后一块。 也就是说,还是有效的。 但是,在这种情况下,攻击者将无法使用数据。 此时,普通用户无法证明自己拥有的资产,因此无法正常管理这些资产。 但同时,对攻击者来说,也不能证明他拥有这些资产,也不能花这些钱。 ZK端口和Optimistic Rollup哪个安全? 可能会有人问。 我认为zkPorter更安全。 为什么? 因为zkPorter的攻击者没有足够的动力破坏我们的系统。 如果有一千万个zkSync令牌,攻击者需要使用七百万个令牌进行攻击,而且他无法获取任何资产(因为处于只能冻结zkPorter的状态,所以也会冻结自己的押金)。 但是,在Optimistic Rollup中,攻击者可以通过复杂但可行的攻击方法从Optimistic Rollup中窃取资金。 因此,zkPorter认为比Optimistic Rollup更安全。 伊利亚姆大师vs ZK roll up vs ZK波特 其实更重要的是,你想接受什么程度的安全性。 如果你是大笔资金,更认可伊萨利姆大师的安全性,我建议你在伊萨利姆。 但是如果你想便宜点的话,我建议你用ZK波特。 正如我之前提到的,由于以太网的块大小和TPS限制,目前许多Rollup解决方案的最大TPS不超过2000。 但是,zkPorter的数据可用性不受以太网限制,可以达到2万以上的TPS,甚至更高。 如果以萨雷姆大师的矿工费是100,zkRollup的转账需要1(zkRollup的矿工费服从以萨雷姆,以萨雷姆的矿工费更高的话zkRollup也就更高了),ZK Porl up也就更高了) 为什么说zkSync 2.0是一个突破呢? 这是因为ZK门户网站和zkRollup可以互相汇款。 所以,我们选择了基于以太坊。 以太坊的互操作性和组合性是惊人的。 如果使用zkPorter账户在Uniswap上进行了一千次兑换,则只需确认最后一次交易汇总后的最终状态如何,即可将交易费用节约为$0.1。 这就是ZK波特的优势。 接下来,让我们从数据的有效性和可用性的角度来与Optimistic Rollup进行比较。 在zkSync 2.0中,L2的状态分为两部分。 也就是链上的ZK滚动和链下的ZK入口。 但是,Optimistic Rollup不能这样做。 因为,其有效性依赖于以太网上数据的可用性。 否则,就不能进行欺诈性的证明。 因此,Optimistic Rollup的TPS受以太网自身的限制。 但是,zkPorter可以突破这个限制。 ZK同步路线图 什么时候在zkSync上面做东西? 首先,我们将在5月支持NFT! 然后,zkEVM也将于5月上线网络测试。 我们会努力让zkEVM在8月连接到以太网的主网络。 谢谢大家! 在这里我想特别感谢Riely,她翻译了很多关于以太坊的专业术语。 同时,我们在中国社区看到了非常多的积极的成员,感谢你们的支持。 对此,亚历克斯和我都很感动。 那么,拜拜! zkSync创始人Alex的总结 我对zkRollup和ZK波特非常兴奋。 因为他们可以把大量的用户带回以太坊,给他们最大程度的安全。 我们非常关注协议的安全性。 不管你们是DeFi项目方,还是普通的以太坊用户,我们都希望你们有安全保障。 同时,zkPorter对所有用户开放,所以不用担心会遇到链条上的昂贵费用。 zkSync希望为大家提供一个不论贫富,人人都有平等参与经济体系的权利,流动性充足,功能丰富的体系。 这也是我们公司的价值观之一,多元包容。 我们相信那个。 风险提示:本文的内容不构成任何形式的投资意见或建议。 对于本文档中所述的第三方服务和产品,imToken钱包教程不提供任何担保、不接受或不承担任何责任。 数字资产投资有风险,请仔细评估这些投资风险,并咨询相关专家自行决定。
  • Layer2 如何扩容 zkSync方案攻略

    以太坊2.02020-10-310评论320
    为了更好地阅读本文,你需要先了解以太坊及其转账基本概念。 阅读这篇文章的「以太坊简介:http://imtokentool.com/ydf/144.html 」和「以太坊转账:http://imtokentool.com/ydf/151.html 」了解。 zkSync 简介 由于以太坊主网(即 Layer1)上交易严重拥堵,交易费用居高不下,开发者提出了 Layer2 以改善以太坊网络性能,提升交易处理速度。 zkSync 是欧洲团队 Matter Labs 推出的一款 Layer2 扩容方案,通过采用基于零知识证明的 Rollup(主流 Layer2 方案之一) 提升以太坊网络的可拓展性。 工作原理 zkSync 基于 ZK Rollup 打造。 ZK:零知识证明(Zero Knowledge)的缩写。 Rollup:Layer2 方案之一,也叫卷叠,通过将以太坊主网上交易的计算和存储转移至 Layer2 处理并压缩,再将压缩后的数据上传至以太坊主网以拓展以太坊性能。 ZK Rollup:采用零知识证明的 Rollup 方案,和其他 Rollup 的不同之处在于采用 zkSNARK 算法(一种零知识证明算法)压缩数据。 Rollup 的安全性由两个因素决定: 数据有效性:确保状态已被验证,避免验证人修改 Layer2 数据来窃取用户资产。 数据可用性:记录与维持 Layer2 的可用数据,确保用户拥有数据的自主权,并能利用 Layer2 数据自行离开回到 Layer1。 zkRollup(zkSync 将其所采用的 ZK Rollup 写作 zkRollup)通过将每笔交易压缩后的数据传到以太坊主网上,保证数据的有效性和可用性,使 zkSync 网络具备和以太坊主网同等的安全性。 关于 zkSync 原理,了解更多: 为什么我们需要 zkPorter:http://imtokentool.com/ydf/290.html Rollup 未来在以太坊的角色:http://imtokentool.com/ydf/291.html 特点 极低的交易费用 zkSync 的转账费用将始终比主网的矿工费便宜 20 倍以上(ERC-20 代币转账费用则便宜近 100 倍) 无需信任 通过加密技术保障资金拥有以太坊主网级别的安全性 用户资产自持 zkSync 钱包 以 imToken 为例,首先下载安装 imToken 并创建 / 导入钱包,下载链接:http://token.im/ 开启 打开 imToken 钱包,切换到「我」页面,点击「探索」,即可开启 zkSync 钱包。 使用 点击「充值」按钮进入充值页面,将以太坊主网地址中的资产充值至 zkSync 网络,到账后即可在 zkSync 网络中进行快速、低成本的转账。 详细教程:如何在 imToken 使用 zkSync 钱包?:http://imtokentool.com/xszl/7.html 其他支持 zkSync 的钱包 Argent:http://www.argent.xyz/ MYKEY:http://mykey.org/en Loopring:http://loopring.org/#/ 常见问题 zkSync 钱包常见问题:http://imtokentool.com/cjwt/56.html 学习 Layer2 为了解决以太坊的可拓展性问题,开发者提出了两个方向的解决方案,Layer2 和分片(Eth2 的一个重要升级)。Layer2 字面意思是二层网络,相对的,当前的以太坊主网也称为一层网络(Layer1),二层网络也就是基于当前以太坊主网的一个系统。 Layer2 方案主要是从减轻 Layer1 负担的角度出发,将 Layer1 的大量计算需求搬到 Layer2 上。 主流 Layer2 方案有 ZK Rollup、Optimistic Rollup、Plasma、State Channels(状态通道)、Validium 等。 ZK Rollup ZK 是 Zero Knowledge(零知识)的缩写,零知识证明是指证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。 Rollup 中文叫做卷叠,是一种以太坊扩容方案的统称。Rollup 通过将链上计算转移至链下(二层网络),但同时将每笔交易的部分数据保留在链上达到提升以太坊网络性能的目的。 ZK Rollup = 交易压缩 + 零知识证明(zk-SNARK) ZK Rollup 核心思想是在链下达成交易共识,并通过零知识证明算法压缩交易数据,保证链下交易状态的有效性,最后将数据同步至以太坊主网。 开发团队 Matter Labs zkSync 的开发团队 Mattet Labs 是一个对自由、区块链和数学充满热情的工程团队,总部位于柏林,员工遍及全球(主要是在欧洲)。 Matter Labs 通过零知识证明技术对以太坊进行扩展,其使命是加速这场正在进行的金融革命。 zkSync 浏览器 zkSync 区块浏览器是一个查询 zkSync 区块、交易、状态根哈希、账户地址等信息的网站。 zkScan|zkSync 的区块浏览器和数据分析平台:http://zkscan.io/ zkSync 路线图 该项目目前的产品路线图规划为:可扩展支付、智能合约、隐私和抗审查。 可扩展支付:zkSync 当前正处于此阶段,致力于打造一个安全可拓展的加密资产支付方案。 隐私:目前,zkSync 中的交易信息就像以太坊主网一样,是公开透明的,未来 zkSync 将引入隐私功能。 抗审查:扩展性解决方案的一个常见问题是大多数用户无法参与验证,网络会趋向中心化。zkSync 打算通过引入一个独立的共识机制来实现去中心化和抗审查,该机制包含验证者和守护者这两个不同的角色。 此外,zkSync 计划在未来推出原生代币用于治理。 已加入 zkSync 生态的团队 Curve Aave Loopring Balancer 1inch Coinbase Huobi Binance Moonpay Argent imToken MYKEY CoinGecko Gitcoin 更多资料 zkSync 官网:http://zksync.io/ Matter Labs 官网:http://matter-labs.io/
  • 以太坊知识:EIP-1559是什么?

    以太坊2.02020-10-300评论300
    关于 EIP-1559 EIP-1559 将调整当前以太坊主网(Eth1)的矿工费机制。该提案将引入 baseFee(基础费用),baseFee 会根据以太坊区块空间的使用情况自动调整链上操作所需的 Gas Price,从而帮助钱包服务商和用户便捷估算操作的费用。 此外,EIP-1559 增加了一个新的交易类型,该类型允许用户自主设定对当前操作愿意支付的最高费用(maxFee)和支付给矿工的最高费用(maxPriorityFee),并可将最高费用与 baseFee 和矿工费用的差值退还用户。 而且,EIP-1559 将销毁 baseFee(基础费用),一定程度上减缓 ETH 的通胀速度,因此,社区中不少人认为这是对以太坊经济的一项重要改进。 imToken 如何支持 EIP-1559 imToken 支持伦敦升级,对本次升级用户无需进行额外操作。 升级完成后,imToken 用户仍可以正常使用当前版本 imToken 的以太坊钱包功能并发送交易。交易中的矿工费设置以 GasPrice 表示,GasPrice 的预估将基于 EIP-1559 规则。 关于自定义设置 EIP-1559 费用机制中的 maxPriorityFee(支付给矿工的小费)和 maxFee(最高费用),该功能预计将在后续版本 imToken v2.9.6 中尽快提供。 关于交易费用的变化,对此我们暂时无法预计,需要在 EIP-1559 启动后继续观察。 EIP-1559 设计目标 更好的用户体验 当前的以太坊和比特币都采用第一价格竞拍机制,这种费用机制简单但缺乏效率,其中最大的问题在于费用估计。EIP-1559 试图通过让所有的交易尽可能支付相同的费用来解决该问题。多数情况下,用户只需要决定是否发起交易,而无需考虑费用该如何设置。 可变区块容量 区块空间利用率往往是变化的,有些区块空间闲置,而有些区块塞满交易。可变区块容量将允许区块大小随实际需求变动。 更好的安全性 当区块奖励消失,仅靠交易费用不足以激励矿工维护网络安全。EIP-1559 通过销毁交易费用,即可在不增加总供应量的前提下,延长通过区块奖励激励矿工的时间,从而保障网络的安全性。 防止经济抽象 简单来说,即只允许使用 ETH 支付交易费用。如果用户可用任何代币支付交易费用,则可能会威胁到 ETH 的储备地位。EIP-1559 通过强制把 ETH 作为费用代币来缓解这一问题。 EIP-1559 如何工作 升级前的矿工费机制 矿工费 = GasPrice GasUsed GasUsed(gas):交易消耗的总 gas 数量。 GasPrice(gwei):即对单位 gas 的定价,1 gwei= 10^(-9) eth。 采用竞价机制,GasPrice 设置越高,交易处理速度越快。 交易由矿工处理,矿工费完全由矿工收取。 升级后的费用机制 交易费用 = (baseFee + PriorityFee) GasUsed 对比升级前后的公式,可以看出 EIP-1559 是将 GasPrice 拆分成了两个费率的组合:baseFee 和 PriorityFee。 baseFee(基础费用) baseFee 会根据上一区块的空间利用率自动调整,如果利用率超过 50%,则提升当前区块的 baseFee;反之降低。 按照 baseFee 计算公式,相邻区块间的 baseFee 变化幅度在 ±12.5% 之间: 如果上一区块空间利用率为 100%,则当前区块 baseFee 将自动提升 12.5% 如果上一区块空间利用率为 0%,则当前区块 baseFee 将自动降低 12.5% 不同于原来的矿工费机制,EIP-1559 升级后,交易费用不完全由矿工收取,其中 baseFee 将被完全销毁。 PriorityFee(小费) PriorityFee 表示给矿工的小费,延续了竞价设计。如果希望自己的交易在区块中被尽快打包,可通过设置 PriorityFee 激励矿工,矿工将优先处理 PriorityFee 高的交易。 同时,用户还可以自行设置 PriorityFee 的最高值,即付给矿工小费的上限,也叫 maxPriorityFee。 maxFee(最高费用) maxFee 表示用户愿意对某笔交易可支付的最高交易费用。对应到公式中,maxFee = baseFee + maxPriorityFee,其中 maxFee 和 maxPriorityFee 都支持用户自行设置,baseFee 则由算法自动给出。 注:升级后「矿工费」的说法已经不合适了,因为费用中的 baseFee 是要销毁的,只有 PriorityFee 由矿工收取。或许 EIP-1559 升级后,我们应该在以太坊生态中弃用「矿工费」的说法了。 EIP-1559 交易费用计算实例 升级前 矿工费 = GasPrice GasUsed 升级后 交易费用 = (baseFee + PriorityFee) GasUsed maxFee >= baseFee + maxPriorityFee 可能出现的各种费用情况,单位 gwei 如何看待 EIP-1559 EIP-1559 历经了两年的讨论,至今仍然备受争议,对于 EIP-1559 的利弊,社区中有很多严肃深入的思考和讨论,感兴趣的同学可以查看: EIP-1559 提案:EIP-1559: Fee market change for ETH 1.0 chain: http://eips.ethereum.org/EIPS/eip-1559 中文资料汇总:链闻精选 | 读懂以太坊 EIP-1559 提案,它为何备受争议?:http://www.chainnews.com/articles/118999530771.htm 英文资料汇总:EIP-1559 Resources ?:http://hackmd.io/@timbeiko/1559-resources EIP-1559 相关工具 http://ethburned.info/ 这个页面统计了 EIP-1559 启动后销毁的 ETH 数量。 http://www.gasnow.org/ 基于 EIP-1559 规则,GasNow 提供了对 baseFee、maxFee 及 maxPriorityFee 的设置建议。 参考资料 Deribit Insights | Analysis of EIP-1559: http://insights.deribit.com/market-research/analysis-of-eip-1559/ Chang-Wu:EIP-1559
  • 以太坊转账教程:一张gif 动图让你看懂

    以太坊2.02020-10-300评论326
    Vitalik 曾说以太坊就像是一座城市,不同的应用是城市里的建筑。而不同的区块则是城市里的公交车。矿工打包区块,就是让不同的交易上不同班次的车。 DeFi 是城市里最热闹的街区。这里有最大的去中心化交易所 Uniswap,有借贷协议 MakerDAO,还有预言机 Chainlink 等等。最重要的是,这里有熙熙攘攘的人群。 而在繁华的街道上,忍耐拥堵的交通就成为了我们的必修课。如果你想享受到高速的服务,那就需要支付更高的生活成本,在以太坊这座城市里,意味着更高的矿工费。 今天我们就带大家来看看,以太坊网络的一笔交易是如何完成的。 熟悉以太坊的朋友们,可能对 TxStreet 不会陌生。它是一个既实用又有趣的可视化区块浏览器。在这里,区块被形象化为公交车,一笔笔不同的交易,则是不同的卡通小人物来表示。 当我们通过 imToken 发起一笔 Uniswap 交易,就会有一个卡通小人从 Uniswap 的建筑中走出,进到排队的队伍中,等待上车。如果你有急事需要插队,可以通过支付更高的矿工费排到队伍前面,更快上车。以太坊网络每隔 15 秒发一次车,这样一个区块就通过了红绿灯,打包发送出去了。 在排队的人较少时,卡通小人耐心排队,等待几分钟就可以上车了。但在以太坊这座城市,持续涌入的人口不断考验原有的基础交通设施。 等待区块班车的交易 在这张 gif 动图中,你会看到有些卡通小人进入区块公交的同时,还有其他的卡通小人出来,这是为什么呢?这就要提到以太坊的区块大小和转账机制了。 与比特币网络不同,以太坊没有明确地按内存限制每个区块的大小,而是通过区块 GasLimit 强制规定每个区块的大小和一个区块中可以打包的交易量。当前以太坊的区块 GasLimit 是 1200 万 Gas 左右,每一笔交易需要的 Gas 在几万到几十万之间,平均每个区块大概可以打包 200 笔左右的交易。 以太坊矿工的矿工费主要由两部分组成,一部分是挖矿产生的固定区块奖励,另一部分是区块里包含的矿工费。矿工在打包交易的时候,为了收到更多的矿工费,会优先打包支付更高矿工费的交易。而矿工费给的更少的交易,只能继续排队,搭乘后面的公交车了。当你处于继续等待的时候,链上的状态就是「pending」,即「确认中」。 如果你想赶上第一班公交车,在使用 imToken 发起交易时,选择默认的矿工费即可,交易将会被尽快打包。 讲到这里,你是不是已经清楚以太坊转账的机制了呢?如果还有任何关于以太坊转账的疑问,欢迎在下方评论区提问!
  • 以太坊代币入门指南

    以太坊2.02020-10-240评论433
    什么是以太坊代币? 在学习以太坊代币(Ethereum tokens)之前,有必要先了解以太坊的基本原理。对于刚接触这些概念的人,可以先看我之前写的《以太坊入门指南》。以太坊代币是内置在以太坊区块链上的数字资产。它们受益于以太坊现有的基础设施,而不需要开发者重新构建全新区块链。它们还通过以太币(以太坊的本地货币,被用来驱动智能合约)来加强以太坊生态系统。这份入门指南可以帮助那些数字资产新人从更高的层面了解以太坊代币,以及它们和以太币的区别。 (数据采集于2017年5月22日) 对比 以太坊可以创建任何智能合约,包括可以表示数字资产的智能合约,而这些数字资产被称为以太坊代币。这类似 App Store 是提供 iOS apps 的平台一样,其中部分 apps 会在它们的游戏或平台中发行数字货币。然而,和 Apple 不同的是,以太坊没有中心实体来控制哪些 apps 可以上 App Store,每个人都可以在以太坊上发行代币。 以太坊代币可以用本地货币来表示任何实物,例如黄金(Digix)、用作支付交易费用的本地货币(Golem)。未来,代币甚至可以用来代表股票和债券等金融工具。每个代币的属性和功能完全遵守其预期用途的约束。代币可以有固定的供应量、恒定的通货膨胀率、甚至由复杂的货币政策来决定的供应量。代币可以用作多样化目的,例如支付访问网络,或用作去中心化组织的管理。 代币通常通过初始货币众筹(Initial Coin Offering,ICO)的销售方式进入公众视野。这些代币创建者会通过提供内置代币,来交换以太币、比特币或其他数字资产。近期有非常多的 ICO,在短短时间内改变了项目资金筹集的方式。尽管创建者希望去中心化应用程序中的代币尽可能被更多人拥有,但如何良好分配这些代币并没有限制。 图表来自于 thecontrol.co 现在有很多资料会教你创建新代币的过程,而且它们从技术层面解释了代币的工作原理。例如,代币工厂提供了一个简单的用户界面,允许你使用自定义参数来创建自己的以太坊代币。 类似比特币和以太,这些代币被记录在区块链上,也就是说所有已经发生的交易都被登记在了一个公开分类账本中。这是因为以太坊上的代币只是基于以太坊区块链一种特定的智能合约。 Aragon’s token tracked on Etherscan.io 现在市场上最大的以太坊代币是 Augur’s REP 和 Golem’s GNT。目前两个项目都在开发阶段,总市值 4.5 亿美元。我将简短阐述它们的工作原理,以便大家更好理解以太坊代币中的不同功能。 Augur Augur是由 Joey Krug 和 Jack Peterson 共同创建的去中心化预测市场。该预测市场允许用户下注不同事件的结果,也可以用来对冲。例如,如果你有一枚价值 2000 美元的比特币,而且想对冲持有,你可以打赌比特币的价格在某一天会低于 2000 美元。如果比特币上涨,那么你持有的比特币会更加值钱,如果比特币价格下跌,那么通过该预测市场你将缩小你的损失。这些事件结果的报告并没有中心化来源,所以会降低有一个腐败记者的风险,但也增加了对分散报告的需求。 Augur 发布的以太坊代币称为 Reputation (REP),REP的恒定供应量为 1100 万枚,其中 80%众筹到了 530 万美元,这些代币用于预测市场事件结果的报告。所有活跃的 REP 持有者必须报告随机选择事件的结果,这维护了用来解决 Augur 预测市场结果的去中心化报告池。作为提供这一关键报告功能的奖励,REP持有人可获得平台上预测市场产生的所有交易费用的一半。如果有人试图撒谎或报告错误结果,那么作为惩罚,他们必须放弃所持的一部分 REP。此外,如果大部分 REP 持有者是不诚实的,那么人们将再也不想用 Augur,REP 的价格也会随之下跌。这鼓励人们在 Augur 系统中诚实行事。 Golem Golem是一个由 Julian Zawistowski 领导的项目,它允许人们出租他们电脑的闲置算力。这个想法是通过创建一个全球超级计算机,使得计算能力更加便宜,有更多用户可以使用。 Golem 发行的以太坊代币叫 Golem Network Token (GNT),其恒定供应量为 10 亿枚代币,其中82% 通过众筹获得了 860 万美元。这些代币必须与 Golem 网络配合使用,用来支付算力的租用。由于访问此网络的代币有限,如果有更多的人想使用 Golem,那么 GNT 的价格就会上升。这理论上使GNT的持有者和使用者动机一致。 ERC20 代币 你也许听以太坊社区成员提起过 ERC20 代币。最初的 ERC20页面 “描述了实现代币合约的标准功能”,ERC20 是各个代币的标准接口。ERC20 代币仅仅是以太坊代币的子集。为了充分兼容 ERC20,开发者需要将一组特定的函数集成到他们的智能合约中,以便在高层面能够执行以下操作: 获得代币总供应量 获得账户余额 转让代币 批准花费代币 ERC20 让以太坊区块链上的其他智能合约和去中心化应用之间无缝交互。一些具有部分但非所有ERC20标准功能的代币被认为是部分 ERC20兼容,这还要视其具体缺失的功能而定,但总体是它们仍然很容易与外部交互。 资源 目前已经有很多现有和即将到来的以太坊代币。下面是一些能帮助你更好地理解以太坊代币的链接,同时有最及时和让人兴奋的新闻。 理解以太坊代币 应用虚拟币和协议代币的区别(http://medium.com/0x-project/the-difference-between-app-coins-and-protocol-tokens-7281a428348c) 如何使用代币在区块链上筹款(http://blog.gdax.com/how-to-raise-money-on-a-blockchain-with-a-token-510562c9cdfa) 区块链代币证券法律框架介绍(http://blog.coinbase.com/2015-12-07-blockchain-token-securities-law-a66ef03c383f) 代币、代币、更多的代币(http://thecontrol.co/tokens-tokens-and-more-tokens-d4b177fbb443) 代币经济(http://thecontrol.co/the-token-economy-81becd26b9de) 完美的代币销售结构(http://blog.gdax.com/the-perfect-token-sale-structure-63c169789491) 以太坊代币最新消息 ICO Alert(http://www.icoalert.com/) Smith + Crown(http://www.smithandcrown.com/) Ethereum Subreddit(http://www.reddit.com/r/ethereum/) The Control(http://thecontrol.co/) Week in Ethereum News(http://www.weekinethereum.com/) The Dapp Daily(http://dappdaily.com/)
  • 理解ERC-20 token合约

    以太坊2.02020-10-240评论438
    这周(译者注:原文发表于9月15日)的早些时候,ERC-20 token接口正式成为了改进协议,明确了其定义。这篇文章会简单介绍各种符合ERC-20标准的token,解释ERC-20的特征和功能,以供读者了解什么是token合约,以及开发者应该如何使用该标准。 ERC-20最初作为一种尝试,旨在为以太坊(Ethereum)上的token合约提供一个特征与接口的共同标准,并且,它现在已经被证明是非常成功的了。ERC-20有很多好处,包括允许钱包显示数以百计不同token的账户余额;创建一个交易工具,只需提供token合约的地址就可以将更多token列入表中。创建ERC-20兼容token的好处很多,以至于在今天,很少有其他token合约用其他方式创建。 Token合约是什么? 现在仍存在着大量关于“token合约到底是什么”的争论。本质上来说,一个token合约就是一个包含了一个对账户地址及其余额的映射的智能合约(Smart Contract)。账户余额表示一种由合约创建者定义的值:一个token合约也许使用余额来表示物理对象,或是表示另一种货币价值,还可以表示持有人的名誉。余额的单位通常被称为token。 当token从一个账户被转移到另一个账户的时候,token合约更新两个账户的余额。比如,一笔从 0x2299…3ab7 到 0x1f59…3492 的10个token的转账将导致余额列表如下图所示进行更新: 如果该token合约允许的话,变更一种token的总供给可能有两种办法。token的总供给可以通过铸造新token来增加。举个例子,铸造出100个token到地址 0x4ba5…ae22 将导致余额如下图所示进行更新: 销毁token的另一种方式是将token发送到一个未创建私钥的地址,通常来说就是0地址。这会使得这些token不可用,在这方面,它与销毁token有同样的效果,但并没有减少token的总数。比如, 0x93f1…1b09 用此种方式销毁了50个token将导致如下图所示的余额: 简单的token合约在一个从地址到余额的映射中保存上述信息。当更多复杂的情景出现时,比如发放股息,替代性结构或者增补性结构常常要变得更强悍。但是,不管那些操作上的细节的话,对外部可见的token余额总是像上面的图示那样的。 一个ERC-20 token合约的定义 一个ERC-20 合约是通过合约的地址以及它可用的token总供给来定义的,但它通常还提供一些非必须的东西,也是为用户提供更多细节。它们包括该token的名字、标志、小数位。这些中的每一个都会包括在下面的细节中。 在深入到细节之前,理解这件事情是重要的:token合约没有一个中心化的登记处,因此无法保证特定名字和符号的唯一性。一旦你已经创建了一个token合约,你应该请求将它加入公共站点,比如:Etherscan,MyEtherWallet 以及 CoinMarketCap。当然,确保符合网站上的说明可以最大化你的申请被接受的机会。 Token合约的名字乃是该token合约应该被知道的完整名称,比如“My Token”。名字的长度没有限制,但完整名称在一些钱包应用中更容易显示不完全,所以,最好让名字短一点。 Token合约的标志乃是该token合约应该被知道的符号,比如“MYT”。广义上,它是股票代码的对应物,而且,虽然没有严格的长度限制,但它在长度上常常是3或4个字母。 小数位常常是混淆的来源,但经过合理的解释这是非常容易理解的。小数位意味着一个token的可切分性,从0个小数位(即完全不可切分)到18位小数(几乎是连续的),如果需要,可以有更多的小数位。从技术上来说,小数位的意义在于显示token价值在屏幕上的时候小数点后面跟着的位数。小数位存在的理由是以太坊并不处理有小数的数字,只显示整数的数字价值。考虑下面两个例子: 第一个例子是LicenseToken,一个为给定软件产品显示软件许可分配的token合约;持有一个LicenseToken,使用者就可以使用该软件。而持有小于1个的LicenseToken则没有任何意义,所以token创建者将小数位设为0。一些LicenseToken的持有人账户余额如下。 可以看到,在这里有100份许可,主要被一个账户所持有。当用户购买一份许可的时候,一个token将从持有账户转账到购买者账户。而许可验证者可以查看一个特定的账户是否真的持有一个LicenseToken,然后做出相应的行动。 第二个例子是GoldToken,一个表示物理黄金所有权的token合约。合约创建者希望每单位表示1千克黄金的单位,但同样希望允许用户以克的级别(但不能更低)持有和交易黄金。因为以太坊并不支持小数因此1个token必须表示1克黄金,以及,为了向外界表示1000克作为单一的1Kg单位,小数位要设置成3(因为 10^3 克也就是1千克黄金才是token合约创建者希望显示为1token的单位)。一些GoldToken的持有者可以用图像表示在下方。 在这里你可以看到总共有50Kg的黄金被表示出来(每token 1克乘以50,000个token)。 但是,如果小数位被设成3,用户的情形就会像下面这样: 可以看到,将小数位设置成3在字面上就意味着在显示GoldToken余额的时候,应该有3位数跟在小数点后面。 小数位经常被称为是一个人性化的元素,因为它允许token合约定义他们希望余额怎样显示给用户。GoldToken并不在内部处理小数位,也从不将小数位用在它自己的计算中因为一切都是用克来计算的,但它允许用户使用黄金的共通单位(千克)而不是在合约中使用的单位(克)。 正如在上述GoldToken中显示的,可切分性的观念允许token合约显示非常小的小数值,并且token也常常把小数位设成18,以给予token一个近乎连续的价值范围。 总结一下,在决定要取几个小数位时,下述规则是应该被遵循的: token合约表示的是一个不可切分的物体吗?(如果是)那么将小数位设为0 token合约表示的是一个有特定小数位的物体吗?那么将小数位设置到那个数字 如果上述两者都不是,请设置小数位为18 重要的是要知道小数位对合约创建的影响。被创建的Token数量应该等于token的全部数量,要求是10^小数位的倍数。正如在GoldToken例子中可以看到的,token创建者希望创建token来表示50千克的黄金,但因为3位小数,他们必须发行50,000 token(50×10^3)来做成这件事。 总供给是定义一个ERC-20 token合约的最后一个东西,并且,正如我们提到过的,它是唯一的强制参数。虽然在ERC-20说明书中并没有明确提到,但总供给的概念是简单的:总供给等于所有余额的和。上面的例子中一直显示着总供给,所以这里就无需赘述了。 一个ERC-20 token合约的功能 ERC-20 token合约拥有一系列的功能,允许用户发现用户的余额,也允许余额经过验证从一个账户转账到另一个账户。下面来描述一下这些功能。 balance()函数提供了被一个给定地址持有的token的数量。记住,任何人都可以查到任何地址的余额,正如所有数据在区块链上都是公开的。 从一个地址发送token到另一个地址有两种办法。tranfer()函数可以从信息发送者那里直接转一些token到林一个地址。记住,人们不会查验接收地址,因此确保接收者按预期的方式行动是发送者的责任。 虽然用transfer()来发送toke给另一个用户是很棒的,但当token要被用来为一个智能合约中的函数进行支付的时候,它就起不了作用了。这是因为,当智能合约运行的时候,它没办法获得哪个地址转账到哪里的细节,因此也就无法保证调用这个合约的用户已经支付了启动合约要求数量的资金。 想象一下,有一个合约Doer被部署在网络上。Doer拥有一个函数dosomething(),它要求10 Do token来运行。Joe希望调用dosomething(),也有50Do token在他的账户上。Joe怎样能够支付给Doer以致后者可以成功运行dosomething()呢? approve()和transferFrom()是两个方程,它们使用一个两步过程,可以解决上面的问题。第一步,一个token持有者给另一个地址(常常是一个智能合约)批准从本地转出一个最大特定数量的token,也就是所谓的配额(allowence)。Token持有者使用approve()来提供这些信息。 在上述例子中,第二行显示,地址为 0x1f59…3492 的Joe已经允许地址为 0xd8f0…c028 的Doer从Joe的账户中转出25个token。 一旦一个许可被创建,智能合约就可以从一个用户的配额中占用许可数量的token,作为该合约运行的一部分。继续这个例子。Joe现在可以调用dosomething(),而dosomething()可以使用transferFrom()以从Joe的账户中获得10个Do token, 然后开始它的工作。如果Joe的账户上没有10个token,或者配额低于10个token,dosomething()就会当机。 allowance()函数提供了允许从一个给定地址提取到另一个给定地址的token的数量。记住,任何人都可以查到任何地址的余额,正如所有信息在区块链上都是公开的。重要的是知道,配额是“软性”的,因为所有单独的或者累积的配额可以超过一个地址的余额。在上面展示的表格中,持有者 0x2299…3ab7 许可了最高500个token的转出,但他的余额,如上所示,只有90个token。任何使用allowance()的合约,在计算可用的token数量的时候,都必须额外考虑用户的余额。 一个ERC-20 token合约中的事件 ERC-20定义了在合约采取了相关行动的时候,两类事件是必须被触发的。第一类事件是Transfer(),就是放出从一个地址转移到另一个地址的token转移的细节。第二类事件是Approval(),就是放出从一个地址许可转移token到另一个地址的细节。这些可以被用来跟踪地址余额和配额的变更,而无需查询区块链。 铸造token会发出了一个带有o地址的Transfer()事件作为源。 当token被销毁的时候,没有事件会发出。因为这一点,ERC-20 token 合约常常通过transfer()发送token到0地址来销毁token,代替真正的销毁。 超越ERC-20 ERC-20提供了一个良好的基础来构建token合约,但也并不是没有问题。ERC-223协议提供了额外的特性和安全措施,但与ERC-20并不兼容。Token合约的建构在今天还要继续遵循ERC-20,而开发者应该跟踪 ERC-223协议,并为它做出贡献。
  • 以太坊交易的生命周期

    以太坊2.02020-10-240评论392
    了解以太坊交易是如何生成并在网络中广播的 交易是以太坊区块链(或任何类似的区块链)的核心。在与以太坊区块链进行交互之时,你是在执行交易并更新其状态。你有没有想过要了解当你在以太坊执行交易之时到底发生了什么?让我们通过一则交易例子来解答这一问题。本文包括如下内容。 以太坊交易的端到端遍历,即从你的浏览器/控制台出发进入以太坊网络,然后再回到你的浏览器/控制 了解当你使用 Metamask 或 Myetherwallet 等插件,而非运行自己的节点之时,交易是如何进行的 如果你比较偏执多疑,不信任任何插件,想自己执行交易,该怎么做? 本文读者需要对以太坊及其组成部分,如账户、gas 和合约等具备基础性了解。关于这些概念的详细解释可以参见这篇文章(编者注:中译本见文末《以太坊中的账户、交易、Gas和区块Gas Limit》超链接)。如果你是一个不熟悉以太坊的开发者,这篇文章或许对你很有帮助。你也可以从这篇文章中学习如何构建简单的分布式应用。如果你已经有过执行交易的亲身经历,本文对你的意义会更大。例如,可以是将一些以太币发送给另一个人或合约的交易。再比如,还可以是在与分布式应用进行交互的情况下,如果你在这个网站上买了一些代币,这就是一笔交易。如果你为一位候选人投票,这也是一笔交易。 一. 以太坊交易的端到端综述 让我们以下列合约调用为例,并遍历该函数调用/交易是如何执行及永久存储在区块链上的整体流程。点击此处可了解整个合约。从较高层次来说,这是一个投票合约,其中你可以预置一些候选人在选举中进行角逐,任何人都能为他们投票。这些投票将会记录在区块链上。 Voting.deployed().then(function(instance) { instance.voteForCandidate('Nick', {gas: 140000, from: web3.eth.accounts[0]}).then(function(r) { console.log("Voted successfully!") }) }) 2 假设你在自己的计算机上本地运行了一个以太坊客户端(Geth 或 Parity),你的计算机连接到了某个以太坊网络(测试网络或是主网),你有权访问该合约地址和 ABI,从而执行该交易。 如果你构建过分布式应用,应该对上述代码并不陌生。这是一个名为“Voting(投票)”的合约,已经部署在了区块链上。我们以该合约为例,执行一个叫作 voteForCandidate 的函数,输入候选人的姓名、该交易的gas上限和执行该交易的账户。从名称中可以看出,该函数能够用来为候选人投票,选票记录在区块链上。在下文,我们将尝试解构该调用,了解你在执行该 javascript 函数时会发生的一切。 构建原始交易对象 如下图所示,voteForCandidate 函数调用首先被转化成了原始交易(rawTxn)。Web3js库被用来构建原始交易对象。 txnCount = web3.eth.getTransactionCount(web3.eth.accounts[0]) var rawTxn = { nonce: web3.toHex(txnCount), gasPrice: web3.toHex(100000000000), gasLimit: web3.toHex(140000), to: '0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b', value: web3.toHex(0), data: '0xc7ed014952616d6100000000000000000000000000000000000000000000000000000000' }; 让我们试着了解下该原始交易对象中的所有字段,以及它们是如何设置的。 nonce(随机数):每个以太坊账户都有一个叫做 nonce 的字段,来记录该账户已执行的交易总数。Nonce 的值随着每个新交易的执行不断增加,这能让网络了解执行交易需要遵循的顺序。Nonce 也被用来进行重放保护。 gasPrice(gas价格):即你愿为该交易支付的每单位 gas 的价格。如果你正在主网上执行交易,ETH Gas Station上正好有一个网站,你可以参照其建议为你的交易设定 gas 价格,以便交易在一定时间内成功执行。Gas 价格目前以 GWei 为单位,其范围是0.1->100+Gwei。下文会进一步介绍 gas 价格及其影响。 gasLimit(gas上限):即你愿为该交易支付的最高 gas 总额。该上限能确保在出现交易执行问题(比如陷入无限循环)之时,你的账户不会耗尽所有资金。一旦交易执行完毕,剩余所有 gas 会返还至你的账户。 to:即该函数调用被送往的地址。0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b 是我们的案例中投票合约的地址。 Value(值):即你打算发送的以太币总量。当我们执行voteForCandidate函数时,我们根本没有发送以太币,因此 value 为零。如果你要执行一个交易,向另一个人或合约发送以太币,你会需要设置 value 值。 data(数据):让我们来看看data字段是如何计算出来的。 你先从 voteForCandidate(bytes32 candidate)(32字节的候选人)的 ABI 中获取函数签名,并得出它的哈希值。 web3.sha3('voteForCandidate(bytes32 candidate)') '0xc7ed014922ff9493a686391b70ca0e8bb7e80f91c98a5cd3d285778ab2e245b3' 取该哈希值的前4个字节,即:0xcc9ab267。 然后将参数‘Nick’转化为32字节,得到52616d6100000000000000000000000000000000000000000000000000000000 将二者结合,得到数据有效载荷。 2.签署交易 如果你记得的话,你使用了web3.eth.accounts[0]来执行该交易。以太坊网络需要知道你确实是该账户的所有者,从而确保其他人不能以你的名义执行该交易。要向网络证明这点的方法是使用该账户的相应私钥签署交易。签署过后的交易如下图所示: const privateKey = Buffer.from('e331b6d69882b4ab4ea581s88e0b6s4039a3de5967d88dfdcffdd2270c0fd109', 'hex') const txn = new EthereumTx(rawTxn) txn.sign(privateKey) const serializedTxn = txn.serialize() 交易经由本地验证 签署过后的交易会提交至你的本地以太坊节点。然后你的本地节点会验证已签名的交易,确保它真的是由这个账户地址签署过的。 交易被广播至网络 已签署交易经由你的geth/parity节点广播至其对等节点,这些对等节点再将该交易广播给它们的对等节点,以此类推。一旦交易被广播至网络,你的本地节点也会输出该交易的id,你可以用它来追踪你的交易的状态。该交易id就是已签署交易对象的哈希值。 transactionId = sha3(serializedTxn) 3 如果你是在公共的以太坊网络上执行该交易的话,追踪你的交易状态的最佳方式是通过etherscan.io。如上图所示,你是否注意到了有几个节点被标记为 Etherscan 节点。Etherscan 的团队运行了几个节点,并将一个很棒的前端网络应用连接到了 Etherscan上。如果你的交易被他们的节点选中,你可以在他们的网站上查看自己的待定交易。 还要记住的一点是,并非所有节点都会接受你的交易。其中一些节点可能被设置成了只接受 gas 价格超过某一最低值的交易。如果你设置的 gas 价格低于该下限,则节点会忽略你的交易。 矿工节点接受交易 正如图中所示,以太坊网络同时拥有矿工节点和非矿工节点。可能你也知道,矿工的职责是将你的交易包含到区块上。矿工是交易池的维护者,你的交易先是被添加进交易池,再由矿工进行开始评估。 4 从上图中你会注意到矿工将所有交易存储在根据 gas 价格分类的池中。gas 价格越高,该交易就越有可能被添加进下一个区块。这是矿工节点的常见设定(为得到更高的报酬进行优化)。不过,矿工可以将自己的节点设置成根据自己的喜好对交易进行分类(例如,他们为了帮助网络只挖掘gas价格低的交易)。 从上图中,你看出我们的 voteForCandidate 交易是如何沉入矿池底端的吗?一旦所有gas价格高的交易都被挖出来包含进区块之后,矿工将挖掘我们的交易。 还有要注意的一点是,矿池可以容纳的交易数是有限的。比如,一场众筹正在火热进行中或是一个非常流行的分布式应用(如加密猫)横空出世。人们提交了 gas 价格高的交易,希望矿工能最先选中他们的交易。如果 gas 价格高的交易填满了矿池,gas 价格低的交易就会被放弃。我们的候选人 Nick 在一段时间内就别想收到任何选票了。在这种情况下,我们甚至得重新广播我们的交易。 另一个能让你的交易在矿池里上升的技巧是重新提交你的交易,提高 gas 价格并维持 nonce 值不变。这样一来,当矿工接收到新交易时,gas 价格更高的新交易会覆盖之前的交易。如果改变了 nonce 值,重新提交的交易就会被认为是不同的交易(最后会为Nick举行两次投票)。这里推荐一篇很好的文章(编者注:中译本见文末《科普 | 释放阻塞的以太坊交易》超链接),作者Jim McDonald 对此做出了深入的解释。 矿工节点找到一个有效区块并将它广播至网络 矿工最后选中了我们的交易,与其他交易一起包含进区块。矿工只能选择一定量的交易添加进区块,因为以太坊已经设置了单个区块 gas 上限,换言之,交易的所有 gas 上限总数不能超过区块 gas 上限。你可以在 ethstats.net 上查看当前 gas 上限。 一旦矿工选择将交易包含进区块,这些交易将被验证并包含进一个待处理区块,工作量证明开始。某个矿工节点(通过解决工作量证明难题)最终会找到一个有效的区块,并将这一区块添加到区块链上。就像经由你的本地节点广播的原始交易会被其他节点接收那样,矿工节点也会将这一有效区块广播给其他节点。 本地节点接收/同步新区块 最终,你的本地节点将接收这个新区块,并同步区块链在本地的副本。一旦接收到这个新区块,本地节点就会执行区块里的所有交易。 如果你使用 truffle 执行你的交易, truffle 会不断测验区块链以求确认。一旦它发现交易被确认,就会执行 then() 区块中的代码,并打印(我们每个例子的)控制台日志函数。 二. 使用Metamask而非本地节点 5 如果你安装了 MetaMask 浏览器插件,你就能在你的浏览器中管理你的账户。密钥只会存储在你的浏览器上,因此你是唯一一个有权访问你的账户和私钥的人。当你在浏览器上执行交易之时,插件会将你的函数调用转化成原始交易,并用你的私钥签署交易。 Metamask 运行自己的节点,并且使用这些节点来广播你的交易(Metamask 使用的是Infura 运营的节点)。如此一来,你就没必要运行自己的以太坊节点了。 三. 线下签名 如果你不喜欢用插件,或者担心你的本地 geth 节点有可能受损(遭篡改),该怎么办呢?要解决这一问题有一个安全之策。 你是否注意到了,前两个步骤根本不需要联网。如果你想确保自己的交易绝对不会受到篡改,你可以使用一台没有联网的计算机将这一函数调用转换成原始交易,并使用你的私钥签署该交易。之后,你可以复制已签署交易串,并使用联网的计算机将其广播至网络。你可以使用 Etherscan 和 Infura 等服务将你已签署的交易广播至网络。 另一个安全之策是使用 Ledger 或 Trezor 等硬件钱包。这类钱包存储了你的私钥,而签署交易的密钥已经编程进了硬件本身。它们需要联网的原因只是为了发布你的已签署交易。 希望本文能让你更好地理解以太坊交易的工作流程。如果发现文中有任何不当之处,请你留言,我会加以改正。 感谢 Jim McDonald为本文校对。
  • 释放阻塞的以太坊交易

    以太坊2.02020-10-240评论294
    目前以太坊正面临着许多积压的交易,导致一些交易数小时甚至数天都未被处理。 本文解释了转账如何被卡住,以及如何释放它们。 确定gas价格 发送以太坊交易时,有许多方法可以确定最佳gas值。http://ethgasstation.info 等网站提供了gas使用情况的概述,http://www.etherscan.io/txsPending 提供了当前交易池的有关信息。 后者的网站特别有用,因为它可以通过gas价格组织交易清单。 你可以点击 GasPrice 栏来查看。 由此产生的清单大致也是矿工看待交易的方式,所以如果您据此选择一个gas价格以确保您的交易是在前几页,您可能会有一个非常短的交易确认时间。 但是如果你的交易没有被确认呢?它有可能被阻塞了,需要进行释放。 理解阻塞交易 在解释如何释放阻塞交易之前,首先了解交易为什么被阻塞是非常重要的。以太坊是一个区块链:由许多区块组成,每一个区块包含多个交易,一个接着一个,都被链到区块链中,如下图所示: 以太坊的区块链简化视图- (实际上,单个块和链的结构都比较复杂,但是为理解本文,图表提供的信息足够了。) 区块的创造是由矿工通过所谓的”挖矿“过程而产生的,这一概念已经众所周知,但是很多人对交易是如何被一个特定区块选择包含进去的过程并不清楚。为了更详细地探索这个过程,让我们看看下面的示例块1434的创建。 以太坊包含除区块链以外的许多要素,其中之一就是交易池。交易池包含所有已提交给以太坊网络但尚未分配到区块中的交易。 区块 1433 一旦被挖出,对区块 1434 的开采就开始了。区块1434 开始为空: -块1434的初始矿工状态- 矿工将从交易池中选择多个交易插入到块 1434 中,开始挖矿: 在挖矿之前先填充块- 一旦块1434被成功开采,它就成为了区块链的一部分,并且把相关交易从交易池中移除: -挖出第1434块:已经挖掘的交易从交易池中移除- (再次声明,这是对真正发生的事情的简单的解释。) 一个显而易见的问题是“矿工是如何选择要包含哪些交易到区块中?”,答案是“钱”。 提交给以太坊的每笔交易都附有一个数字,代表着提交者愿意向矿工支付的交易费,即 gas 价格。当一个矿工检查交易池并看到两个完全相同的交易时,它将选择 gas 价格高的交易,因为这样会挖矿时矿工能得到更多的钱。 (另一个简化说明:提交者支付给矿工的资金总额实际上是 gas 价格乘以用到的 gas 量而且,所用的 gas 量取决于交易调用的合约的复杂性。需要记住的是,gas 值高的交易对矿工来说更具吸引力)。 当进入交易池中的交易量超过可以包含到下一个区块中的交易量时,这意味着那些gas价格较低的交易将被排除在该区块之外。如果,交易池中 gas 价格高的交易数量达到或者超过了每一个区块的容量,那么 gas 价格低的可能交易就不会被选中。在这一点上,gas价格低的交易就被阻塞了。 处理阻塞交易 如果提交给以太坊的交易量下降,那么阻塞的交易就会自动解除阻塞,否则就需要手动干预来释放交易。 释放交易需要将交易的 gas 价格提高,使得当矿工为区块选择交易时,该交易将在交易清单较高的位置。要做到这一点,交易必须以更高的 gas 价格再次广播。例如,这是一个因为gas价格较低而被阻塞的交易: Type: Pending transaction From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40 To: 0xa34C6BCAe6F46ac6470443CCea67d937f6060c7E Nonce: 1 Gas limit: 21000 Gas price: 1 GWei Value: 0.005 Ether 注意,gas价格此时为1 GWei。以较高的gas价格(10 GWei)重新提交覆盖之前的交易: Type: Pending transaction From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40 To: 0xa34C6BCAe6F46ac6470443CCea67d937f6060c7E Nonce: 1 Gas limit: 21000 Gas price: 10 GWei Value: 0.005 Ether 注意 “From” 地址和 “Nonce” 值在两个交易中是相同的。这两个值可以用来唯一确定一个交易,允许交易覆盖。而且 gas 价格发生了相应的变化。 或者,交易可能需要取消。以太坊没有从交易池中移除交易的机制,但可以用不同的信息覆盖交易,例如用0值转移回发送方,这具有类似的效果。但这仍然是一个交易,仍然需要被开采。重新提交上述交易来达到取消交易的结果,如下所示: Type: Pending transaction From: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40 To: 0xED96dD3Be847b387217EF9DE5B20D8392A6cdf40 Nonce: 1 Gas limit: 21000 Gas price: 60 GWei Value: 0 注意,“To”地址改成了“From”地址,“Value”改成了0。 当交易被替换时,新的 gas 价格要比原来的 gas 值高10%,所以把 20GWei 改成 1GWei 是不可能成功的,而且原来的交易仍然会留在交易池中。 用Ethereal释放阻塞交易 Ethereal是一个命令行工具,它允许您使用标准的 Geth 或 Parity 存储来执行通用的Ethereum活动。Ethereal包含释放阻塞交易的命令。 要安装Ethereal要先安装Go,查看你是否安装Go以及它的版本: go version 如果已经安装了Go,你会看到一个版本报告,例如: go version go1.8.1 linux/amd64 如果你没有安装Go,你可以用电脑安装包管理器安装,或者通过下面网页上的指令安装: http://golang.org/doc/install 一旦安装好Go,可以通过下面的命令安装Ethereal: go get -u github.com/wealdtech/ethereal 确认Ethereal是可用的,而且通过运行以下命令可以看到发送阻塞交易的账户: ethereal account list 并且确保你想看的账户在列表中。 查看交易的状态就运行ethereal transaction info命令,例如,查询前一节中提到的阻塞的交易: ethereal transaction info --transaction=0xec08e7609d80f233fd92cc41068ea0dd6da5d9c05263d45b0a5eee6e20f96194 为了在不改变其他参数的情况下,提高交易的gas价格,以更改后的gas价格来进行交易,例如将gas价格提高到10 Gwei: ethereal transaction up --transaction=0xec08e7609d80f233fd92cc41068ea0dd6da5d9c05263d45b0a5eee6e20f96194 --gasprice=10gwei --passphrase=secret 其中,passphrase是解锁发送阻塞交易的账户的命令。 若要取消一项没有包含到区块的交易,则以改变gas价格的方式来取消交易。 ethereal transaction cancel --transaction=0xc04116457f8f420bb13d770ffbb233501f193ba7c57cd1e4bc2ec02804a8df6a --gasprice=60gwei --passphrase=secret 使用Ethereal可以为您提供释放阻塞交易的能力,并确保即使在Ethereum网络繁忙的时候,交易也能及时通过。
  • 以太坊中的账户、交易、Gas 和区块 Gas

    以太坊2.02020-10-240评论350
    这篇文章是用来帮助人们理解以太坊网络上的一些基本概念和体系,包括账户体系、gas、矿工在区块大小设置机制里的角色等。 什么是账户? 外部拥有账户 vs 合约账户 以太坊中有两种账户 外部拥有账户(EOA) 合约账户 这个区别在即将到来的大都会升级中将会被抽象化,如:http://github.com/ethereum/EIPs/pull/208 外部拥有账户 一个外部拥有账户具有一下特性: 有一个以太币余额 可以发送交易(以太币转账或者激活合约代码) 通过私钥控制 没有相关联的代码 合约账户 一个合约账户拥有一下特性: 有一个以太币余额 有相关联的代码 代码执行是通过交易或者其他合约发送的call来激活 当被执行时 -- 运行在随机复杂度 (图灵完备性)-- 只能操作其拥有的特定储存,例如可以拥有其永久state -- 可以call其他合约 所有以太坊区块链上的行动都是由各账户发送的交易激活。每次一个合约账户收到一个交易,交易自带的参数都会成为代码的输入值运行。合约代码会被以太坊虚拟机(EVM)在每一个参与网络的节点上运行,以作为它们新区块的验证。 什么是交易和消息? 交易 "交易"这个术语在以太坊里被用来指代一个用来存储消息的被签名数据包在区块链上从一个外部拥有账户发送至另一个账户的过程。 交易包括: 这个消息的接收者 一个签名,用来证明发送者有意向通过区块链向接收者发送消息 价值域 - 从发送方转移到接受方的wei (ether/10^18) 的数量 一个可选的数据域,用来储存发送给合约的消息 一个GASLIMIT值,代表了这个交易的执行最多被允许使用的计算步骤 一个GASPRICE值,代表了交易发送者愿意支付的gas费用。一个单位的gas表示了执行一个基本指令,例如一个计算步骤 消息 合约具有发送"消息"到其他合约的能力。消息是一个永不串行且只在以太坊执行环境中存在的虚拟对象。他们可以被理解为函数调用(function calls)。 一个消息包括: 明确的消息发送者 消息的接收者 一个可选的数据域,这是合约实际上的输入数据 一个GASLIMIT值,用来限制这个消息出发的代码执行可用的最大gas数量 总的来说,一个消息就像是一个交易,除了它不是由外部账户生成,而是合约账户生成。当合约正在执行的代码中运行了CALL 或者DELEGATECALL这两个命令时,就会生成一个消息。消息有的时候也被称为"内部交易"。与一个交易类似,一个消息会引导接收的账户运行它的代码。因此,合约账户可以与其他合约账户发生关系,这点和外部账户一样。有许多人会误用交易这个词指代消息,所以可能消息这个词已经由于社区的共识而慢慢退出大家的视野,不再被使用。 什么是 gas? 以太坊在区块链上实现了一个运行环境,被称为以太坊虚拟机(EVM)。每个参与到网络的节点都会运行都会运行EVM作为区块验证协议的一部分。他们会验证区块中涵盖的每个交易并在EVM中运行交易所触发的代码。每个网络中的全节点都会进行相同的计算并储存相同的值。合约执行会在所有节点中被多次重复,这个事实得使得合约执行的消耗变得昂贵,所以这也促使大家将能在链下进行的运算都不放到区块链上进行。对于每个被执行的命令都会有一个特定的消耗,用单位gas计数。每个合约可以利用的命令都会有一个相应的gas值。如这里:http://docs.google.com/spreadsheets/d/1m89CVujrQe5LAFJ8-YAUCcNK950dUzMQPMJBxRtGCqs/edit#gid=0 列了一些命令的gas消耗。 gas和交易消耗的gas 每笔交易都被要求包括一个gas limit(有的时候被称为startGas:http://media.consensys.net/ethereum-gas-fuel-and-fees-3333e17fe1dc )和一个交易愿为单位gas支付的费用。矿工可以有选择的打包这些交易并收取这些费用。在现实中,今天所有的交易最终都是由矿工选择的,但是用户所选择支付的交易费用多少会影响到该交易被打包所需等待的时长。如果该交易由于计算,包括原始消息和一些触发的其他消息,需要使用的gas数量小于或等于所设置的gas limit,那么这个交易会被处理。如果gas总消耗超过gas limit,那么所有的操作都会被复原,但交易是成立的并且交易费任会被矿工收取。区块链会显示这笔交易完成尝试,但因为没有提供足够的gas导致所有的合约命令都被复原。所以交易里没有被使用的超量gas都会以以太币的形式打回给交易发起者。因为gas消耗一般只是一个大致估算,所以许多用户会超额支付gas来保证他们的交易会被接受。这没什么问题,因为多余的gas会被退回给你。 估算交易消耗 一个交易的交易费由两个因素组成: gasUsed:该交易消耗的总gas数量 gasPrice:该交易中单位gas的价格(用以太币计算) 交易费 = gasUsed * gasPrice gasUsed 每个EVM中的命令都被设置了相应的gas消耗值。gasUsed是所有被执行的命令的gas消耗值总和。 如果希望估算gasUsed,可以使用这个estimateGas的API:http://ethereum.stackexchange.com/q/266/42 gasPrice 一个用户可以构建和签名一笔交易,但每个用户都可以各自设置自己希望使用的gasPrice,甚至可以是0。然而,以太坊客户端的Frontier版本有一个默认的gasPrice,即0.05e12 wei。矿工为了最大化他们的收益,如果大量的交易都是使用默认gasPrice即0.05e12 wei,那么基本上就很难又矿工去接受一个低gasPrice交易,更别说0 gasPrice交易了。 交易费案例 在被允许后,我将使用这个MyEtherWallet团队的例子并借用他们的分析。请参考这里:http://myetherwallet.groovehq.com/knowledge_base/topics/what-is-gas 与gas相关的介绍。他们还有一个小页面方便大家把以太币转换成小单位的gas计数单位:http://www.myetherwallet.com/helpers.html 。 你可以将gasLimit理解为你汽车油箱的上限。同时将gasPrice理解为油价。 对于一辆车来说,油价可能是 2.5(价格)每升(单位)。在以太坊中,就是20GWei(价格)每gas(单位)。为了填满你的"油箱",需要10升2.5的油 = $25。同样的,21000个20 GWei的gas = 0.00042 ETH。 因此,总交易费将会是0.00042以太币。 发送代币通常需要消耗大约5万至10万的gas,所以总交易费会上升0.001至0.002个ETH。 什么是"区块gas limit"? 区块gas limit是单个区块允许的最多gas总量,以此可以用来决定单个区块中能打包多少笔交易。例如,我们有5笔交易的gas limit分别是10、20、30、40和50.如果区块gas limit是100,那么前4笔交易就能被成功打包进入这个区块。矿工有权决定将哪些交易打包入区块。所以,另一个矿工可以选择打包最后两笔交易进入这个区块(50+40),然后再将第一笔交易打包(10)。如果你尝试将一个会使用超过当前区块gas limit的交易打包,这个交易会被网络拒绝,你的以太坊客户端会反馈错误"交易超过区块gas limit"。以下例子是来自于以太坊StackExhcange的帖子:http://ethereum.stackexchange.com/questions/7359/are-gas-limit-in-transaction-and-block-gas-limit-different 。 目前区块的gas limit是 4,712,357 gas,数据来自于ethstats.net:http://ethstats.net/ ,这表示着大约224笔转账交易(gas limit为21000)可以被塞进一个区块(区块时间大约在15-20秒间波动)。这个协议允许每个区块的矿工调整区块gas limit,任意加减 1/2024(0.0976%):http://www.reddit.com/r/ethereum/comments/6g6tww/there_are_hundreds_or_even_thousands_of_pending/dinzrgq/ 。 谁来决定 区块的gas limit是由在网络上的矿工决定的。与可调整的区块gas limit协议不同的是一个默认的挖矿策略,即大多数客户端默认最小区块gas limit为4,712,388。 区块gas limit是怎样改变的 以太坊上的矿工需要用一个挖矿软件,例如ethminer。它会连接到一个geth或者Parity以太坊客户端。Geth和Pairty都有让矿工可以更改配置的选项。这里是geth挖矿命令行选项以及Parity的选项。 以太坊网络上的"DoS"攻击是什么? 最近有些评论表示以太坊网络正在慢慢减速,变得拥堵甚至无法使用。这些评论把这个减速的过程称为对以太坊网络的"DoS"攻击。当以太坊网络上持续地出现全满区块并且有大量交易在网络上待处理时就会出现所谓的DoS情况。同时,矿工有权利根据交易费选择打包哪些交易。如果当时队列中(交易池中)有上千笔交易正在等待打包,那么就有可能造成几个小时的非正常交易延迟。DDoS可能是恶意的也有可能是非恶意的。 恶意的DoS 上个秋天,以太坊被某人或某个团体攻击了,通过大量制造垃圾交易。这次攻击在如下博客有介绍:http://blog.ethereum.org/2016/10/18/faq-upcoming-ethereum-hard-fork/ 攻击者通过在他们的智能合约中反复的调用某些命令来让客户端难以处理这些计算,但是这些命令都只消耗少量的gas所以调用起来十分廉价。 在这次攻击中,矿工被要求降低gas limit到150万,在后来的另一次事件中更改到了200万。也有几次其他的事件要求矿工在网络被攻击时降低区块gas limit。 非恶意的DoS 非恶意的DoS其实就是当网络面临海量交易时需要比平常更多的时间来处理一笔交易。最近由于ICO的流行,以太坊网络多次被交易填满。Infura的朋友们写过一篇与此相关的技术分析文章。 为什么区块gas limit在区块被填满时不会自动调整? 主要原因:矿工们没有使用gas limit动态调整的功能。 以太坊协议中存在着让矿工可以通过投票来决定gas limit的机制,所以区块容量不需要经过硬分叉就可以调整。最初,这个机制和另一个默认策略是绑定在一起的,即矿工默认投票使区块gas limit至少有470万,并且趋向于最近1024个区块gas使用量的1.5倍。这使得区块容量会根据需求来自动上升,同时也有一个可用来防御垃圾交易的限制。 就像"恶意的DoS"部分说的,在历史上有几次矿工因为攻击的原因不得不使用非默认设置来帮助降低攻击造成的影响。但现在的问题是矿池在攻击之后并没有将设置改回默认设置。大约一个月前,矿工被要求改变gas limit和gas price设置来再次加入gas limit动态调整功能。因为最近的代币销售火爆导致很多区块被填满并且区块链交易堵塞。 ETH Gas Station是一个人们可以查阅最新区块gas limit设置的网站。 矿工需要做什么才能修复这个问题? 矿工可以在Geth或者Parity客户端中更改设置来重启动态gas limit调整。注意:这些设置是在这个Reddit帖子找到的,其实可以被设置的更高(参考这个帖子)。 Geth 推荐设置 --gasprice 4000000000 --targetgaslimit 4712388 解释 --targetgaslimit Target gas limit sets the artificial target gas floor for the blocks to mine (default: “4712388”) --gasprice Minimal gas price to accept for mining a transactions (default: “20000000000”). Note: gasprice is listed in wei. Parity 推荐设置 --gas-floor-target 4712388 --gas-cap 9000000 --gasprice 4000000000 解释 --gas-floor-target Amount of gas per block to target when sealing a new block (default: 4700000). --gas-cap A cap on how large we will raise the gas limit per block due to transaction volume (default: 6283184). --gasprice Minimum amount of Wei per GAS to be paid for a transaction to be accepted for mining. Note: gasprice is listed in wei. Note 2: --gasprice is a “Legacy Option” 其他挖矿设置选项 可以参考CLI选项页面来看看矿工还能如何调整优化设置。
  • 手把手教你如何妥善备份以太坊钱包

    以太坊2.02020-10-240评论416
    当你打开数字货币新世界大门时,你需要学会一项在这世界生存的技能, 如何妥善的备份你的钱包 。 在过去的世界中,当你把密码弄丢时,你仅需要向服务商提交忘记密码的申请,稍过一会,你就会收到一封邮件,拿起键盘,输入你的新密码。这过程就像魔法一样,你重新获得账户的支配权。 这么理所当然的功能,在新世界中,你再也见不着踪影。 这是你看到数字货币诸多不方便的一面,也是它令人着迷的另一面。因为这是人类历史上,第一次通过技术彻底、纯粹地保障「私有财产神圣不可侵犯」。而这一切,都建立在你如何妥善地保管你的私钥的基础上。 私钥,即财富。 钱包生成机制 在数字货币世界中,你的钱包由私钥,公钥构成。在学会保管钱包前,你需要明白私钥与公钥的生成机制: 非对称加密算法。 在 1976 年以前,所有的加密方式都是同一种模式: 甲方选择一种加密规则,对信息进行加密; 乙方使用同一种规则,对信息进行解谜; 由于加密与解密皆为同一种规则,被称为「对称加密算法」。此加密算法的最大弱点就是甲乙双方都需要了解解密规则,而保存和传递解密规则的过程存在极高的安全风险。 直到 1977 年,Ron Rivest、Adi Shamir 和 Leonard Adleman 设计了一种非对称加密算法,此算法以他们三人名字命名,被称为「RSA 算法」。 以上图为例,解释非对称加密模式的流程: Bob 与 Alice 通过非对称算法生成各自的私钥和公钥(公钥可以通过私钥推导); Bob 想给 Alice 发送一份加密信息; Bob 用 Alice 的公钥对信息进行加密; 加密的信息仅能通过 Alice 的私钥解密; 当前数字货币(比特币、以太币等)采用的是「椭圆曲线算法」,椭圆曲线算法同样也是非对称算法,相比起 RSA 算法有更多的优势,比如安全性能高、计算量小、存储空间占用小、带宽要求低等。 每一个钱包账户包含一份密钥对,即私钥与公钥。私钥(k)是一个数字,通常是随机选出的。有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数生成一个公钥(K)。有了公钥(K),我们就可以使用一个单向加密哈希函数生成该账户地址(A)。 当你发生交易时,每笔交易都需要一个有效的签名才会被存储在区块链。只有有效的私钥才能产生有效的数字签名,因此拥有钱包账户的私钥就拥有了该账户的支配权。 钱包形态 在了解钱包的生成机制后,我们很快就明白一点,我们备份钱包,就是备份私钥,但因保管方式不同,所表现的形态也不一样。 目前常见的私钥形态: Private Key Keystore && Password Mnemonic Seed Private Key Private Key 就是一份随机生成的 256 位二进制数字,你甚至可以用硬币、铅笔和纸来随机生成你的私钥:掷硬币 256 次,用纸和笔记录正反面并转换为 0 和 1,随机得到的 256 位二进制数字可作为私钥。这 256 位二进制数字,就是私钥原始的状态。 Keystore && Password 在以太坊官方钱包中,私钥与公钥将会以加密(创建钱包时设置的密码,请务必记住!)的方式保存为一份 JSON 文件,存储在 /Users/yourname/Library/Ethereum/keystore 中。 这份 JSON 文件就是 keystore,所以你需要同时备份 keystore 和对应的 password。 Mnemonic code Mnemonic code 由 BIP 39: http://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki 提案提出,目的是通过随机生成 12 ~ 24 个容易记住的单词,单词序列通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子,该种子通过 BIP-0032 提案的方式生成确定性钱包。 BIP 39 定义助记码创建过程如下: 创造一个 128 到 256 位的随机顺序(熵)。 提出 SHA256 哈希前几位,就可以创造一个随机序列的校验和。 把校验和加在随机顺序的后面。 把顺序分解成 11 位的不同集合,并用这些集合去和一个预先已经定义的 2048个单词字典做对应。 生成一个 12 至 24 个单词的助记码。 所以当你记住 12 ~ 24 个助记码后,就相当于记住私钥。助记码要比私钥更方便记忆和保管。目前支持助记码的钱包有 imToken 和 jaxx 。 钱包备份方式 因为钱包的形态多样(本质一样),所以备份的方式也同样多点,但最终的目的: 防盗,防丢,分散风险 。 防盗:分离备份,假如 keystore 或密码被盗,但对应的密码 和 keystore 依然安全; 防丢:多处备份,降低丢失所有对应的 keystore && password 、助记码、私钥等等风险; 分散风险:将资金适当分散,降低损失程度,同时采取多重签名方式,提取超过限制金额,需要多把私钥授权; 下面为大家介绍常见的备份方式: 多处和分离备份 keystore && password 纸钱包 脑钱包 多重签名 多处和分离备份 keystore && password 打开以太坊官方钱包,在菜单栏中选择 ACCOUNTS -> BACKUP -> ACCOUNTS,你会看到一个 keystore 文件夹,在里面保存你创建过的钱包账户,以 UTC--2015-08-16....... 格式命名的 JSON 文件,这就是你的 keystore 文件。 将 keystore 文件放置多处安全的位置,如离线的 USB 以及你信任的云存储服务商。 keystone 对应的 password,你应该采用强密码,同样多处且与 keystore 分离备份。 纸钱包备份 纸钱包实质就是将 keystore 或 私钥以纸质化形式保存,一般为二维码形式。 你可以通过命令行的方式 cat /Users/yourname/Library/Ethereum/keystore/ | qrencode -o keystore.png 也可以到 MyEtherWallet: Open Source JavaScript Client-Side Ether Wallet:http://www.myetherwallet.com/ 离线提交你的 keystore 或 私钥,就可以直接打印对应的二维码纸钱包。 脑钱包 我们所说的脑钱包并不是由用户自身输入自定义的词句生成私钥(因为这并不安全),而是通过 BIP 39 提案的方式生成足够随机的,可记忆的助记码。这是一个方案,但不是一个非常好的方案,因为人类的大脑并不总是靠谱。 多重签名 多重签名是一个不错的选择,它的优势是当你需要提取超过限制的金额时,需要多把私钥同时授权,同时提升防盗,防丢的安全性。 在以太坊官方钱包中,你可以在 Wallet Contracts 下方中选择 Add Wallet Contract,前提是你用来创建 Wallet Contract 的 account 有不少于 0.02 ETH,足以支付交易所需的费用。 当你选择 MULTISIGNATURE WALLET CONTRACT ,将会看到如下提示: “This is a joint account controlled by X owners. You can send up to Y ether per day. Any transaction over that daily limit requires the confirmation of Z owners.” X 代表此钱包合约由多少账户控制 Y 代表在单个账户授权情况下,每日可提款的上限 Z 代表突破提款上限,需要多少账户授权 默认我们采取 X = 3 ,Z =2 的方式,钱包合约由三个账户管理,需突破取款上限需要两个账户同时授权。 采取多重签名的机制后,你可以多处且分离的方式保管你的 keystore 和 password,提升防盗,防丢的安全性。 关于更多多重签名的详情可看官方文档: http://ethdocs.org/en/latest/account-management.html#creating-a-multi-signature-wallet-in-mist 结语 不管你用任何方式备份钱包,达到 防盗,防丢,分散风险 的目的即可。
  • 新手教学:购买以太坊(ETH)及存入钱包教程

    以太坊2.02020-10-240评论611
    你可以选择从任意一个支持美元直接购买ETH的交易所进行交易,如gemini.com, kraken.com,这里我们以美国GDAX交易所来举例,如何从零开始开户、购买并储存ETH: 开户: 进入www.gdax.com, 点击右上角的Create Account. 输入你的姓名、邮箱、密码,选择你所在州,勾选同意服务条款后点击继续。系统将会发送一封确认邮件到你的邮箱。点击邮件中的确认链接后,会进入如下页面。 点击I Accept,系统会要求你输入自己的手机号以完成2FA认证来确保账户安全。 输入手机短信上显示的6位验证号来绑定2FA后,会进入个人信息页面: 请如实填写,即可完成注册。 购买: 成功登陆后,你会看到如下界面: 点击Deposit,你会看到多种汇款方式,到账最快的是Wire Transfer,一般当日即可完成,并且没有限额,是我们推荐的一种方式。你也可以在连接自己的银行账户后使用银行转账的方式,一般需要4~5个工作日来处理,并且每周限额$10000 ~ $15000左右。需要说明的是,Wire Transfer需要$10的手续费,而银行转账没有手续费。 美元到账后,你就可以下单购买需要的虚拟货币。GDAX平台支持比特币(BTC),ETH,和莱特币(LTC)使用美元直接购买。下单方式有Market(市价),Limit(限价),Stop(止损)。我们推荐使用Limit Order,在略低于当前成交价的位置下单,以期获得较好的成交价格以及较快的成交速度。 交易完成。当你已经进行到这一步,那恭喜你,已经成功的购买了ETH。你可以选择把它们留在GDAX平台上,但更多的时候你应该想要转发给自己的钱包来保存。下面我们就来简要介绍一下钱包的使用。 钱包: 可供选择的钱包有很多种,包括Mist, Jaxx, MetaMask, imToken等等,我个人最喜欢的是imToken,是支持iOS和Android的移动钱包,非常简单易用,下面就以imToken在iOS平台上举例教学。 创建钱包: 在App Store中搜索imToken并下载。第一次打开后请点击“创建钱包”。 根据指示,输入钱包名(随意选择)、密码(非常重要,也是你的交易密码,遗失后不能找回)、确认密码后,点击“创建钱包”,完成钱包的创建。 点击“备份钱包”,导出钱包的“助记词”,这是一串英文单词,请务必将其记录并放在安全的地方,任何拥有这一串英文单词的人都可以获得这个钱包的使用权。自此,你已全部完成这个钱包的准备工作。下面就是将GDAX交易所上购买的ETH转入你的钱包了。 转入ETH至钱包: 打开imToken钱包,点击钱包名下面的一串0x开头字符,会看到如下界面: aWJhbjpYRTg5VFY2RkE5QjFBTFpWWkNNRjRNN01RQVUyVFEwRUdTUT9hbW91bnQ9MCZ0b2tlbj1FVEg= (二维码自动识别) 这是你的ETH地址,点击“Copy Wallet Address”将地址复制到剪切板。 回到GDAX界面,在Deposit的右边可以看到Withdraw,点击Withdraw后,选择”ETH Address”, 输入想要提取ETH的数量,在地址栏复制刚刚拷贝好的你的钱包地址,再次确认地址无误后,点击Withdraw funds. 请注意,如果地址填错,你的ETH将永久丢失,无法找回。 几分钟后,你的ETH便存入了你的imToken钱包。现在你就可以开始投资ICO了! 以上就是由小编为您整理的如何购买以太坊(ETH)及存入钱包教程,文章内容转载自知乎.
  • 为什么我质押的 ETH 在钱包中不显示了?

    以太坊2.02020-10-230评论463
    如果你将参与质押的 ETH 钱包在 imToken 中移除并重新导入或在其他设备导入,会发生质押的 ETH 在钱包中不显示的情况,原因是参与质押的 ETH 属于 Eth2 信标链上的资产,因此需要在当前参与质押的 ETH 钱包的管理页面中将 Eth2 公钥生成,生成后即可看到对应质押的 ETH 数量。 请按照如下步骤进行操作,即可恢复显示。 点击资产页右上角「···」 在管理页点击「以太坊 2.0 钱包管理」 点击「创建」 当 Eth2 公钥创建成功后,回到以太坊 2.0 质押挖矿界面即可看到质押的 ETH 数额。
  • 如何查看订单与存款状态?

    以太坊2.02020-10-230评论490
    提交订单后回到 Eth2 质押页面,点击「验证器」可查看该验证器在信标链的状态。 排队中代表验证器正处于等待激活的状态,等待时间取决于网络中等待激活的验证器数量,信标链每天可激活 900 个验证器。在本文发布时,一台验证器被激活需要等待约 8 天的时间。 活跃代表已激活,验证器开始工作并产生收益。此时你可在 imToken 软件内的以太坊 2.0 质押挖矿界面查看累积的收益 BETH 数额,点击「验证器」还可查看余额和 APR(年化收益率) 等详情。 注:BETH(Beacon ETH)是指你在 Eth2 信标链上的资产,当前 BETH 主要用于区分信标链与以太坊当前主链上的 ETH,未来可能会取消 BETH 这类在命名上的说法。1 BETH 对应你所抵押的 1 ETH,质押收益会以 BETH 形式积累。在 Eth2 转账功能开启之前,BETH 不可转账或交易。
  • 如何在 imToken 中参与非托管 Eth2 质押?

    以太坊2.02020-10-230评论418
    mToken 2.9.1 现已支持 Eth2 钱包管理,并深度集成 InfStones 提供的非托管 Eth2 质押方案。非托管方案最大程度地保证了用户对质押资产的所有权和控制权,且无需操心验证节点的运维服务。 你可以对当前以太坊 2.0 不同类型质押服务进行了分类并比较了各类型方案的优劣。其中「非托管」方案适合对资产安全有较高要求的用户,该方案允许质押用户在参与 Eth2 获取稳定收益的同时,仍对质押资产保持所有权和控制权。 如果你持有 32 个及以上的 ETH,即可选择非托管质押方案,在 Eth2 信标链上拥有一个属于你的验证节点。 非托管 Eth2 质押手把手教程? 1、在资产首页点击「以太坊 2.0 质押挖矿」进入质押界面,点击「>」-「质押」。 2、输入要购买的验证节点数量,一个节点需要存入 32 个 ETH。确认节点数量后,点击「下一步」进入费用确认页面。 3、选择钱包地址,进行费用确认。费用分 3 部分: 质押金额:每个验证节点需要质押 32 个 ETH; 服务费:InfStones 维护节点运行的服务费 100 美元,服务将支持节点运行至 Eth2 开放转账; 矿工费:发送这笔交易所需的矿工费,该费用取决于以太坊网络实时情况。 注:当前服务费为 100 美元 / 节点,是限时活动价。如有质押需求的用户可在优惠期间尽快参与,转账开放后服务将更改为时长付费制,具体细节将在 Eth2 确认开放转账时间后公布,购买时请以产品端显示的费用为准。 4、仔细阅读风险条款,请注意: 存入的 32 ETH 本金和累计收益在 Eth2 开启转账功能之前将无法取回。转账功能开启时间取决于 Eth2 开发进程; Eth1 钱包的助记词将用于取回转账功能开启后 Eth2 上质押的资产,因此请安全备份助记词。助记词一旦丢失,则无法取回存入的 ETH 本金和累计收益。 确认无误后勾选条款,确认支付。交易成功后等待 Eth2 信标链确认,预计等待时间为 12~18 小时。 5、存款交易在信标链上确认后,验证器(即验证节点)将处于「排队中」即等待被激活的状态,等待时间取决于网络中等待激活的验证器数量,信标链每天可激活 900 个验证器,截止发稿,等待激活时间约为 4 天。 当验证器显示「活跃」的状态代表已激活,验证器开始工作并产生收益,此时你可在以太坊 2.0 质押挖矿界面即可查看累积的收益 BETH 数额,点击「验证器」可查看余额和 APR(年化收益率) 等详情。 注:BETH(Beacon ETH)是指你在 Eth2 信标链上的资产,1 BETH 对应你所抵押的 1 ETH,质押收益会以 BETH 形式积累。在 Eth2 转账功能开启之前,BETH 不可转账或交易 信标链浏览器: http://beaconscan.com/ http://beaconcha.in/
  • 以太坊 2.0 质押挖矿问答

    以太坊2.02020-10-230评论367
    问:什么是以太坊 2.0 质押挖矿? 答:以太坊 2.0 现阶段信标链采用的是 PoS 机制,即权益证明。以太坊持有者可以通过质押 32 ETH 成为信标链上的一个节点验证人并获得额外的 ETH 奖励。 问:以太坊 2.0 质押挖矿是永久的吗? 答:你可以一直参与质押,除非未来以太坊社区决定再次修改共识机制。 问:如何查看全网 Eth2 质押数据? 答:你可以通过以太坊官网 http://launchpad.ethereum.org/zh 查看当前质押数据。 问:什么是非托管质押? 答:Eth2 质押服务中的每个验证节点都对应两个密钥,一个是验证人密钥,用于验证区块,另一个是取款密钥,用于取回质押的 ETH 本金和收益。imToken 的非托管质押方案允许验证人密钥和取款密钥的分别保管。取款密钥由用户自己在去中心化钱包内管理,验证人密钥则由第三方节点服务商导入节点客户端中用于节点验证维护。 问:imToken 的非托管质押是去中心化的吗? 答:从资产所有权角度看是去中心化的,用户所质押的 ETH 取款密钥由自己掌握,只有用户拥有取款权限。 问:非托管质押服务如何收费? 答:当前服务对每个验证节点每年收取等值 200 美金的 ETH ,服务价格、有效时长及后续续费规则可以通过在 Eth2 信标链与 Eth1 合并前,当前支付的费用将持续有效,验证节点将持续运营至合并完成日,合并完成后需要按续费规则续费 问:我想投入少于 32 ETH 怎么办? 答:你可以在以太坊 2.0 质押挖矿界面点击 Eth2 DApps,选择支持少于 32 ETH 的质押方案。 问:提交订单之后,BETH 数量为什么没有更新? 答:BETH 的数据更新并不是实时的,当订单交易在链上成功后,新质押的 BETH 的数量大约会在一天左右更新。 问:质押时想购买多台验证器, ETH 是一次性存入还是分批存入? 答:建议一次性存入,一次性存入只需支付 1 次矿工费,会比分批存入节省更多矿工费。支持一次性质押最多 3,200 ETH,若有更多质押需求可分成多笔交易操作。 问:我购买了多台验证器,为什么每台验证器的收益率不一致? 答:每个节点之间的收益率存在差异是正常的,每个节点的在线率、参与验证与提案的事务数量不同实际收益也会不同。在验证节点正常运行时,运行时间越长,其收益会越趋于稳定。 问:参与了 Eth2 质押的 ETH 还能进行转账和交易吗? 答:参与了 Eth2 质押的 ETH 在现阶段还不能进行自由交易,需等待以太坊 2.0 开启转账功能,预计开启时间为 2022 年或更晚。 问:我何时可以转移质押的 ETH 和收益? 答:以太坊 2.0 开启转账功能后,预计开启时间为 2022 年后。 注:以太坊原计划是在合并时开启转账功能,但为了尽快实现合并,转账功能可能被延期。所以合并后质押的 ETH 还暂时无法进行转账,需要等待合并后的转账功能开启,预计开启时间为 2022 年后。 问:我质押了 64 个 ETH,将来取款时是需要分两次取出还是可以一次性取出? 答:具体的取出规则以太坊社区目前尚未做出规定,但只要你保存好 Eth1 的助记词即可取回资产。 问:取款功能开放后,是否只能以 32 ETH 为单位进行取款? 答:具体的取出规则以太坊社区目前尚未做出规定,但只要你保存好 Eth1 的助记词即可取回资产。 问:当 Eth2 开放转账功能后,我能否只提款质押收益,留下 32 ETH 继续参与质押? 答:以太坊开发团队正在规划此功能,但具体规则以太坊社区目前尚未做出规定。 问:为什么切换至其他 Eth1 地址还能看到质押的 ETH? 答:以太坊 2.0 质押挖矿界面显示的是你在 imToken 中所有 ETH 钱包质押的总数额。
  • 什么是以太坊 2.0 公钥?

    以太坊2.02020-10-230评论461
    以太坊 2.0 公钥地址是目前以太坊 2.0 网络上的地址标识,由于以太坊 2.0 与以太坊 1.0 采用完全不同的椭圆曲线实现私钥的创建与钱包公钥地址的派生,因此需要有新的的以太坊 2.0 钱包来管理密钥。 在 imToken 内你可以使用一把助记词同时管理以太坊 1.0 和以太坊 2.0 钱包。当前由助记词创建或导入的钱包(例如身份钱包、由助记词创建或导入的以太坊钱包)可以在钱包管理内生成以太坊 2.0 公钥。 按照 EIP-2334 规范,通过路径 m/12381/3600/0/0 生成以太坊 2.0 提款密钥。
  • 以太坊是什么?

    以太坊2.02020-10-230评论364
    简而言之,以太坊(Ethereum)是将比特币中的一些技术和概念运用于计算领域的一项创新。比特币被认为是一个系统,该系统维护了一个安全地记录了所有比特币账单的共享的账簿。以太坊利用了很多跟比特币类似的机制(比如区块链技术和 P2P 网络),来维护一个共享的计算平台,这个平台可以灵活且安全地运行用户想要的任何程序(当然也包括类似比特币的区块链程序)。为了更好地理解以太坊,让我们先回顾一下过去。 中本聪在 2009 年开发的比特币,在金融领域常常被认为是非常激进的。作为数字资产的首个典型代表,比特币没有任何人给它背书,也没有什么“固有价值”,甚至没有一个中心化的发行者和控制者。而作为整个比特币实验的一部分,区块链技术,被用来实现比特币系统的共识机制。而该技术目前也已经得到了越来越多的的关注。最常被人拿来举例的一些基于区块链技术的应用包括,利用链上资产替代自定义货币和金融工具的“彩色币”应用,管理物理设备所有权的“智能资产”应用,复杂一些的应用包括,利用代码直接控制数字资产的“智能合约”应用,以及基于区块链的“去中心化自治组织”(DAOs)等等。 在以太坊出现之前,已经有很多基于区块链技术,试图实现上述区块链应用的项目。然而,这些项目都有一定的局限性,只能同时支持一种或几种特定应用。而以太坊之所以能超越以往这些项目的局限性,是因为其核心思想:以太坊要实现的是一个内置了编程语言的区块链协议,由于支持了编程语言,那么理论上任何区块链应用都可以用这门语言进行定义,进而作为一种应用,运行于以太坊的区块链协议之上(译注:该协议的意义与互联网时代的 TCP/IP 协议有的一拼)。而不是像以往的那些项目,各自为政,分别定义自己的区块链协议,而各个协议又只支持一种或几种特定区块链应用,且互不兼容。而且,基于以太坊的支持编程的区块链协议,不仅能实现前文所述的已经提出的各种区块链应用,并且在未来,也能实现现在的人们还没有想到的全新的区块链应用。也就是说,以太坊定义好的区块链协议,使得区块链应用开发者高效快速地开发顶层应用,变为可能。 比特币经常被称之为“全球账簿”,尽管这个账簿记录的仅仅是一种货币——比特币的全部账单。相应的,以太坊可以被看作一台“全球计算机”:一个任何人都可以上传和执行应用程序,并且程序的有效执行能得到保证的地方,这种保证依赖的正是以太坊系统中鲁棒性极强,去中心化的,由全球成千上万的计算机组成的共识网络。以太坊,以应用于比特币和其他系统中的区块链技术作为基础,同时,也以比特币和其他系统中的密码学和经济刺激手段作为计算安全性的保证。但是,由于其对于编程语言的支持,以太坊得以开启更大的可能性。 举一个具体的例子,试想一个使用 Slock(一个基于以太坊的物联网平台)提供自行车租赁服务的场景。自行车的所有者会将一个 Slock(智能锁)安装到他们的自行车上,并且在以太坊区块链上给自行车注册一个智能合约(一段计算机程序代码)。接下来,任何人都可以向该智能合约发起一个发送一定数量数字货币的请求,合约在接到这个请求之后,会自动将这笔数字货币转发给自行车的所有者,并且记录一个状态,这个状态用于表明,刚刚这位数字货币的发送者获得了某种所有权,比如这辆自行车接下来三个小时的使用权。接下来,这个人在三个小时内,都可以通过智能手机向 Slock(智能锁)发送特定的签名信息,这条签名信息会打开车上的这把锁。上述的整个租赁过程,都没有涉及任何中心化的支付处理机构,即使是 Slock 这家公司本身。因此,使用类似 Slock 锁的人,不用担心 Slock 这家公司倒闭之后自己这把锁不能使用的问题,也不用担心服务商突然开始被征收高昂费用的问题,更不用担心自己的私人交易信息会全部落入某一方手里的问题。 基于以太坊的其他区块链应用还包括,各种各样的金融合约——从简单的实体资产(黄金,股票)的数字化应用,到复杂的一些金融衍生品应用,面向互联网基础设施的更安全的更新与维护应用(比如 DNS 和数字认证),不依赖中心化服务提供商的个人线上身份管理应用(因为中心化服务提供商很可能留有某种后门,并借此窥探你的个人隐私)。除了已经被很多创业团队实现出来的 100 多种区块链应用以外,以太坊也被一些金融机构、银行财团(比如 R3),以及类似三星、Deloitte、RWE 和 IBM 这类的大公司所密切关注,由此也催生出了一批诸如简化和自动化金融交易、商户忠诚指数追踪、旨在实现电子交易去中心化的礼品卡等等区块链应用。 本质上,以太坊的目标,就是将区块链技术所具有的去中心化、开放、和安全这三大特点,引入到几乎所有能被计算的领域。 注:原文作者 Vitalik Buterin 是以太坊(Ethereum)的创始人, Bitcoin Magazine 联合创始人,同时也是区块链和加密货币的长期开发者和研究人员。
  • 什么是以太坊2.0?

    以太坊2.02020-10-230评论337
    以太坊 2.0,简称 Eth2,是一次规划已久的以太坊网络重大升级,将使以太坊网络具有更好的可拓展性、安全性和可持续性。 通过这次升级,以太坊将由 PoW 共识机制转变为 PoS,并引入分片机制。以太坊网络将大幅减少对能源的需求,能够同时处理更多交易并提升网络安全性。 Eth2 将分阶段进行,目前处于信标链(原阶段 0)。你可以通过以下文章来了解 Eth2 更多信息。 Eth2 路线图 信标链 上线时间:2020 年 12 月 1 日 我们当前处于信标链(原阶段 0),其存款合约已经启用。 信标链是基于 PoS 共识的区块链,将为整个以太坊网络提供共识基础,为后续的分片链升级铺平道路。 用户现可正式质押 ETH。但需要注意,信标链存款合约中的 ETH 质押是单向的,只有在 Eth2 与 Eth1 合并后,用户才可取回质押的 ETH 本金和收益。 合并 预计上线时间:2021年 合并指将当前的以太坊主网由 PoW 共识机制升级为 PoS 机制,成为一个分片链,并和信标链对接。这将使整个网络的权益得到保证,并标志着高能耗挖矿的结束。 分片 预计上线时间:2022年 通过将网络拓展到 64 个分片区块链,扩展以太坊处理交易和存储数据的能力。 imToken & 以太坊 2.0 当前市场上参与以太坊 2.0 现阶段(信标链)质押的常见方案主要有以下几种类型: 自建节点:用户自行运行 Eth1 和 Eth2 客户端并自行运行维护节点; 完全托管式:将 ETH 转账至值得信赖的托管服务商进行集中托管,允许用户小额(少于 32 ETH)参与质押; 基于托管的质押池:在完全托管式方案的基础上提供质押池代币,解决 ETH 长期锁定的流动性问题; 非托管方案:用户保留 ETH 资产和质押收益控制权,通过两把密钥与服务商共同管理验证节点。 如果你想参与 Eth2 质押,可根据以下条件做出适合的选择: 愿意投入 32 ETH 及以上 如果你具有过硬的技术实力与节点运维经验,建议选择「自建节点」方案。但如果你不愿付出过多的运维精力,且对资产安全、节点性能有较高的要求,建议选择 imToken 的「非托管」方案。 imToken 2.9.1 深度集成了 InfStones 提供的非托管 Eth2 质押方案,最大程度地保证了你的资产所有权和控制权,且无需操心验证节点的运维服务。「非托管」方案适合对资产安全有较高要求的用户,该方案允许质押用户在参与 Eth2 获取稳定收益的同时,仍对质押资产保持所有权和控制权。 另外你还可以在 imToken Eth2 质押专区找到其他支持 32 ETH 及以上的质押服务 Staked:http://staked.us/v/eth2/stake/?utm_campaign=RAY+Affiliate&utm_source=imToken&locale=zh-CN InfStones:http://www.infstones.io/ HashQuark:http://www.hashquark.io/#/ Stake.fish:http://stake.fish/zh/ RocketPool:http://beta.rocketpool.net/ 愿意投入小于 32 ETH 如果你的资产不足 32 ETH,推荐选择「质押池」方案。建议根据服务商品牌、质押池代币与 ETH 折价等因素选择信赖的质押池。 质押池方案 Bifrost.finance:http://bifrost.finance/ RocketPool:http://beta.rocketpool.net/ Lido: http://lido.fi/ Stkr: http://eth2.ankr.com/ Eth2 常用工具 Staking 收益计算器 http://ethereumprice.org/eth-2-calculator/ http://beaconscan.com/staking-calculator 网络进度查看工具 http://launchpad.ethereum.org/ 区块链浏览器 http://beaconscan.com/ http://beaconcha.in/ http://eth2stats.io/ 节点客户端 Lighthouse:http://lighthouse.sigmaprime.io/ Numbus:http://nimbus.team/ Prysm:http://prylabs.net/ Teku:http://docs.teku.pegasys.tech/en/latest/HowTo/Get-Started/Build-From-Source/ 常见问题 1、参与信标链上质押的好处和风险? 好处:参与质押后最低可享受 4.9% 的 ETH 年化收益率。 风险:质押的 ETH 可能由于验证人的行为不当而罚没;同时此阶段质押锁定的 ETH 本金和收益至少需要等到合并后才可取出;若采用流动性解决方案将信任方案提供方,资产安全将取决于解决方案提供方的可信程度。 2、Eth2 是一条独立的区块链吗? Eth2 是对现阶段以太坊的一系列重大升级,包括构建信标链、64 条分片链、将当前以太坊主网由 PoW 升级为 PoS 且合并为分片链等。 总的来说,Eth2 是下一代以太坊,旨在保持去中心化的前提下,提高以太坊的可拓展性、安全性和可编程性。 3、当前的以太坊主网与 Eth2 的关系? 当前的以太坊主网将在 Eth2 的合并阶段进行升级,并由 PoW 共识机制转变为 PoS。 4、我需要做些什么? 作为一个普通的以太坊用户,在 Eth2 的系列升级中无需进行任何操作。但需要提醒的是,未来可能会有关于 Eth2 的骗局出现,请务必小心。 如果你有任何疑问,可以发送邮件至 [email protected] 与他们联系。
sitemap