xuperchain源码分析-核心数据结构

8 篇文章 0 订阅
7 篇文章 0 订阅
  1. XChainCore ,保存区块链所有核心数据信息
type XChainCore struct {
   con          *consensus.PluggableConsensus
   Ledger       *ledger.Ledger
   Utxovm       *utxo.UtxoVM
   P2pSvr       p2p_base.P2PServer
   LedgerKeeper *LedgerKeeper
   bcname       string
   log          log.Logger
   status       int
   privateKey   *ecdsa.PrivateKey
   publicKey    *ecdsa.PublicKey
   address      []byte
   award        string
   nodeMode     string
   CryptoClient crypto_base.CryptoClient
   Speed *probe.SpeedCalc
   // post_cache map[string] bool
   stopFlag bool
   proposal *proposal.Proposal
   // isCoreMiner if current node is one of the core miners
   isCoreMiner bool
   // enable core peer connection or not
   coreConnection bool
   // if failSkip is false, you will execute loop of walk, or just only once walk
   failSkip bool
   // add a lru cache of tx gotten for xchaincore
   txidCache            *cache.Cache
   txidCacheExpiredTime time.Duration
   enableCompress       bool
   pruneOption          config.PruneOption
   // cache for duplicate block message
   msgCache           *common.LRUCache
   blockBroadcaseMode uint8
   // group chain involved
   groupChain GroupChainRegister
}
  1. XChainMG,管理多条平行链,使用map结构存储chains
type XChainMG struct {
   Log    log.Logger
   Cfg    *config.NodeConfig
   P2pSvr p2p_base.P2PServer
   // msgChan is the message subscribe from net
   msgChan    chan *xuper_p2p.XuperMessage
   chains     *sync.Map
   rootKernel *kernel.Kernel
   datapath   string
   Ukeys      *sync.Map //address -> scrkey
   Speed      *probe.SpeedCalc
   Quit       chan struct{}
   nodeMode   string
   // the switch of compressed
   enableCompress bool
   // event involved
   // group chain involved
   groupChainCache *groupChainCache
}
  1. 账本核心数据
    // Ledger define data structure of Ledger
type Ledger struct {
   baseDB           kvdb.Database // 底层是一个leveldb实例,kvdb进行了包装
   metaTable        kvdb.Database // 记录区块链的根节点、高度、末端节点
   confirmedTable   kvdb.Database // 已确认的订单表
   blocksTable      kvdb.Database // 区块表
   mutex            *sync.RWMutex
   xlog             log.Logger       //日志库
   meta             *pb.LedgerMeta   //账本关键的元数据{genesis, tip, height}
   GenesisBlock     *GenesisBlock    //创始块
   heightTable      kvdb.Database    //保存高度到Blockid的映射
   blockCache       *common.LRUCache // block cache, 加速QueryBlock
   blkHeaderCache   *common.LRUCache // block header cache, 加速fetchBlock
   cryptoClient     crypto_base.CryptoClient
   enablePowMinning bool
   powMutex         *sync.Mutex
   confirmBatch     kvdb.Batch //新增区块
}
  1. 对账本的操作都必须经过LedgerKeeper

LedgerKeeper会管理一组task队列,task为外界对其的请求封装,分为直接追加账本(Appending)、批量同步(Syncing),Truncate单独作为同步处理

type LedgerKeeper struct {
   p2pSvr         p2p_base.P2PServer
   log            log.Logger
   peersStatusMap *sync.Map // map[string]bool 更新同步节点的p2p列表活性
   ledger         *ledger.Ledger
   bcName         string
   syncTaskMg     *syncTaskManager
   nodeMode       string

   utxovm *utxo.UtxoVM
   con    *consensus.PluggableConsensus
   // 该锁保护同一时间内只有矿工or账本keeper对象中的一个对ledger及utxovm操作
   // ledgledgerKeeper同步块和xchaincore 矿工doMiner抢锁
   coreMutex sync.RWMutex

   maxBlocksMsgSize int64 // 取最大区块大小
   syncHeaderSize   int64 // 一次同步头的大小
}
  1. UTXO数据和账本查询
// XModel xmodel data structure
type XModel struct {
   ledger          *ledger.Ledger
   stateDB         kvdb.Database
   unconfirmTable  kvdb.Database
   extUtxoTable    kvdb.Database
   extUtxoDelTable kvdb.Database
   logger          log.Logger
   batchCache      *sync.Map
   lastBatch       kvdb.Batch
   // extUtxoCache caches per bucket key-values using version as key
   extUtxoCache sync.Map // map[string]*LRUCache
}
  1. filekey.go 从文件中加载私钥、公钥、钱包地址,或者生成到文件中
// 定义密码算法的类型
const (
   // 不同语言标准不一样,这里用const直接定义值还是好一些
   // 美国Federal Information Processing Standards的椭圆曲线
   EccFIPS = iota
   // 国密椭圆曲线
   EccGM
)

// ECDSAAccount 助记词、私钥的json、公钥的json、钱包地址
type ECDSAAccount struct {
   EntropyByte    []byte
   Mnemonic       string
   JSONPrivateKey string
   JSONPublicKey  string
   Address        string
}
  1. utxo.go 交易相关的所有,账本,utxo表,交易表,包括智能合约(合约没有UTXO)相关的交易
type UtxoVM struct {
   meta              *pb.UtxoMeta // utxo meta
   metaTmp           *pb.UtxoMeta // tmp utxo meta
   mutexMeta         *sync.Mutex  // access control for meta
   ldb               kvdb.Database
   mutex             *sync.RWMutex // utxo leveldb表读写锁
   mutexMem          *sync.Mutex   // 内存锁定状态互斥锁
   spLock            *SpinLock     // 自旋锁,根据交易涉及的utxo和改写的变量
   mutexBalance      *sync.Mutex   // 余额Cache锁
   lockKeys          map[string]*UtxoLockItem
   lockKeyList       *list.List // 按锁定的先后顺序,方便过期清理
   lockExpireTime    int        // 临时锁定的最长时间
   utxoCache         *UtxoCache
   xlog              log.Logger
   ledger            *ledger_pkg.Ledger       // 引用的账本对象
   latestBlockid     []byte                   // 当前vm最后一次执行到的blockid
   unconfirmedTable  kvdb.Database            // 未确认交易表
   utxoTable         kvdb.Database            // utxo表
   metaTable         kvdb.Database            // 元数据表,会持久化保存latestBlockid
   withdrawTable     kvdb.Database            // 平行币赎回表, 记录已经赎回的destroy proof
   smartContract     *contract.SmartContract  // 智能合约执行机
   OfflineTxChan     chan []*pb.Transaction   // 未确认tx的通知chan
   prevFoundKeyCache *common.LRUCache         // 上一次找到的可用utxo key,用于加速GenerateTx
   utxoTotal         *big.Int                 // 总资产
   cryptoClient      crypto_base.CryptoClient // 加密实例
   modifyBlockAddr   string                   // 可修改区块链的监管地址
   model3            *xmodel.XModel           // XuperModel实例,处理extutxo
   vmMgr3            *contract.VMManager
   aclMgr            *acli.Manager // ACL manager for read/write acl table
   minerPublicKey    string
   minerPrivateKey   string
   minerAddress      []byte
   failedTxBuf       map[string][]string
   inboundTxChan     chan *InboundTx      // 异步tx chan
   verifiedTxChan    chan *pb.Transaction //已经校验通过的tx
   asyncMode         bool                 // 是否工作在异步模式
   asyncCancel       context.CancelFunc   // 停止后台异步batch写的句柄
   asyncWriterWG     *sync.WaitGroup      // 优雅退出异步writer的信号量
   asyncCond         *sync.Cond           // 用来出块线程优先权的条件变量
   asyncTryBlockGen  bool                 // doMiner线程是否准备出块
   asyncResult       *AsyncResult         // 用于等待异步结果
   // 上述asyncMode是指异步模式,默认是异步回调模式
   // asyncBlockMode是指异步阻塞模式
   asyncBlockMode       bool             // 是否工作在异步阻塞模式下
   asyncBatch           kvdb.Batch       // 异步刷盘复用的batch
   vatHandler           *vat.VATHandler  // Verifiable Autogen Tx 生成器
   balanceCache         *common.LRUCache //余额cache,加速GetBalance查询
   cacheSize            int              //记录构造utxo时传入的cachesize
   balanceViewDirty     map[string]int   //balanceCache 标记dirty: addr -> sequence of view
   contractExectionTime int
   unconfirmTxInMem     *sync.Map //未确认Tx表的内存镜像
   maxConfirmedDelay    uint32    // 交易处于unconfirm状态的最长时间,超过后会被回滚
   unconfirmTxAmount    int64     // 未确认的Tx数目,用于监控
   avgDelay             int64     // 平均上链延时
   bcname               string

   // 最新区块高度通知装置
   heightNotifier *BlockHeightNotifier
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: XuperChain商品溯源设计是一项基于区块链技术的解决方案,用于保证商品的安全,防止出现假冒伪劣商品,同时提高消费者的保障程度。这个解决方案是以XuperChain区块链作为核心技术,具有分布式、去中心化、不可篡改等特性,因此能够实现全程追溯商品的生产、运输、销售等过程,以确保物品的品质和管理。 整个商品溯源系统包括生产过程、物流过程和销售过程。 在生产过程中,通过XuperChain实现了对每一个产品的全程追溯,以确保每一个物品的质量和可靠性,同时防止黑市交易和假冒伪劣货。在物流过程中,每个物品都有对应的唯一标识码,消费者可以通过扫描这些标识码了解物品的来源和运输的轨迹。在销售过程中,消费者可以通过XuperChain平台查看到商品所有的相关信息,包括生产和运输过程、商品质量以及品牌的相关认证等等。 此外,XuperChain商品溯源设计人性化的UI及多维度查询功能使得消费者可以方便快捷地查询商品信息,提高了消费者的投诉渠道。这也必将有助于提高消费者对商品的信任和满意度,同时降低企业的管理成本,实现一种全新的Win-Win局面。综上所述,XuperChain商品溯源设计是一项非常有前景的技术方案,它有助于建立更可靠的商品体系,展示企业的诚信仪表,并最终实现与消费者之间的诚信交流。 ### 回答2: Xuperchain是一个去中心化的区块链平台,可以为商品溯源提供可靠的技术支持。商品溯源是指从原材料、生产环节、流通环节到最终消费者手中的商品信息追溯的过程,目的是确保商品的安全、可追溯、品质有保障。Xuperchain基于区块链技术,实现了对商品信息的可信存储、跨组织的可信互操作和去中心化的数据共享,为商品溯源提供了一种全新的解决方案。 在Xuperchain的商品溯源设计中,首先需要确定商品关键数据和生产流程中产生的可溯源的数据。将这些数据上链可以实现多方共享、数据可追溯、不可篡改和安全可靠。其次,在智能合约中定义商品信息的存储和查询方式,并实现监管机构、生产者、经销商、消费者等多方的权限控制。最后,采用Xuperchain平台提供的传输协议,将整个溯源过程中的数据通讯保护,从而确保溯源信息的安全性。 Xuperchain的商品溯源设计不仅能提高商品质量和安全,更能促进整个供应链体系的优化,并对监管机构和消费者的体验提供了全方位的改进。Xuperchain将为商品溯源提供全新的解决方案,发挥更为重要的作用。 ### 回答3: xuperchain是一种新型的区块链技术,它可以用于商品溯源设计。在这种设计中,每一个商品都可以被赋予一个不可更改的区块链地址,同时将所有与该商品相关的信息记录在该地址上。 具体来说,当一件商品被生产出来时,它的生产信息(如生产厂家、生产时间、生产批次等)会被记录在该地址上。当这件商品进入流通环节后,每一次交易都会被记录在该地址上,包括销售商、价格、购买时间等信息。当消费者购买该商品后,消费者信息也会被记录在该地址上。 这种方式可以帮助消费者了解商品的真实来源和生产过程,同时也可以帮助监管部门进行有效的监管和管理。如果出现了质量问题,可以通过区块链上的记录追溯到具体的生产批次和生产厂家,从而找到问题的根源并及时解决。 总之,xuperchain技术可以帮助实现商品的全生命周期记录和溯源,从而提高商品的信任度和交易的透明度。这种技术在食品、药品等领域应用广泛,并且也可以应用于其他许多行业中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值