JCCDex / ProjectFundingProposal

Jingtum & MOAC Project Funding Proposal
28 stars 8 forks source link

PFP19 关于墨客锁仓DAPP开发 #20

Closed AnFengDe closed 5 years ago

AnFengDe commented 5 years ago

墨客共识社区提出锁仓要求,根据各种讨论,建议做多签名钱包,原因主要是社区对于锁仓规则没有确定,争论很大,但是对于资金处于某种逻辑下的共管没有争议。

大体功能性需求如下

补充性说明

开发需要的资源

AnFengDe commented 5 years ago

关于多签名钱包,涉及到的相关资料链接

  1. Ethereum typed structured data hashing and signing
  2. MultiSigWallet Contract
  3. Simple Multisig Contract
  4. Standard API for multisig wallet smart contracts

简单归纳一下,多签名钱包在类以太的环境下都是合约形式,Mist也是用合约支持多重签名钱包, Ethereum typed structured data hashing and signing是对结构化数据进行签名形成特定的签名数据,2和3是具体的多签名钱包的实现代码,可以参考。Standard API for multisig wallet smart contracts提出了多签名钱包合约的一般性指导建议,和我们锁仓需求相比,这个建议比较接近我们的需求,但是不完全一样。

墨客的锁仓需求应该是存款和提现数据能一一对应,也就是说提现不能超过当初自己存款的总额,只是这个提现是否成立,需要多人投票来决定。

对于释放的规则来说,可能是币价,可能是时间,可能是某个公认的重大事件,这些作为合约来说,无法检测到外部条件变化,应该是当事人发起提案后,投票决定。

我相信还有其他类型的锁仓,锁仓的资产成为贷款,有可能有抵押物,也有可能没有,合约中的数据作为某个商业合同的依据,这些不在我们的考虑范围之内,我们只考虑当前墨客的锁仓基本锁仓要求。

AnFengDe commented 5 years ago

工作量估计:

合约编写

  1. 支持创建新的多签名合约钱包,支持多签名钱包命名
  2. 支持初始设定投票人和投票规则
  3. 支持查询罗列投票人和存款人钱包地址
  4. 支持以投票方式更换投票人,一次更换一个,应对社区要求更换和投票人丢失密钥的情况
  5. 支持用户存款,并记录,只有存款人才有权力发起提现提案,额度不超过自己存款
  6. 支持投票人进行投票,根据规则批准提案后,转出资金
  7. 取消创建者删除合约功能,避免因此转移资金
  8. 更进一步,支持MOAC和ERC20 Token的锁仓

另外需要一个合约,专门记录多签名钱包和关联钱包的映射关系,便于DAPP读取数据。

以上估计7个工作日

DAPP前端开发

  1. 创建多签名钱包合约画面
  2. 导入多签名钱包合约画面
  3. 设置投票人和投票规则
  4. 变更投票人
  5. 转账存款
  6. 发起提案
  7. 显示提案列表和投票
  8. 显示和自己钱包关联的多签名钱包
  9. 显示多签名钱包流水记录 估计20-25个工作日,其中UI设计约5个工作日

DAPP和钱包的对接调试

估计2-3个工作日一个APP,默认上TP一个

以上一共35个工作日

dragonfly2017 commented 5 years ago

我大体看了一下所列的的需求,个人的感觉这个需求更多的是一个解决方案(solution),更恰当的是用于和技术人员做技术做沟通,而不是和终端客户商定用户需求(business requirement)。几个问题如下:

  1. 第一段里提到社区对锁仓的规则没有确定,这个规则是根本性的需求,这是个大问题。 2). 创建多签名钱包,这直接跳到solution了,这不是用户需求(business requirements). 如果用户需求已经很清楚,那么这个解决方案是去满足用户需求的,并且是要和开发人员去解释如何做,这种方式是可以的。但把它放到社区来讨论,更多的应当是来给用户需求提反馈(business requirment review),所以这种表述太技术化,不容易理解。

我个人的猜测估计这是一个偏重技术的朋友写的,其实应当由一个BA来定用户需求更恰当一些。

Johnnydazhihao commented 5 years ago

关于锁仓的释放条件,提一下我的意见:

  1. 到约定时间
  2. 到设定价格指标(提供周线、月线等指标)
  3. 申请解锁人,提出诉求,由社区投票解锁
maxwu1985 commented 5 years ago

我希望把这个设计成一个通用性的锁仓软件,甚至成为一种基础工具。这样的话就需要考虑 首先是触发这个工具的条件,比如可能会参与锁仓的群体先进行一轮投票,投票结果在链上公示

maxwu1985 commented 5 years ago

后面解锁后的提款数量应该按照一开始的锁仓协议来,有可能会大于锁仓量,这也是一种激励方式

maxwu1985 commented 5 years ago

解锁的触发条件需要适当考虑到当前的成交量

maxwu1985 commented 5 years ago

软件的设计最好能留下以后可以挂接其他应用程序的接口,比如群里说的赌约,当然还是要考虑好锁仓合约的安全性问题,不能留下安全隐患

maxwu1985 commented 5 years ago

搞得好了我觉得可以把这个变成墨客的一条子链,方便以后调用

wei-lianjie commented 5 years ago

终于注册好了,先理一下个人对锁仓的认识,如有不正确的及时指出,方便后面提出可行的具体方案: 锁仓目的:防止币价被恶意操纵,影响项目稳定发展,同时也为长期看好项目的持币人提供一个获取稳定收益的途径。 提案:可提出锁仓方案的人员,包括各相关方,如项目方、持币人、社区人员及其他关注本项目的人员,根据自己对项目目前状况和前景的理解,提出锁仓方案供社区讨论是否使用,包括技术上能否实现等,通过的提案可获得一定的奖励,这个过程可以在微信群内实现。 投票:通过的提案经整理后,进行下一步的投票环节,持仓量达到一定要求的持仓人可以对锁仓提案进行投票,投票之前有一个对投票资格的确认程序,如投票人输入自己的地址,程序监测到该地址有相应额度的币才能进行下一步的投票,达到一定数量赞成票的提案正式成为锁仓方案,社区组织技术对锁仓方案编程,写入锁仓程序的方案库供持币人选择参与。 锁仓:满足锁仓条件的持币人,在锁仓库中选择符合自己期望的锁仓方案,点击确认,将锁仓要求的币转入锁仓地址(不知道能否实现点击确定后就进行转币界面,方便操作),智能合约监测到方案被确认和转币成功两个条件都满足后,正式生效。 解锁:智能合约自动监测解锁条件是否满足,一旦满足,启动解锁过程,锁仓的币自动转回锁仓人预先填好的地址(这个过程需要智能合约对锁仓地址进行转账操作不知道是否好实现)。 接下来就是对锁仓方案的认识: 锁仓方案:对锁仓额度、时间、激励、解锁条件进行规定的一组规则,方便写成智能合约,可在链上自动执行。 锁仓激励: 时间激励:按锁仓实际完成的时间给与利息激励,高于稳定理财方式如银行存款的收益。 额度激励:不同额度的激励收益有差异,鼓励进行大额度锁仓。 负激励:锁仓人因个人原因希望在未满足解锁条件时解锁的,给予扣除一定比例锁仓币的负激励,方便急于兑现的持币人套现,但同时接受了相应的惩罚。

解锁条件: 时间:以单一的时间跨度作为解锁条件,时间跨度满足后自动解锁,锁仓币自动原路转回。 币价:以规则中约定好的某几家交易所连续几天或更长时间的收盘价为监测对象,达到约定币价后解锁。 锁仓人主动要求:锁仓人打开锁仓小程序后,提交提前解锁要求,系统提示提前解锁造成的损失,锁仓人确认损失后,自动解锁。

AnFengDe commented 5 years ago

@wei-lianjie @maxwu1985 @Johnnydazhihao 统一回复一下几个误区

我们的解决方案很简单,多签名钱包,投票机制,至于为什么投票,释放多少的逻辑,你们在社区里面吵架吧,用投票权表达自己就好。

product-project commented 5 years ago

有些地方没看明白 1.‘支持投票M-N规则设定’具体含义意思是什么? 是指创建多签名钱包时,N个公钥,需要>=M个私钥才能转移资金。 还是指创建多签名钱包后,N票中,需要>=M票才能转移资金。

2.‘支持通过初始设定投票人’,这个投票人是通过什么机制确定的?是由多签名钱包的创建者指定的,还是什么其他机制?难道不是所有参与锁仓者就是投票人吗?如果不是的话,那么是否意味着‘多签名钱包参与签名者’、‘投票人’、‘参与锁仓者’这3者并不是重合的?

3.‘支持用户充值’是否就是用户可以将自己的资金转入多签名钱包,从而参与锁仓计划。参与锁仓后是否自动拥有投票权?如果这个用户并非当初多签名钱包参与签名的人,那么他的投票权如何行使?在我的理解中,投票权就体现在多签名钱包参与签名。 如果我的理解正确,那么是否一个没有参与多签名钱包签名的用户在充值的同时,要对原本的多签名钱包增加自己的签名。这就要求多签名钱包在生成后可以增加或删除签名参与钱包。 如果我的理解不正确,那么是否说明多签名钱包参与签名者只是该钱包的保管者,帮锁仓参与者保管资金而已。当投票人投票决定转移资金时,要求保管者提供私钥来开启多签名钱包。

AnFengDe commented 5 years ago

有些地方没看明白 1.‘支持投票M-N规则设定’具体含义意思是什么? 是指创建多签名钱包时,N个公钥,需要>=M个私钥才能转移资金。 还是指创建多签名钱包后,N票中,需要>=M票才能转移资金。 M个持有人,需要N票以上才能执行

2.‘支持通过初始设定投票人’,这个投票人是通过什么机制确定的?是由多签名钱包的创建者指定的,还是什么其他机制?难道不是所有参与锁仓者就是投票人吗?如果不是的话,那么是否意味着‘多签名钱包参与签名者’、‘投票人’、‘参与锁仓者’这3者并不是重合的? 钱包创建者是一个人,投票人是创建人设定的,一旦设定,权力转移到所有投票人,按照M-N规则决定行为 锁仓的可以不是投票人,也可以是 参与签名的都是投票人

3.‘支持用户充值’是否就是用户可以将自己的资金转入多签名钱包,从而参与锁仓计划。参与锁仓后是否自动拥有投票权?如果这个用户并非当初多签名钱包参与签名的人,那么他的投票权如何行使?在我的理解中,投票权就体现在多签名钱包参与签名。 锁仓和投票权不一定重合,可以不重合,锁仓人只有提议发起权力,是否调动资金看投票结果

如果我的理解正确,那么是否一个没有参与多签名钱包签名的用户在充值的同时,要对原本的多签名钱包增加自己的签名。这就要求多签名钱包在生成后可以增加或删除签名参与钱包。 如果我的理解不正确,那么是否说明多签名钱包参与签名者只是该钱包的保管者,帮锁仓参与者保管资金而已。当投票人投票决定转移资金时,要求保管者提供私钥来开启多签名钱包。

AnFengDe commented 5 years ago

版本库位置 目前代码在各自开发分支上 交互设计原型

GinMu commented 5 years ago

已部署在MOAC测试链, DAPP地址:https://test-multisig.jccdex.cn/

lospringliu commented 5 years ago

@GinMu , 这个是需要在开发社区中找测试 还是 墨客社区就可以测试? 需要有个简单的说明供测试参照

GinMu commented 5 years ago

@lospringliu 墨客社区可以测试. 说明的话主要两点:

  1. 需要测试币,要么自己在水龙头领,要么找我们
  2. 测试期间需要在TokenPocket 中 我的->系统设置->节点设置 添加自定义节点,将默认节点设置为测试节点https://mtnode1.jccdex.cn,也可以是其他测试节点,必须是https协议

今天社区里发现了一个问题,在安卓上签名有问题,目前没法测试锁仓,申请投票人等涉及到交易的操作,ios没问题。这个问题已经反馈给tp了。

AnFengDe commented 5 years ago

第一次支付50% 第二次支付25% 第三次支付25%

GinMu commented 5 years ago

已完成100%,正在测试链公测 @zhinan