售前客服二维码
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!
默克尔证明检查站
节省时间和空间
例如,此Merkel树由四个事务组成,从A到B.每个事务首先进行哈希处理以生成哈希(A),哈希(B)等。然后,哈希(A)和哈希(B)被一起散列以产生树的另一层:哈希(哈希(A)+哈希(B))。在树的右侧,交易C和D也是如此。
因此,本例中的最终默克尔根哈希如下:哈希(哈希(H)+哈希(B))+哈希(哈希(C)+哈希(D))
由于这个树的构造是递归的,我们实际上可以使用这个根哈希和Merkel路径来创建一个证书,该证书可用于验证给定块的任何给定事务。
例如。:
如果用户想要使用节点来验证事务K是否在此块中,则该节点仅需要保留块Meckelgen的列表。用户将提供(a)公司的区号,(b)交易K和(c)Merkel认证。
默克尔的证明包括Hash(K),Hash(L),Hash(IJ),Hash(MNOP)和Hash(ABCDEFGH)。节点可以从证明中计算丢失的哈希(KL),哈希(IJKL)和哈希(IJKLMNOP)。生成的块的根哈希值应与文件上的根哈希值匹配。
我们可以看到这里保存的空间:
为什么这么重要?
通过使用Merkel根哈希,我们可以将区块链“备份”到另一个链,而无需复制其整个事务数据库。这意味着在存储方面,我们可以在以太坊主网络上保存PlasmaChain的整个历史记录的摘要。
PlasmaChain oracle会定期将这些摘要提交给EPC - 自上次摘要以来,所有新块都有一组Merkel根。以太坊主网络上的这个智能合约(EPC)可用于保护PlasmaChain。
等离子出口
要从PlasmaChain撤回其令牌,用户可以直接与以太坊主网络上的EPC交互,并提交Merkel证书以表明他们是令牌的当前所有者。
然后,他们进入“挑战等待期”,在此期间,任何人都可以提供证据,证明提取令牌的人不是这些令牌的有效所有者。
在此等待期结束后,用户的令牌将在以太坊主网络上可用。
等离子现金CLI
好吧,让我们再深入一点,然后尝试使用Loom发布的新的Plasma Cash CLI。
你可以在这里查看源代码:https://github.com/loomnetwork/plasma-cli
此CLI工具以npm包的形式提供,因此我们可以使用以下命令安装它:$ npm install -g plasma-cli
如果您在执行此步骤时遇到问题,可能需要确保使用的是Node v10.9.x.
在使用plasma-cli之前,我们需要使用正确的参数创建config.json文件。您可以通过从命令行传递所有这些参数来使用这些命令,但我强烈建议将它们定义为配置文件以便于使用。
合适的json对象将包含以下字段:
{>
'ethPrivateKey':'',
'dappchainPrivateKey':'',
'plasmaAddress':'',
'startBlock':'',
'ethUrl':'',
'ethEventsUrl':'',
'dapphainUrl':'',
'contractName':'',
'dbPath':''
}
让我们分析每一行的含义。
ethPrivateKey: 与您的以太坊帐户关联的私钥。
dappchainPrivateKey: 与您的Loom侧链(即本例中为PlasmaChain)帐户关联的私钥。
plasmaAddress: 您连接的任何以太坊链上的以太坊等离子现金合约地址。如果连接到Rinkeby,则EPC地址为 0xd028e13a0b37e4b758b003a793cb6f0f6531ba75。
startBlock: 部署EPC的块。这用于事件过滤,因此程序只会查看其后的块。
Eth-url: 以太坊节点的URL。默认情况下,本地以太坊节点的URL为http://localhost: 8545.我建议创建一个免费的Infura.io帐户以获取简单的API URL(例如https://rinkeby.infura.io/v3/{YOUR_PROJECT_ID})。
ethEventsUrl: 以太坊事件的URL。这是一个WebSocket(与eth-url HTTP URL不同),它比多个HTTP请求更有效地传输数据,并且总体开销较低。如果您已连接到Rinkeby,请尝试使用 wss: //rinkeby.infura.io/ws。
dappchainUrl: 要与之交互的Loom侧链节点URL。对于PlasmaChain测试网络(extdev),URL为http://test-z-asia1.dappchains.com。
contractName: 这不是必需的,它只会为您提供与您交互的合同的名称; plasmacash应该工作。
dbPath: 这是一个易于访问本地存储数据的路径;对于这个字段,/tmp /pcashDB.jsob就足够了。
使用CLI传输
准备好配置文件后,我们可以使用以下命令启动Plasma Cash CLI工具:: $ plasma-cli --config config.json
您将收到一个空提醒。通常,它只是意味着它初始化CLI工具并准备好接收命令。尝试帮助并获取此新提示将接受的命令列表。
如果我们输入myCoins,我们应该看到[]提醒我们目前没有存款。然后我们在合同中存入了1000000000000,000 Wei(约0.001 ETH),将其变成我们可以在PlasmaChain上使用的货币。
注意:为此,您需要在Rinkeby帐户中使用ETH;否则,您将收到资金不足的错误消息。
$ depositETH 1000000000000000
确认交易大约需要30秒,你最终应该看到这样的事情:
请注意,这是两个命令的输出:
depositETH,然后是myCoins,我使用这两个命令来验证我的货币是否正确存入。输出将具有许多< BN: x>,其表示以BigNumber格式编码的大整数(基于以太坊的交互标准)。实际上,我们只需要担心第一行,插槽:< BN: 967 ...>此号码是您的硬币ID,您将用它来转移或退出货币。
由于Plasma Cash的工作方式,当您将Wei转换为Plasma Cash令牌时,令牌代表Wei的全部价值,无法进一步拆分或合并(此功能正在开发中,将来可用)。所以现在你有一个价值0.001 ETH的硬币可供使用。您不能在某处使用0.0005 ETH或将两个0.001 ETH硬币合并为一个0.002 ETH。您必须退出并重新保存才能获得具有不同值的令牌。
如果您尝试转移ERC20或ERC721令牌,则流程相同,但您还需要提供令牌合同的地址:depositERC20< address> <量GT;或 depositERC721< address> < coinId取代。 <地址>字段将是令牌合同的地址。
要将您的货币转移给其他人,您可以使用:
转移< coinId> < newOwner>,在我们的例子中,我们的0.001 ETH硬币是coinId: 96726d ...如输出的插槽字段所示。
这种货币的接收者 - 在他们的CLI上 - 然后应该呼叫接收< coinId>确认货币的所有权。如果他们不这样做,货币仍将被列为发件人所有。
要从等离子现金系统中提取您的货币,您需要退出并最终获得货币。
退出并最终得到一枚硬币
首先,我们需要调用exitCoin< coinId>开始退出。客户将通过向您收取质疑存款来启动退出。在挑战期间收到押金作为停止错误退出的奖励。在此期间,货币的“状态”(如果您通过< coinId>或myCoins获得货币信息)为1,表示货币处于具有挑战性的时期。
在挑战期结束后,我们可以最终确定< coinId>在货币上,将其置于状态2,准备将其取出。然后输入withdraw< coinId>并提取债券以提取硬币并返还您存入的所有资金。
就这么简单!
希望通过Plasma CLI使用Plasma Cash的介绍对您有用。如果您遇到任何问题,请通过电报加入Loom SDK聊天室:https://t.me/LoomSDK,大家将很乐意为您提供帮助。
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!