CNS合约命名服务

概述

调用以太坊智能合约的流程包括:

  • 编写合约;
  • 编译合约得到合约接口abi描述;
  • 部署合约得到合约地址address;
  • 封装合约的abi和地址,通过SDK等工具实现对合约的调用。

从合约调用流程可知,调用之前必须准备合约abi以及合约地址address。这种使用方式存在以下的问题:

  • 合约abi为较长的JSON字符串,调用方不需直接感知;
  • 合约地址为20字节的魔数,不方便记忆,若丢失后将导致合约不可访问;
  • 合约重新部署后,一个或多个调用方都需更新合约地址;
  • 不便于进行版本管理以及合约灰度升级。

为解决以上问题,给调用者提供良好的智能合约调用体验,FISCO BCOS提出CNS合约命名服务。

名词解释

CNS(Contract Name Service)通过提供链上合约名称与合约地址映射关系的记录及相应的查询功能,方便调用者通过记忆简单的合约名来实现对链上合约的调用。
CNS信息为合约名称、合约版本、合约地址和合约abi
CNS表用于存储CNS信息

CNS对比以太坊原有调用方式的优势

  • 简化调用合约方式;
  • 合约升级对调用者透明,支持合约灰度升级。

对标ENS

ENS (Ethereum Name Service) ,以太坊名称服务。

ENS的功能类似我们较熟悉的DNS(Domain Name Service)域名系统,但提供的不是Internet网址,而是将以太坊(Ethereum)合约地址和钱包地址以xxxxxx.eth网址的方式表示,用于存取合约或转账。两者相比:

  • ENS映射的地址类型包括合约地址及钱包地址,CNS可支持,当地址类型为钱包地址时合约abi为空。
  • ENS有竞拍功能,CNS不需支持。
  • ENS支持多级域名,CNS不需支持。

模块架构

../../../_images/cns_architecture.png

核心流程

用户调用SDK部署合约及调用合约流程如下:

../../../_images/deploy_and_call.png

  • 部署合约时,SDK生成合约对应的Java类,调用类的deploy接口发布合约获得合约地址,然后调用CNS合约insert接口上链CNS信息。
  • 调用合约时,SDK引入合约的Java类,并加载实例化。load加载接口可传入合约地址(原有以太坊方式)或合约名称和合约版本的组合(CNS方式),SDK处理CNS方式时通过调用CNS模块查询链上信息来获取合约地址。
  • 对于缺少版本号的合约调用,由SDK实现默认调用合约的最新版本。
  • 上链的合约abi信息属于可选字段。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yitahutu79

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值