Giter Site home page Giter Site logo

palletone / go-palletone Goto Github PK

View Code? Open in Web Editor NEW
87.0 87.0 24.0 248.33 MB

Official Go implementation of PalletOne

Home Page: https://pallet.one

License: GNU General Public License v3.0

Makefile 0.06% Go 85.61% Shell 1.20% NSIS 0.20% Ruby 0.01% JavaScript 4.52% Dockerfile 0.06% RobotFramework 7.57% Python 0.56% Solidity 0.21%
blockchain crosschain go palletone

go-palletone's People

Contributors

elva1087 avatar etying avatar fjowiejg avatar ggq89 avatar guo-li-hua avatar lk2684753 avatar palletonedev avatar palletprotocol avatar sailinst avatar shuizhongmose avatar studyzy avatar wangjiyou avatar wanglg007 avatar wzhyuan avatar yira97 avatar zxlwdgithub avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-palletone's Issues

多链分区环境,主链与子链能够实现存证数据的跨链验证

摘要

当存在主链PTN和子链ABC时,用户A在子链上存证了文件Hash1,通过跨链验证功能,任何人都可以在主链上证明A用户确实存证了Hash1。同理,用户B在主链存证了文件Hash2,通过跨链验证功能,其ABC子链也能验证Hash2被存证。

动机

实现存证数据的跨链验证。无论是主链上存证的数据,还是子链存证的数据,在对方链上都能验证其合法性。

详细说明

无论主链还是子链,都有一个系统合约:分区合约PartitionSYSContract。主链PTN的该合约中,注册了一个子链ABC。子链ABC的该合约中,注册了一个主链PTN。相互注册成功后,主链所有全节点会同步子链ABC的区块头,子链ABC的全节点也会同步主链PTN的区块头。
存证的几个核心要素:存证人,存证内容,存证时间戳,存证证明(TxHash)
分区合约除了是一个主链子链的注册合约,也提供了SPV验证的功能。

在ABC子链存证,在PTN主链验证的过程

假设用户A在子链ABC上有100个ABC Token,现在需要将其跨链转移到PTN主链上,操作如下:

  1. 在ABC子链,用户A发起存证交易,存证了文件Hash1,并获得该交易的ID:TxHash1。
  2. 在ABC子链,用户A通过命令查询到TxHash1对的SPV所需数据:区块Hash,SPV验证路径,Tx完整内容。
  3. 在PTN主链,用户A发起合约查询请求,调用分区合约的“SPV验证”函数,同时传入参数:区块Hash,SPV验证路径,Tx完整内容。
  4. 在PTN主链, 用户A的合约查询被对应的全节点执行,通过SPV验证,可以确认用户A提供的Tx是否是被打包,然后通过解析Tx,可以获得:存证人地址,存证的内容,存证证明(TxHash);而通过区块Hash,查询区块头数据,可以获得:存证时间戳
    现在,存证的核心要素都通过该合约查询返回。

参考

  • 跨链技术:侧链中继模式。
  • SPV简单支付验证

Private chain cannot produce units.

I build and configure private chain follow the wiki. But gptn server cannot produce units and show this log:
2020-04-01T15:03:53.000+0800 info mediatorplugin/mediator_plugin.go:109 Not producing unit because production is disabled until we receive a recent unit. Disable this check with --staleProduce option.

Could you please help me solve this problem?

无法通过rpc调用进行广播

我们在开发过程中发现调用wallet_sendRawTransaction rpc方法和wallet_sendRlpTransaction方法都无法广播交易,错误码:32021: borad transaction had be changed. 在全节点上手动调用这两个方法都可以成功广播。这个问题在测试网络和主网都存在。请问该如何解决这个问题?

从DPOS升级到POW+DPOS混合共识

摘要

升级目前的共识机制,支持POW和DPOS混合共识。

动机

【1】让目前不持有足够Token节点和广大追随者,爱好者都能够参与到PalletOne的Token生产中来 ,并且能够获得收益。
【2】DPOS强节点相当于参议院,POW众多分散节点充当众议院角色,普通矿工和代币持有者拥有平等话语权。

详细说明

【1】DPoS可能被认为是部分中心化的,在某种意义上,它可能会削弱区块链的一个关键优势。
【2】混合共识方法也被称为活动量证明,它是两种共识方法的合并。实施一种混合共识机制,这种机制分为工作量证明和权益证明
【3】这种混合的共识方法为所有矿工(工作量证明法支持者)和代币持有人(权益证明法支持者)提供了赢得区块的平等机会。矿工可以通过增加工作量来提升赢得区块的机会,代币持有者也可以通过持有更多代币来增加他们(赢得区块)的机会。 每个群体都有50%的机会获胜。
【4】一旦区块被挖出来,该过程就会重新开始。 实现中,没有固定的顺序,其中任何一个群体都可以挖矿。平均50%的区块将由DPoS挖出,50%将由PoW挖出,但一个区块的后续区块可以由任意一种方法被挖出来。

参考

UnitedBitcoin(UBTC比特联储)
TRUE

多链分区环境,主链与子链能够实现Token的跨链转移

摘要

当存在主链PTN和子链ABC时,用户A在子链上有一定量的ABC,通过Token跨链转移功能,A用户可以将其ABC Token转移到主链上,然后在主链进行其他操作。用户B在主链获得了一定量的ABC,通过Token跨链转移功能,其ABC可以转移到子链上,然后在子链对Token进行其他操作。

动机

实现Token的跨链转移。无论是主链的Token转移到子链,还是子链的Token转移到主链,都可以实现。

详细说明

无论主链还是子链,都有一个系统合约:分区合约PartitionSYSContract。主链PTN的该合约中,注册了一个子链ABC。子链ABC的该合约中,注册了一个主链PTN。相互注册成功后,主链所有全节点会同步子链ABC的区块头,子链ABC的全节点也会同步主链PTN的区块头。
分区合约除了是一个主链子链的注册合约,也是一个Token跨链的锁定合约。

Token从ABC子链转移到PTN主链的过程

假设用户A在子链ABC上有100个ABC Token,现在需要将其跨链转移到PTN主链上,操作如下:

  1. 在ABC子链,用户A将100 ABC转移到分区合约,并获得该交易的ID:TxHash1。
  2. 在ABC子链,用户A通过命令查询到TxHash1对的SPV所需数据:区块Hash,SPV验证路径,Tx完整内容。
  3. 在PTN主链,用户A发起合约调用请求,调用分区合约的“跨链提取Token”函数,同时传入参数:区块Hash,SPV验证路径,Tx完整内容。
  4. 在PTN主链,用户A的请求在打包时被执行,Mediator会通过SPV验证用户Tx是否在ABC子链被打包,同时也验证用户A转移到分区合约的TokenID,数量,用户A的地址等;并最终创建新的100个ABC Token,并付出到用户A的地址。另外该合约也会更新状态,将该TxHash1标记为已跨链转移完成,防止用户发起重放攻击。
  5. 在PTN主链,用户A查询余额,发现收到了100 ABC,跨链转移Token完成。

Token从PTN主链转移回ABC子链的过程

现在用户B在主链PTN上获得了100个 ABC Token,他需要将他们转移到ABC子链上,操作如下:

  1. 在PTN主链,用户B将100 ABC转移到分区合约,并获得该交易的ID:TxHash2。
  2. 在PTN主链,用户B通过命令查询到TxHash2对的SPV所需数据:区块Hash,SPV验证路径,Tx完整内容。
  3. 在ABC子链,用户B发起合约调用请求,调用分区合约的“跨链提取Token”函数,同时传入参数:区块Hash,SPV验证路径,Tx完整内容。
  4. 在ABC子链,用户B的请求在打包时被执行,Mediator会通过SPV验证用户Tx是否在PTN主链被打包,同时也验证用户B转移到分区合约的TokenID,数量,用户B的地址等;
    由于分区合约的余额上有现成的100ABC Token,所以并不需要创建新的ABC Token,直接从合约付出到用户B的地址。
    另外该合约也会更新状态,将该TxHash2标记为已跨链转移完成,防止用户发起重放攻击。
  5. 在ABC子链,用户B查询余额,发现收到了100 ABC,跨链转移Token完成。

参考

  • 跨链技术:侧链中继模式。
  • SPV简单支付验证

定时任务的支持

摘要

建立新的定时任务系统合约,用户通过crontab语法格式设置定时任务。定时任务触发时,能够进行转账或者调用合约。

动机

让PalletOne支持定时任务,而不是通过外部账户来触发交易。

详细说明

建立一个全新的系统合约,ScheduleContract。在该合约中,具有:设置定时任务、启用定时任务、停止定时任务、销毁定时任务这几个功能函数。另外还有查询定时任务内容、查询任务历史执行情况等查询函数。

设置定时任务

设置定时任务主要包含2个重要参数:Schedule表达式、任务内容。Schedule表达式参考Cron的表示方式,唯一不同的是在区块链中不能精确到具体哪一秒执行任务,而是在指定时间之后下一个产块时包含任务。另外一种表达方式就不是绝对的时间,而是采用高度来表示,比如:高度值是1000的整倍数,即每1000个块执行一次任务。
任务内容分为:转账、合约调用两种。转账可以指定收款方、金额、资产ID,而且是一个数组,也就是说可以执行多个收款人的转账。合约调用需要指定合约地址、函数名、函数参数,以及调用合约时转移到合约上的TokenID和数量。

停止定时任务

停止定时任务只是将任务的状态改为停止,接下来到了指定的时间段不会触发该任务。

启用定时任务

如果任务已经被停止,那么可以通过启动定时任务函数将任务的状态又改回活动状态,下一次到时间点时将触发该任务。

销毁定时任务

表示这个定时任务再也不用了,需要彻底删除,同时将其中的Token回收回来。

参考

PalletOne去中心化数字身份实现方案

摘要

本方案是PalletOne Layer-2的改进方案,该方案为PalletOne提供更丰富的数字身份实现机制。

动机

目前PalletOne联盟链支持基于CA的数字身份管理,但是该方式下用户的身份无法自主可控。本方案提出的基于去中心化的数字身份方案可以将DPKI技术与区块链技术结合,实现PalletOne的去中心化数字身份服务。

详细说明

PalletOne的去中心化数字身份包括PalletOne DID声明、PalletOne可验证声明、PalletOne Sidetree协议以及零知识证明。
DID、可验证声明和Sidetree协议的基本定义参考:https://github.com/palletone/palletone-DID。

参考

[Sidetree Protocol

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.