作者:freewind比原项目仓库:https://github.com/Bytom/bytom人们常说,“阅读源代码”是学习编程的一种重要方法。作为程序员,我们在平时的学习工作中,都应该阅读过不少源代码。但是对于大多数人来说,阅读的可能更多是一些代码片断、示例,或者在老师、同事的指导下,先对要阅读的项目代码有了整体的了解之后,再进行针对性的阅读。 但是如果我们面对的是一个像比原这样比较庞大的项目,身边又没有人指导,只能靠自己去看,这时应该怎么来阅读呢?也许每个人也都能找到自己的办法,或高效,或低效,或放弃。 我在这次阅读比原源代码的过程中,尝试的是这样一种方法:从外部入手,通过与比原节点进行...

作者:freewind比原项目仓库:https://github.com/Bytom/bytom最开始我对于这个问题一直有个疑惑:区块链是一个分布式的网络,那么一个节点启动后,它怎么知道去×××别的节点从而加入网络呢? 看到代码之后,我才明白,原来在代码中硬编码了一些种子地址,这样在启动的时候,可以先通过种子地址加入网络。虽然整个网络是分布式的,但是最开始还是需要一定的中心化。 预编码内容 对于配置文件config.toml,比原的代码中硬编码了配置文件内容: config/toml.goL22-L45 vardefaultConfigTmpl=`ThisisaTOMLconfigfile. ...

  kipbl9wlCWaT   2023年11月13日   29   0   0 比原链Bytom区块链Blockchain

作者:freewind比原项目仓库:https://github.com/Bytom/bytom我们知道,在使用bytomdinit--chain_idmainnet/testnet/solonet初始化比原的时候,它会根据给定的chain_id的不同,使用不同的端口(参看config/toml.goL29): mainnet(连接到主网):46657 testnet(连接到测试网):46656 solonet(本地单独节点):46658 对于我来说,由于只需要对本地运行的一个比原节点进行分析,所以可以采用第3个chain_id,即solonet。这样它启动之后,不会与其它的节点主动连接,...

  kipbl9wlCWaT   2023年11月13日   32   0   0 比原链p2pBytom区块链Blockchain

作者:freewind比原项目仓库:https://github.com/Bytom/bytom在上一篇我们已经知道了比原是如何监听节点的p2p端口,本篇就要继续在上篇中提到的问题:我们如何成功的连接上比原的节点,并且通过身份验证,以便后续继续交换数据? 在上一篇中,我们的比原节点是以solonet这个chain_id启动的,它监听的是46658端口。我们可以使用telnet连上它: $telnetlocalhost46658 Trying127.0.0.1... Connectedtolocalhost. Escapecharacteris'^]'. ט�S��%�z?��_�端��݂���...

  kipbl9wlCWaT   2023年11月13日   28   0   0 比原链p2pBytom区块链Blockchain

作者:freewind比原项目仓库:https://github.com/Bytom/bytom在前一篇中,我们已经知道如何连上一个比原节点的p2p端口,并与对方完成身份验证。此时,双方结点已经建立起来了信任,并且连接也不会断开,下一步,两者就可以继续交换数据了。 那么,我首先想到的就是,如何才能让对方把它已有的区块数据全都发给我呢? 这其实可以分为三个问题: 我需要发给它什么样的数据? 它在内部由是如何应答的呢? 我拿到数据之后,应该怎么处理? 由于这一块的逻辑还是比较复杂的,所以在本篇我们先回答第一个问题: 我们要发送什么样的数据请求,才能让比原节点把它持有的区块数据发给我? 找到发送...

  kipbl9wlCWaT   2023年11月13日   29   0   0 比原链同步Bytom区块链Blockchain

作者:freewind比原项目仓库:https://github.com/Bytom/bytom在前一篇中,我们说到,当比原向其它节点请求区块数据时,BlockKeeper会发送一个BlockRequestMessage把需要的区块height告诉对方,并把该信息对应的二进制数据放入ProtocolReactor对应的sendQueue通道中,等待发送。而具体的发送细节,由于逻辑比较复杂,所以在前一篇中并未详解,放到本篇中。 由于sendQueue是一个通道,数据放进去后,到底是由谁在什么情况下取走并发送,BlockKeeper这边是不知道的。经过我们在代码中搜索,发现只有一个类型会直接监视s...

  kipbl9wlCWaT   2023年11月13日   34   0   0 比原链p2pBytom区块链Blockchain

本文将会给大家介绍一下比原链总体的技术架构。 如下图所示:比原链分为三个层次 第一层就是大家接触比较多的钱包层,就是进行收款和打款的模块,钱包一般带操作界面,大家都可以日常使用,所以会比较熟悉。 然后就是最核心的内核层,内核可以理解为分布式系统中每个节点认同的一套规则,只有有相同的规则,两个节点才能达成一致。如果规则不同,其实就是发生分叉了。 最后一层是通信层,通信层是节点之间交换信息的方式,包含区块同步,交易同步等。 首先来看内核层,内核层主要由五个模块构成: 孤儿块管理:孤儿块就是由矿工挖出但未成为主链区块的区块(在相同高度产生2个甚至更多的合法区块,一个区块成为主链,剩下的则称为孤儿块...

  kipbl9wlCWaT   2023年11月02日   63   0   0 比原链Bytom区块链架构Blockchain

作者:freewind比原项目仓库:https://github.com/Bytom/bytom 在上一篇,我们知道了比原是如何把“请求区块数据”的信息BlockRequestMessage发送给peer节点的,那么本文研究的重点就是,当peer节点收到了这个信息,它将如何应答? 那么这个问题如果细分的话,也可以分为三个小问题: 比原节点是如何收到对方发过来的信息的? 收到BlockRequestMessage后,将会给对方发送什么样的信息? 这个信息是如何发送出去的? 我们先从第一个小问题开始。 比原节点是如何接收对方发过来的信息的? 如果我们在代码中搜索BlockRequestMess...

一、合约简述equity是bytom的一种智能合约语言,是一门声明性谓词语言。详细说明请参考官方equity合约相关介绍。 二、锁定合约流程1、合约编写合约的编写可以通过参考合约模板来进行构造,如果需要更进一步的了解,可以阅读一下合约相关的说明文档。以典型的锁定publickey合约为例,其合约代码如下: contractLockWithPublicKey(publicKey:PublicKey)lockslocked{clauseunlockWithSig(sig:Signature){verifycheckTxSig(publicKey,sig)unlocklocked}}2、编译合约编译...

  kipbl9wlCWaT   2023年11月02日   90   0   0 比原链SmartBytom智能合约
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~