马蹄(波场)佛萨奇2.0项目系统开发技术介绍讲解方案

简介: 马蹄(波场)佛萨奇2.0项目系统开发技术介绍讲解方案

  有些合约在调用时需要多个签名,其中一个是交易的发起者对支持手续费的签名,其余的都是附加签名。

  在合约编写时,我们通常使用Runtime.CheckWitness(owner)来鉴权调用者地址,其中owner是允许调用的地址,参数类型为ByteArray,未指定的地址调用合约将失败。比如在进行合约升级时,这里的owner是合约管理员。在进行转账时,这里的owner是转出人(付款人)。

  当合约中写了Runtime.CheckWitness(owner)时,调用合约时就要传入owner的签名。这个签名就是附加签名了。

  在Neo-CLI中,我们可以通过invoke命令附加签名。

  invoke<scriptHash><operation>contractParameters=nullsignerAccounts=null

  在Neo-GUI中,在调用合约时,可以点击下方的附加签名,选择公钥然后点击签名来进行附加签名。

  在通过转账命令调用NEP-17合约的transfer方法时,钱包会自动对from字段进行附加签名。此时不需要手动添加。

  合约之间的互相调用

  在Neo N3中,所有的合约都可以动态调用,且合约编写更加简单。

  public class Contract1:SmartContract

  {

  delegate object Dyncall(string method,object[]args);

  //如果是小端序,使用ByteArray格式

  //[InitialValue("694425c17f1ebb7c65de3026c831eb4c49d6d7be",ContractParameterType.ByteArray)]

  //private static readonly UInt160 ScriptHash;

  //如果是大端序,使用Hash160格式

  [InitialValue("0xbed7d6494ceb31c82630de657cbb1e7fc1254469",ContractParameterType.Hash160)]

  public static UInt160 ScriptHash;

  public static object Main(string operation,object[]args)

  {

  if(operation=="name")

  {

  return Contract.Call(ScriptHash,"name",CallFlags.ReadOnly,new object[0]);

  }

  if(operation=="totalSupply")

  {

  return Contract.Call(ScriptHash,"totalSupply",CallFlags.ReadOnly,new object[0]);

  }

  return true;

  }

  }

  关键语句Contract.Call(scriptHash,method,flags,params)。

  scriptHash:被调用合约的脚本散列,ByteArray类型,小端序。

  method:被调用合约的方法,如name、balanceOf、transfer等,字符串类型。

  flags:调用合约方法时允许的权限,参考(CallFlags枚举)。

  params:被调用合约的方法的参数列表,数组类型。

  权限相关字段

  在合约的Manifest文件中定义了三个与权限相关的字段,参见下表。通过Groups和Trusts字段,钱包会根据合约之间是否可信,或者合约是否在同一组中来决定是否给用户安全警告。而Permissions和签名作用域决定了合约之间能否互相调用。关于签名作用域,请参考invokefunction方法的参数说明。

  字段类型说明

  Groups ContractGroup[]定义一组相互信任的合约,由公钥和对合约Hash的签名组成。

  Permissions ContractPermission[]该字段是一个包含一个权限对象的数组,定义了该合约想要调用的其它合约及其方法。其中合约可以是ScriptHash,Group,或通配符。方法是方法名或通配符。没有在manifest中声明的合约或方法将无法被合约调用。

  Trusts WildcardContainer<UInt160>定义该合约信任的其它合约,合约可以是ScriptHash,Group,或通配符*。如果一个合约是可信的,当合约调用时,用户界面将不会给出任何警告。

相关文章
|
4月前
|
Java 区块链 数据安全/隐私保护
马蹄链佛萨奇2.0开发运营版丨佛萨奇2.0马蹄链智能合约系统开发(详细及案例)丨佛萨奇2.0马蹄链源码
  FORCE原力第一个推出的是Classic经典矩阵   Classic经典矩阵总共有12个矩阵,最低的矩阵只要5U即可参与(早期加入的朋友都可以享受半价优惠),下一个矩阵的价格是上一级的两倍。
|
6月前
|
存储 安全 区块链
Matic马蹄链Meforce佛萨奇3.0系统开发设计及方案
信大家对智能合约的优点和缺点是什么,以及为什么智能合约很重要,有了一定的了解
|
监控 算法 区块链
Metaforce佛萨奇2.0系统开发(马蹄链)源码部署
共识机制是指在区块链网络中public boolean equals
|
存储 区块链 数据库
Forsage/MetaForce佛萨奇2.0系统开发(方案及案例),MetaForce/Forsage佛萨奇2.0系统开发(源码及项目)
 该技术方案主要让参与系统中的任意多个节点,通过一串使用密码学方法相关联产生的数据块(block),每个数据块中包含了一定时间内的系统全部信息交流数据,并且生成数据指纹用于验证其信息的有效性和链接(chain)下一个数据库块。
|
Kubernetes Shell Docker
MetaForce佛萨奇2.0系统开发详细方案丨佛萨奇系统开发技术讲解
MetaForce佛萨奇2.0系统开发详细方案丨佛萨奇系统开发技术讲解
177 0
|
区块链 开发者
深入分析Metaforce/Forsage/魔豹联盟/Polygon马蹄链Matic/佛萨奇2.0系统开发实现技术原理丨成熟及源码
 智能合约dapp开发技术主要由以太坊区块链网络提供支持,该网络提供了一系列的智能合约技术,这些智能合约可以让开发者快速、安全地构建出功能强大的dapp。智能合约dapp开发技术主要包括以太坊智能合约语言Solidity,以太坊智能合约框架Truffle,Web3.js,以太坊区块链浏览器Mist等
|
存储 区块链 数据安全/隐私保护
Metaforce/Forsage/佛萨奇2.0开发稳定版,Metaforce/Forsage/佛萨奇2.0系统开发(开发案例)丨成熟技术
Plasma是通过创建区块链的“树”来提高可扩展性的另一种方式,主链是树的根,而“子”区块链尽可能少地与更高级别的链互动。例如Loom的PlasmaChain和OmigeGO Plasma
MetaForce/Forsage/魔豹联盟/Matic马蹄链/佛萨奇2.0系统开发(详细及规则玩法)丨成熟技术
经典矩阵由两种财务模型组成,一种称为S另一种称为3型矩阵,另一种称为3型矩阵S6型矩阵。所以很多合作伙伴都不知道什么是矩阵。
|
人工智能 物联网 大数据
MetaForce佛萨奇系统开发(方案及功能)丨魔豹联盟佛萨奇MetaForce系统开发(详细及逻辑)
 当然,区块链只是元宇宙概念涵盖的众多技术之一。元宇宙是由虚拟现实、增强现实和互联网相结合创造的沉浸式数字世界。元宇宙的内涵及关键技术要求进一步打破时空限制(5G和物联网),真实沉浸感(VR),价值的传递(Web 3.0、区块链)。此前,IDC还绘制了元宇宙涵盖的技术概念。
|
存储 自然语言处理 运维
MetaForce佛萨奇(2.0)系统开发(原力元宇宙开发)丨佛萨奇MetaForce马蹄链2.0系统开发(稳定版)
 自然语言处理是人工智能技术中的另一个分支,主要应用于机器与人之间的语言交互。在工业领域,自然语言处理可以用于实现自然语言的输入、理解和生成。例如,在工业设备维护领域,可以使用自然语言处理技术来实现设备的语音控制和故障诊断。
下一篇
无影云桌面