nest3.0从架构解析到克隆六(nest预言机从克隆到移植)

看本节之前,建议从我的主页中把nest2.0的四篇文章,和《nest3.0从架构解析到克隆》的前五篇都看一下。本节讲的是如何进行简单的克隆和移植。 因为我的笔记都是去年6到8月份之前陆续写的,所以很多内容不太完整。大家只能说凑合看。

返回总章

前言

看本节之前,建议从我的主页中把nest2.0的四篇文章,和《nest3.0从架构解析到克隆》的前五篇都看一下。 本节讲的是如何进行简单的克隆和移植。 因为我的笔记都是去年6到8月份之前陆续写的,所以很多内容不太完整。 大家只能说凑合看。后期如果我重新做的话,可能会做大部分的修改,但目前并没有这个打算。 再次强调一些,本节的内容看起来似乎很混乱,但确实是当初克隆的笔记,而且也成功运行了。

克隆

第一大部分

两个token加上mapingo:p

  1. 建立token 校验不通过是两个原因: 首先是我们会默认输入两次eth,这不是bug,而是IterableMapping会生成一个地址,然后nesttoken还会生成一个地址。这使得我们在nestoken合约校验的时候lib部分要把IterableMapping和对应的地址放进去。以后遇到这种情况一定要多观察remix下面的命令行。 其次,还有几种,就是:1.编译的版本应该跟源码里面第一行的版本对应上,2.同时选择优化或者不优化,3.安装合约的时候一定要看清楚名字,4.遇到反复不成功的考虑重启谷歌游览器。
  2. (Nest_3_VoteFactory继续1)如果遇见remix因为体积太大部署不了的,请选择优化,或者重启后选择新的编译器,(0.6.0) Nest_3_VoteFactory.sol,并将lib里面的math.sol里面内容拷贝到这个里面,然后选择Nest_3_VoteFactory合约安装o:p ps:简单说一下为什么这次能通过 第一次remix运行的时候显示数据超过24k。然后我选择优化,选择0.6.0编译器。 然后还不行,就重启浏览器。然后安装成功。 在etherscan上面验证,编译器选择0.6.0,选择优化,默认选择200优化值,其余都没有,一次性成功!!!
  3. 将所有的contract IBMapping,以及IBMapping,改为Nest_3_VoteFactoryo:p 涉及到的文件有:SuperMan.sol,NEST_NodeSave.sol,NEST_NodeAssignmentData.sol,NEST_NodeAssignment.sol
  4. SuperMan.sol(nestNode) 里面的SuperMan结构体,选择5.10编译器与优化选项,另外加上abi里面的缺省地址校验,就ok了。这个是VoteFactory投票系统运行的前提。o:p Ps1:建立的时候需要填2里面的Nest_3_VoteFactory地址 我好像填错了,应该是\Nest2.0里面的IBMapping.sol(需创建),但因为这里面好像修改不了,所以SuperMan.sol需要重新建立。貌似这个地方没改是为了继承v2里面的超级用户。 Ps2:用钱包可以查看到 ps3:转账暂时不可用,因为需要与NEST_NodeAssignment(nodeAssignment)挂接,但因为我们暂时不转账也不投票,所以无需考虑这个。o:p Ps4:NodeAssignment涉及到NEST_NodeAssignmentData和NEST_NodeSave两个合约,而这两个合约与nn分红有关,暂时也不考虑。
  5. 建立mapping(Nest_3_VoteFactory继续2) a.nest到nesttoken地址o:p 接下来,我们用addContractAddress输入了nest,token地址。 然后用checkAddress查出了nest的地址。说明这个合约运行良好。 b.销毁nest的地址:[0x0000000000000000000000000000000000000001]() 接下来,我们用addContractAddress输入了[nest.v3.destruction,token]()地址。 C,nestNode(0xf41d4d9c1b72b5a689b56c79170590caeeb008f7)。 d,当这些都完事后,需要changeMapping命令,用超级用户来更新上面三个。(等c完事后再说) e在更新后,我们才能真正的开始用mapping,但还无法完成投票等功能,因为Nest_3_VoteContract等4个智能合约还没有设置完毕。但由于我们暂时并不需要投票,所以这部分不需要设立。 结论1:至此,从nest,nn和mapping,正式建立。这也是最基本的架构。我们下一步将开始实现具体的功能。

第二大部分

挖矿智能合约的实现。重点是Nest_3_OfferMain(NEST预言机报价合约) 简单说明: Nest_3_OfferMain调用Nest_3_OfferPrice实现价格的功能,两个代币涉及到nest和nn,剩下几个Nest_3_MiningContract, Nest_3_Abonus,涉及到了分红。最后几个n_toke也有一个OfferMain,不需要考虑。

第一步 解析Nest_3_OfferMain

Nest_3_OfferMain里面就一个智能合约Nest_3_OfferMain 初始化和changeMapping里面涉及到 voteFactory(已设置) nest.v3.offerPrice(未设置),Nest_3_OfferPrice nest.v3.miningSave(未设置)Nest_3_MiningContract nest.v3.abonus(未设置),Nest_3_Abonus nest(已设置) nodeAssignment(未设置)Nest_NodeAssignment est.v3.coder(未设置)管理员账号, 然后涉及到四个智能合约,Nest_NodeAssignment,Nest_3_MiningContract,Nest_3_VoteFactory(已设置),Nest_3_Abonus。

第二步 部署Nest_3_MiningContract

在这里面初始挖矿参数 Nest_3_MiningContract合约地址,初始化及changeMapping里面设置三个内容。 voteFactory(已设置) nest.v3.offerMain(需要nest.v3.offerMain地址,并导入到voteFactory里面)(未设置) nest(已设置)

  1. nest.v3.offerMain将其伪地址(0x01)传输给voteFactory 的mapping(nest.v3.offerMain),(已完毕)。
  2. 然后建立[Nest_3_MiningContract](),然后传输给voteFactory 的mapping[(nest.v3.miningSave)]()(已完毕)
  3. 等Nest_3_OfferMain生成后(需要nest.v3.miningSave的地址),将其地址传输给voteFactory 的mapping(nest.v3.offerMain);(未进行)
  4. 最后Nest_3_MiningContract进行changeMapping即可。(未进行)

第三步 继续搞定其他智能合约

nest.v3.offerPrice(未设置),Nest_3_OfferPrice nest.v3.abonus(未设置),Nest_3_Abonus nodeAssignment(未设置)Nest_NodeAssignment [est.v3.coder]()(已设置)管理员账号 这里的顺序是Nest_3_Abonus,Nest_NodeAssignment,Nest_3_OfferPrice暂时不弄。

第四步 部署[Nest_3_Abonus

(系统收益池)nest.v3.abonus]()o:p 注意构造的时候需要输入mapping地址。o:p 记得构造后传输给voteFactory 的mapping(nest.v3.abonus)

第五步 部署Nest_NodeAssignment

收益分配合约nodeAssignment 需要NEST_NodeSave和NEST_NodeAssignmentData两个合约编译,并对接到mapping。 1.NEST_NodeAssignmentData(nodeAssignmentData) 2.NodeSave(nestNodeSave)o:p

第六步 部署Nest_3_OfferMain

收益分配合约nest.v3.offerMain

  1. 目前就差一个Nest_3_OfferPrice(nest.v3.offerPrice)就能完事了,我们设置其为0x01,然后编译Nest_3_OfferMain
  2. Nest_3_OfferMain(nest.v3.offerMain)传输到mapping里面 uint256 _leastEth,最少报价eth(默认10个,我考虑改为0.1个);uint256 _offerSpan报价eth跨度(默认10个,我考虑改为0.1个);uint32 _blockLimit区块链间隔上线 constructor里面有一个100亿,注意一下。 changeTokenAllow 这个里面关键是这个,需要填入一个erc20币的地址,我们这里填nest的

第七部 部署Nest_3_OfferPrice

NEST预言机价格合约 | nest.v3.offerPrice 在Nest_3_OfferPrice里面最主要的是下面几个 1.与ntoken相关的先不走,包括nest.nToken.offerMain,nest.nToken.tokenMapping,nest.nToken.tokenAuction 2.建立后,a记得更新mapping里面的nest.v3.offerPrice,b Nest_3_OfferMain里面changemapping 第三大部分是 提取分红,主要是Nest_3_TokenAbonus,及其附属的三个合约。 因为我们不提取分红,所以这三个合约先不做。

移植的部分说明

  1. 制作tokeno:p 改名:NEST两个改名,一个叫sensoracle,一个叫SO。
  2. Nest_3_VoteFactory里面的Nest_3_VoteFactory
  3. SuperMan里面的SuperMan,两个名字,一个叫snode,一个叫SN
  4. Nest_3_VoteFactory里面增加nestNode(对应snode),nest.v3.destruction(销毁地址),nest(SN),然后changemapping
  5. Nest_3_VoteFactory里面的changmapping 这样最基本的框架就建立了。

简单的测试说明(只是参考)

参数修改

  1. 启动可以报价的token Nest_3_OfferMain 的changeTokenAllow 需要填入一个erc20币的地址,我们这里填nest的 0x7e3898454bdd388e48123be8152f1889b5de6989,true

减少报价的eth。 Nest_3_OfferMain 的changeLeastEth,填入1(太小了报错)

  1. 提问:新的问题,生成的币究竟从哪里来的,不能直接从管理员账号里面转的吧。 给Nest_3_MiningContract(nest.v3.miningSave) 0xdb3c8b71b012fdbaabc2968d54b939e34e687154 发了123万做测试。 用Nest_3_MiningContract的checkNestBalance测试成功。 然后转出来成功。 Nest_3_MiningContract(nest.v3.miningSave)里面的takeounest。 Nest_3_OfferMain 修改changeDeviationFromScale为1,这样就是一倍即可。

Nest_3_OfferMain的offer运行三要素

目前为止,gas溢出有过三种情况:第一种是Nest_3_OfferMain的offer;第二种是Nest_3_MiningContract的tenout,当里面没有币的时候;第三种是nest.v3.offerPrice,activation()激活合约,当用token,appove1万过去后,就能正常开始了。 Nest_3_OfferMain的offer运行三要素:(考虑是否还需要appove1万过去)

  1. 重新编译的,_leastEth1个eth,_offerSpan1个eth,_deviationFromScale = 1,(手续费默认自动变为0.01)
  2. 设置智能合约,changeTokenAllow,0x7e3898454bdd388e48123be8152f1889b5de6989,true。(任何erc20都可以)
  3. 最上面的wei设置为1.1x10^18wei(要给够,不然会报错)
  4. gas要正常设置,
  5. offer里面填1000000000000000000,10000000000000000000,0x7e3898454bdd388e48123be8152f1889b5de6989,代表了一个eth,10个nest,还有nest的地址。 Ps:在这4个条件下如果还有问题说明网络不好。 付出的取回:
  6. 用toaddress,从0开始输入,然后得到的一串0后面跟着从0开始,然后复制到trunout里面去(完整复制)
  7. 不管谁去运行,都是返回到所有者手里。

挖矿参数分析

我们分享一下每次挖矿的情况,总量100亿,分60亿,剩下40亿。十年大概是22亿,还剩下18亿。之后一年7000万。 因此修改如下:总量调整到100亿(几乎不用改数据,而且看着很多),分发60亿,一个月发送一次,共十次发完(这样的优点就是每次数量都一样)。剩下40%(40亿),5%留着做交易所资金盘,5%用于空投,剩下30%,第一年大概发6.7亿,以后逐次递减。

修改内容

  1. nest和nn的token币名改一下(函数名不改)
  2. Nest_3_MiningContract里面的_firstBlockNum改为block.number(表示是最新的块)
  3. Nest_3_OfferMain的三个值修改_leastEth1个eth,_offerSpan1个eth,_deviationFromScale = 2(大部分偏移资产规模,则为2倍,这样的话,吃单也是两倍,统一了。)

注意事项

  1. Nest_3_OfferMain的offer和turnout是重点
  2. Nest_3_MiningContract需要转账大量的币过去(第一年每个月大概需要6千万)

主要功能

  1. Nest_3_OfferMain的offer和turnout(固定的erc20报价系统,这个系统可扩充为很多erc20,而不需要什么ntoken)。Nest_3_OfferMain验证函数(固定的erc20验证系统)
  2. Nest_3_TokenAbonus的存取与收益(系统分红收益,eth分红)(根据存了多少nest,来看获得多少eth,而eth来自挖矿的eth手续费)
  3. Nest_3_MiningContract需要按时转币(矿池说明);Nn的分红(nest分红15%);开发者分红(默认,nest分红5%)

本系列的总结

从nest2.0到nest3.0总共10篇文章,主要是我在做蜂巢智能,关于预言机部分的一些研究的笔记。 其中做预言机的研究,推荐用nets2.0源码,理由是比较简单容易懂;如果做克隆和移植,推荐用3.0,比较完整。另外最新的还没有出来的4.0我也是比较期待的。 之后我将继续分析蜂巢智能的其他部分内容,敬请期待。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
问答区块链
问答区块链
致力于人工智能与区块链相结合下的智能设备自治