
Web3-下一代价值互联网
前言: 相信在不久的将来,Web3世界数字资产规模将超过现实生活的实物资产规模,不仅指的是数量,还有价值。 Web3数字资产将代表数字商品本身,我们将直接消费和交易这些数字资产.实物资产价值会逐步降低,Web3资产就像一件新衣服,而实物资产也就是放在衣柜的旧衣服。 可能你现在并不认为数字资产将会成为一种商品,一种消费品,但人类对商品的理解是逐步发现和扩展的,正如金融市场从交易"商品"到交易"合约",再到交易"不确定性"本身的发展过程,设想在Web3世界的商品,完全有可能是现在大家认为毫无价值的数字资产。 Web3是什么Web3以区块链为基础、用户拥有的下一代价值互联网。 所谓价值,用户数据可便捷快速的转化为token、nft等数字资产形式,数字资产在网络中被确权、流通、交易(Web2数据确权极难),进行各种生产生活活动。 用户所有,用户数据为用户所有,网络运行并不以某个实体为主导,而是以社区自治的方式开展。 Web3主要区别Web1 主要是只读信息,如 Yahoo 、新浪等,特点是内容平台创建、利益运营均为平台决定。 Web2 可读、写信息(用户提供内容), 如 Facebook...
The New World
Hello World

DID 去中心化身份
说明:目前DID(去中心化身份)笔者知道有两种,一种是W3C支持的(也是今天本文的重点介绍) ,另一种就是区块链里把各种区块链地址(比如以太坊地址)当作去中心身份登陆各种区块链的里去中心应用(类似区块链应用较常见,比如defi、nft平台、去中心社交平台等,但W3C实际上是兼容区块链地址did身份的,W3C有较强的自定义和可扩展性,并且已有很多企业已经支持W3C了,看起来更具有发展前景) 下面这则新闻标志着DID作为W3C的正式标准: 2022年7月19日,W3C 去中心化标识符工作组 发布 Decentralized Identifiers (DIDs) v1.0 正式推荐标准。 W3C组织是对网络标准制定的一个非盈利组织,W3C是World Wide Web Consortium( 万维网联盟 )的缩写,像、HTML、XHTML、CSS、XML的标准就是由W3C来定制。DID是什么did 是W3C(Decentralized Identifier Working Group) 发布的去中心化标识协议,旨在标示任何主体身份(如个人、组织、抽象实体、虚拟实体等) 目前主流互联网身...
Nature I lov’d, and next to Nature, Art; I warm’d both hands before the fire of life; It sinks, and I am ready to depart.

Web3-下一代价值互联网
前言: 相信在不久的将来,Web3世界数字资产规模将超过现实生活的实物资产规模,不仅指的是数量,还有价值。 Web3数字资产将代表数字商品本身,我们将直接消费和交易这些数字资产.实物资产价值会逐步降低,Web3资产就像一件新衣服,而实物资产也就是放在衣柜的旧衣服。 可能你现在并不认为数字资产将会成为一种商品,一种消费品,但人类对商品的理解是逐步发现和扩展的,正如金融市场从交易"商品"到交易"合约",再到交易"不确定性"本身的发展过程,设想在Web3世界的商品,完全有可能是现在大家认为毫无价值的数字资产。 Web3是什么Web3以区块链为基础、用户拥有的下一代价值互联网。 所谓价值,用户数据可便捷快速的转化为token、nft等数字资产形式,数字资产在网络中被确权、流通、交易(Web2数据确权极难),进行各种生产生活活动。 用户所有,用户数据为用户所有,网络运行并不以某个实体为主导,而是以社区自治的方式开展。 Web3主要区别Web1 主要是只读信息,如 Yahoo 、新浪等,特点是内容平台创建、利益运营均为平台决定。 Web2 可读、写信息(用户提供内容), 如 Facebook...
The New World
Hello World

DID 去中心化身份
说明:目前DID(去中心化身份)笔者知道有两种,一种是W3C支持的(也是今天本文的重点介绍) ,另一种就是区块链里把各种区块链地址(比如以太坊地址)当作去中心身份登陆各种区块链的里去中心应用(类似区块链应用较常见,比如defi、nft平台、去中心社交平台等,但W3C实际上是兼容区块链地址did身份的,W3C有较强的自定义和可扩展性,并且已有很多企业已经支持W3C了,看起来更具有发展前景) 下面这则新闻标志着DID作为W3C的正式标准: 2022年7月19日,W3C 去中心化标识符工作组 发布 Decentralized Identifiers (DIDs) v1.0 正式推荐标准。 W3C组织是对网络标准制定的一个非盈利组织,W3C是World Wide Web Consortium( 万维网联盟 )的缩写,像、HTML、XHTML、CSS、XML的标准就是由W3C来定制。DID是什么did 是W3C(Decentralized Identifier Working Group) 发布的去中心化标识协议,旨在标示任何主体身份(如个人、组织、抽象实体、虚拟实体等) 目前主流互联网身...
Nature I lov’d, and next to Nature, Art; I warm’d both hands before the fire of life; It sinks, and I am ready to depart.

Subscribe to Walker

Subscribe to Walker
<100 subscribers
<100 subscribers
Share Dialog
Share Dialog


说明:nxtp包含有不同模块,大部分采用ts语言编写,因为本人对ts语言并不太了解,只是大概看了看代码大致结构和主要功能(不太能完全读懂所有ts细节,可能有错误之处,敬请谅解)
路由器Connext网络中的,一个在后台的自动化的参与者,主要负责提供交易流动性和促进跨链互换。
监听用户跨链交易交换请求。
提交拍卖投标以满足用户交换请求。
监视所有链上的TransactionManager合约事件,以获取TransactionPrepared事件,其中路由器匹配配置的路由器的签名地址,sendingChainId匹配事件链。
在接收链上使用amount = amount - calculatedFees调用prepare,其中calculatedFees是AMM-based 互换率、固定的0.05%费用和用户支付的gas组合。
监控所有跨链的TransactionManager合约事件,以获取transactionfulfillment事件,其中路由器与配置的路由器的签署人地址匹配,receivingChainId与事件链匹配
使用从transactionfulfillment事件发出的签名在发送链上调用fulfillment。

上图清晰的反应了:Router功能模块,以及和其相互关联的各个组件
路由主要功能主要是围绕下面代码展开:
export const makeRouter = async () => {
const requestContext = createRequestContext("makeRouter");
const methodContext = createMethodContext(makeRouter.name);
try {
// set up external, config based services
const chainData = await getChainData();
if (!chainData) {
throw new Error("Could not get chain data");
}
context.chainData = chainData;
context.config = await getConfig();
context.wallet = context.config.mnemonic
? Wallet.fromMnemonic(context.config.mnemonic)
: new Web3Signer(context.config.web3SignerUrl!);
context.signerAddress = await context.wallet.getAddress();
context.isRouterContract = context.config.routerContractAddress ? true : false;
context.routerAddress = context.config.routerContractAddress || context.signerAddress;
context.messaging = await initMessaging({
signer: context.wallet,
authUrl: context.config.authUrl,
natsUrl: context.config.natsUrl,
logger: context.logger,
});
// TODO: txserviceconfig log level
context.txService = new TransactionService(
context.logger.child({ module: "TransactionService" }, context.config.logLevel),
context.config.chainConfig as any,
context.wallet,
);
// 创建cache,主要是存储bid订单信息,内部有增加、删除、确认bid等功能函数
context.cache = createRouterCache();
// adapters
//通过subgraph,获取链上数据
context.contractReader = subgraphContractReader();
//直接通过中继获取链上(合约TransactionManager)事件信息
context.contractWriter = contractWriter();
context.chainAssetSwapPoolMap = await getSwapPoolMap({
txService: context.txService,
isRouterContract: context.isRouterContract,
swapPools: context.config.swapPools,
routerAddress: context.routerAddress,
});
// bindings
if (!context.config.diagnosticMode) {
//代码里获取getActiveTransactions交易
await bindContractReader();
} else {
logger.warn("Running router in diagnostic mode");
}
if (!context.config.cleanUpMode) {
//订阅从messaging几类消息,拍卖,状态信息,metatx请求获取订阅消息
await bindMessaging();
} else {
logger.warn("Running router in cleanup mode");
}
if (context.config.priceCacheMode) {
//从链上获取资产价格存储在cachedPriceMap(根据chainid和assetId组合作为key去存储)
await bindPrices();
} else {
logger.warn("Running router not in price cache mode");
}
//
await bindFastify();
await bindMetrics();
logger.info("Router ready!");
} catch (e) {
console.error("Error starting router :(", e);
process.exit();
}
};
subgraphContractReader() 这里读取很多函数,有些函数比较简单如获取资产余额等(getAssetBalances和getExpressiveAssetBalances区别是后者表现了某类资产详细信息
如供应量、锁定量等),主要有如下函数有getActiveTransactions,getTransactionForChain.
getActiveTransactions, 根据发送链交易检查接受链上交易看相互是否匹配,不同情况,需做不同处理,看起来是做了不同的状态标示便于后续处理
getTransactionForChain,在指定链上检索具有给定transactionId-user组合的交易(交易状态、中继费用、投标情况等信息)。
contractWriter() 监听TransactionManager合约三个事件,TransactionPrepared,TransactionCancelled,LiquidityRemoved(后续ts事件处理操作没太看明白)
bindContractReader()->getActiveTransactions()->handleActiveTransactions() 依次调用
handleActiveTransactions(transactions); 根据各交易状态继续处理,经过一系列校验,然后两类交易ReceiverFulfilled会继续fufill,,SenderPrepared会继续prepare,最后通过txservice发送交易到链上,其余状态会执行cancel取消交易,各种状态如下:

bindFastify()内部有一系列处理流动性功能相关服务,可增加、删除、移动路由器资产流动性等功能,还有处理active交易(内部调用了contractReader.getActiveTransactions()->handleActiveTransactions(activeTxs))
很高兴能和你交流技术、人生等各种话题:
twitter:https://twitter.com/tylz_cai
说明:nxtp包含有不同模块,大部分采用ts语言编写,因为本人对ts语言并不太了解,只是大概看了看代码大致结构和主要功能(不太能完全读懂所有ts细节,可能有错误之处,敬请谅解)
路由器Connext网络中的,一个在后台的自动化的参与者,主要负责提供交易流动性和促进跨链互换。
监听用户跨链交易交换请求。
提交拍卖投标以满足用户交换请求。
监视所有链上的TransactionManager合约事件,以获取TransactionPrepared事件,其中路由器匹配配置的路由器的签名地址,sendingChainId匹配事件链。
在接收链上使用amount = amount - calculatedFees调用prepare,其中calculatedFees是AMM-based 互换率、固定的0.05%费用和用户支付的gas组合。
监控所有跨链的TransactionManager合约事件,以获取transactionfulfillment事件,其中路由器与配置的路由器的签署人地址匹配,receivingChainId与事件链匹配
使用从transactionfulfillment事件发出的签名在发送链上调用fulfillment。

上图清晰的反应了:Router功能模块,以及和其相互关联的各个组件
路由主要功能主要是围绕下面代码展开:
export const makeRouter = async () => {
const requestContext = createRequestContext("makeRouter");
const methodContext = createMethodContext(makeRouter.name);
try {
// set up external, config based services
const chainData = await getChainData();
if (!chainData) {
throw new Error("Could not get chain data");
}
context.chainData = chainData;
context.config = await getConfig();
context.wallet = context.config.mnemonic
? Wallet.fromMnemonic(context.config.mnemonic)
: new Web3Signer(context.config.web3SignerUrl!);
context.signerAddress = await context.wallet.getAddress();
context.isRouterContract = context.config.routerContractAddress ? true : false;
context.routerAddress = context.config.routerContractAddress || context.signerAddress;
context.messaging = await initMessaging({
signer: context.wallet,
authUrl: context.config.authUrl,
natsUrl: context.config.natsUrl,
logger: context.logger,
});
// TODO: txserviceconfig log level
context.txService = new TransactionService(
context.logger.child({ module: "TransactionService" }, context.config.logLevel),
context.config.chainConfig as any,
context.wallet,
);
// 创建cache,主要是存储bid订单信息,内部有增加、删除、确认bid等功能函数
context.cache = createRouterCache();
// adapters
//通过subgraph,获取链上数据
context.contractReader = subgraphContractReader();
//直接通过中继获取链上(合约TransactionManager)事件信息
context.contractWriter = contractWriter();
context.chainAssetSwapPoolMap = await getSwapPoolMap({
txService: context.txService,
isRouterContract: context.isRouterContract,
swapPools: context.config.swapPools,
routerAddress: context.routerAddress,
});
// bindings
if (!context.config.diagnosticMode) {
//代码里获取getActiveTransactions交易
await bindContractReader();
} else {
logger.warn("Running router in diagnostic mode");
}
if (!context.config.cleanUpMode) {
//订阅从messaging几类消息,拍卖,状态信息,metatx请求获取订阅消息
await bindMessaging();
} else {
logger.warn("Running router in cleanup mode");
}
if (context.config.priceCacheMode) {
//从链上获取资产价格存储在cachedPriceMap(根据chainid和assetId组合作为key去存储)
await bindPrices();
} else {
logger.warn("Running router not in price cache mode");
}
//
await bindFastify();
await bindMetrics();
logger.info("Router ready!");
} catch (e) {
console.error("Error starting router :(", e);
process.exit();
}
};
subgraphContractReader() 这里读取很多函数,有些函数比较简单如获取资产余额等(getAssetBalances和getExpressiveAssetBalances区别是后者表现了某类资产详细信息
如供应量、锁定量等),主要有如下函数有getActiveTransactions,getTransactionForChain.
getActiveTransactions, 根据发送链交易检查接受链上交易看相互是否匹配,不同情况,需做不同处理,看起来是做了不同的状态标示便于后续处理
getTransactionForChain,在指定链上检索具有给定transactionId-user组合的交易(交易状态、中继费用、投标情况等信息)。
contractWriter() 监听TransactionManager合约三个事件,TransactionPrepared,TransactionCancelled,LiquidityRemoved(后续ts事件处理操作没太看明白)
bindContractReader()->getActiveTransactions()->handleActiveTransactions() 依次调用
handleActiveTransactions(transactions); 根据各交易状态继续处理,经过一系列校验,然后两类交易ReceiverFulfilled会继续fufill,,SenderPrepared会继续prepare,最后通过txservice发送交易到链上,其余状态会执行cancel取消交易,各种状态如下:

bindFastify()内部有一系列处理流动性功能相关服务,可增加、删除、移动路由器资产流动性等功能,还有处理active交易(内部调用了contractReader.getActiveTransactions()->handleActiveTransactions(activeTxs))
很高兴能和你交流技术、人生等各种话题:
twitter:https://twitter.com/tylz_cai
No activity yet