看本节之前,建议从我的主页中把nest2.0的四篇文章,和《nest3.0从架构解析到克隆》的前五篇都看一下。本节讲的是如何进行简单的克隆和移植。
因为我的笔记都是去年6到8月份之前陆续写的,所以很多内容不太完整。大家只能说凑合看。
返回总章
前言
看本节之前,建议从我的主页中把nest2.0的四篇文章,和《nest3.0从架构解析到克隆》的前五篇都看一下。
本节讲的是如何进行简单的克隆和移植。
因为我的笔记都是去年6到8月份之前陆续写的,所以很多内容不太完整。
大家只能说凑合看。后期如果我重新做的话,可能会做大部分的修改,但目前并没有这个打算。
再次强调一些,本节的内容看起来似乎很混乱,但确实是当初克隆的笔记,而且也成功运行了。
克隆
第一大部分
两个token加上mapingo:p
- 建立token
校验不通过是两个原因:
首先是我们会默认输入两次eth,这不是bug,而是IterableMapping会生成一个地址,然后nesttoken还会生成一个地址。这使得我们在nestoken合约校验的时候lib部分要把IterableMapping和对应的地址放进去。以后遇到这种情况一定要多观察remix下面的命令行。
其次,还有几种,就是:1.编译的版本应该跟源码里面第一行的版本对应上,2.同时选择优化或者不优化,3.安装合约的时候一定要看清楚名字,4.遇到反复不成功的考虑重启谷歌游览器。
- (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优化值,其余都没有,一次性成功!!!
- 将所有的contract IBMapping,以及IBMapping,改为Nest_3_VoteFactoryo:p
涉及到的文件有:SuperMan.sol,NEST_NodeSave.sol,NEST_NodeAssignmentData.sol,NEST_NodeAssignment.sol
- 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分红有关,暂时也不考虑。
- 建立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(已设置)
- nest.v3.offerMain将其伪地址(0x01)传输给voteFactory 的mapping(nest.v3.offerMain),(已完毕)。
- 然后建立[Nest_3_MiningContract](),然后传输给voteFactory 的mapping[(nest.v3.miningSave)]()(已完毕)
- 等Nest_3_OfferMain生成后(需要nest.v3.miningSave的地址),将其地址传输给voteFactory 的mapping(nest.v3.offerMain);(未进行)
- 最后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
- 目前就差一个Nest_3_OfferPrice(nest.v3.offerPrice)就能完事了,我们设置其为0x01,然后编译Nest_3_OfferMain
- 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,及其附属的三个合约。
因为我们不提取分红,所以这三个合约先不做。
移植的部分说明
- 制作tokeno:p
改名:NEST两个改名,一个叫sensoracle,一个叫SO。
- Nest_3_VoteFactory里面的Nest_3_VoteFactory
- SuperMan里面的SuperMan,两个名字,一个叫snode,一个叫SN
- Nest_3_VoteFactory里面增加nestNode(对应snode),nest.v3.destruction(销毁地址),nest(SN),然后changemapping
- Nest_3_VoteFactory里面的changmapping
这样最基本的框架就建立了。
简单的测试说明(只是参考)
参数修改
- 启动可以报价的token
Nest_3_OfferMain 的changeTokenAllow
需要填入一个erc20币的地址,我们这里填nest的
0x7e3898454bdd388e48123be8152f1889b5de6989,true
-
减少报价的eth。
Nest_3_OfferMain 的changeLeastEth,填入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万过去)
- 重新编译的,_leastEth1个eth,_offerSpan1个eth,_deviationFromScale = 1,(手续费默认自动变为0.01)
- 设置智能合约,changeTokenAllow,0x7e3898454bdd388e48123be8152f1889b5de6989,true。(任何erc20都可以)
- 最上面的wei设置为1.1x10^18wei(要给够,不然会报错)
- gas要正常设置,
- offer里面填1000000000000000000,10000000000000000000,0x7e3898454bdd388e48123be8152f1889b5de6989,代表了一个eth,10个nest,还有nest的地址。
Ps:在这4个条件下如果还有问题说明网络不好。
付出的取回:
- 用toaddress,从0开始输入,然后得到的一串0后面跟着从0开始,然后复制到trunout里面去(完整复制)
- 不管谁去运行,都是返回到所有者手里。
挖矿参数分析
我们分享一下每次挖矿的情况,总量100亿,分60亿,剩下40亿。十年大概是22亿,还剩下18亿。之后一年7000万。
因此修改如下:总量调整到100亿(几乎不用改数据,而且看着很多),分发60亿,一个月发送一次,共十次发完(这样的优点就是每次数量都一样)。剩下40%(40亿),5%留着做交易所资金盘,5%用于空投,剩下30%,第一年大概发6.7亿,以后逐次递减。
修改内容
- nest和nn的token币名改一下(函数名不改)
- Nest_3_MiningContract里面的_firstBlockNum改为block.number(表示是最新的块)
- Nest_3_OfferMain的三个值修改_leastEth1个eth,_offerSpan1个eth,_deviationFromScale = 2(大部分偏移资产规模,则为2倍,这样的话,吃单也是两倍,统一了。)
注意事项
- Nest_3_OfferMain的offer和turnout是重点
- Nest_3_MiningContract需要转账大量的币过去(第一年每个月大概需要6千万)
主要功能
- Nest_3_OfferMain的offer和turnout(固定的erc20报价系统,这个系统可扩充为很多erc20,而不需要什么ntoken)。Nest_3_OfferMain验证函数(固定的erc20验证系统)
- Nest_3_TokenAbonus的存取与收益(系统分红收益,eth分红)(根据存了多少nest,来看获得多少eth,而eth来自挖矿的eth手续费)
- Nest_3_MiningContract需要按时转币(矿池说明);Nn的分红(nest分红15%);开发者分红(默认,nest分红5%)
本系列的总结
从nest2.0到nest3.0总共10篇文章,主要是我在做蜂巢智能,关于预言机部分的一些研究的笔记。
其中做预言机的研究,推荐用nets2.0源码,理由是比较简单容易懂;如果做克隆和移植,推荐用3.0,比较完整。另外最新的还没有出来的4.0我也是比较期待的。
之后我将继续分析蜂巢智能的其他部分内容,敬请期待。
-
- 学分: 8
- 分类: NEST
- 标签:
预言机
智能合约