npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ddn/asset-base

v2.4.5

Published

DDN资产基类相关信息

Downloads

75

Readme

DDN扩展资产基类

资产基类AssetBase定义了一种资产接入区块链需要实现的方法和遵循的规范,所有自定义的扩展资产都必须继承自该基类。

但不必事先实现所有的方法,除了propsMapping方法必须实现以外,其他方法都可以直接使用基类的方法。基类包括的方法如下:

/**
 * transaction创建时调用,用来对输入参数根据资产进行个性化处理
 * @param {*} data 资产数据
 * @param {*} trs 交易对象
 */
async create(data, trs)

/**
 * 计算该类型资产交易的手续费(方法内不允许使用context对象内容)
 * @param {*} trs 交易对象
 * @param {*} sender 交易发起者
 */
async calculateFee(trs, sender)

/**
 * 定义资产属性和字段的对应关系
 * 基本属性最多支持定义15个属性
 * 字符串类型10个,名称分别是str1,str2,str3...str10,长度分别是32,64,64,128,128,256,256,512,512,1024,前4个有索引
 * 整数类型3个,名称分别是int1,int2,int3,类型为INT,前2个有索引
 * 时间戳类型2个,分别是timestamp1,timestamp2
 * 扩展属性理论上无上限,名称使用str_ext, int_ext, timestamp_ext,分别定义不同类型
 * 
 * 以下属于系统属性,不可使用
 * amount:转账金额,默认为0,字符串类型
 * recipientId:收款地址,默认为null
 * message:备注信息
 */
async propsMapping()

/**
 * 基于业务逻辑的输入数据校验
 * @param {*} trs 交易对象
 * @param {*} sender 交易发起者
 */
async verify(trs, sender)

/**
 * 交易加入未确认列表前的预处理方法
 * @param {*} trs 交易对象
 * @param {*} sender 交易发起者
 */
async process(trs, sender)

/**
 * 获取资产的字节格式数据,用于签名计算
 * @param {*} trs 交易对象
 */
async getBytes(trs)

/**
 * 应用未确认交易,锁定转账金额
 * @param {*} trs 交易对象
 * @param {*} sender 交易发起者
 * @param {*} dbTrans 数据库事务对象
 */
async applyUnconfirmed(trs, sender, dbTrans)

/**
 * 回滚未确认交易,解锁转账金额
 * @param {*} trs 交易对象
 * @param {*} sender 交易发起者
 * @param {*} dbTrans 数据库事务对象
 */
async undoUnconfirmed(trs, sender, dbTrans)

/**
 * 应用交易业务金额,进行转账操作
 * @param {*} trs 交易对象
 * @param {*} block 区块对象
 * @param {*} sender 交易发起者
 * @param {*} dbTrans 数据库事务对象
 */
async apply(trs, block, sender, dbTrans)

/**
 * 回滚交易业务金额,进行退回操作
 * @param {*} trs 交易对象
 * @param {*} block 区块对象
 * @param {*} sender 交易发起者
 * @param {*} dbTrans 数据库事务对象
 */
async undo(trs, block, sender, dbTrans)

/**
 * 校验交易传入数据是否符合规范,从数据格式、数据长度、是否必须角度进行
 * @param {*} trs 交易对象
 */
async objectNormalize(trs)

/**
 * 读取数据库数据并反序列成交易对象体
 * @param {*} raw 数据库查询返回对象
 */
async dbRead(raw)
    
/**
 * 将交易存储到数据库中
 * @param {*} trs 交易对象
 * @param {*} dbTrans 数据库事务对象
 */
async dbSave(trs, dbTrans)

/**
 * 确认交易当前状态是否可以打包进当前区块
 * @param {*} trs 交易对象
 * @param {*} sender 交易发起者
 */
async ready(trs, sender)

/**
 * 区块链启动成功后执行
 */
async onBlockchainReady()

/**
 * 自定义资产Api
 * @param {*} router Express路由对象
 */
async attachApi(router)

数据交互

由于扩展资产独立于区块链系统,为了和区块链系统进行交互,基类中提供了一些对象和方法,供用户使用。

/**
 * 上下文属性,其中包含区块链中所有可操作对象,如区块对象、交易对象等等
 * context详细内容请查看相关文档
 */
this._context

/**
 * 获取资产所属包名
 */
async getPackageName()

/**
 * 获取资产配置名称
 */
async getTransactionName()

/**
 * 获取资产配置类型值
 */
async getTransactionType()

/**
 * 查询规定条件的资产数据
 * @param {*} where 查询条件,遵循sequelize规则,使用prop的名称定义
 * @param {*} orders 排序条件,遵循sequelize规则,使用prop的名称定义
 * @param {*} returnTotal 是否返回总条数,true/false
 * @param {*} pageIndex 查询的页码,从1开始
 * @param {*} pageSize 分页的大小,每页的返回的最大记录条数
 */
async queryAsset(where, orders, returnTotal, pageIndex, pageSize)

/**
 * 查询规定条件的资产数据的个数
 * @param {*} where 查询条件,遵循sequelize规则,使用prop的名称定义
 */
async queryAssetCount(where)

/**
 * 获取资产在交易对象中的名称
 * @param {*} type 资产在配置文件中的类型值
 */
async getAssetJsonName(type)

/**
 * 获得交易信息中的当前资产对象
 * @param {*} trs 交易对象
 */
async getAssetObject(trs)

/**
 * 根据资产配置名称获取资产对应实例
 * @param {*} assetName 资产类名,也即配置文件中的名称
 */
async getAssetInstanceByName(assetName)

更多有关扩展资产的信息,请查看ddn-docs中的Extend Assets部分