0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

链上智能合约Dapp开发技术部署

搭建punk2558 来源:搭建punk2558 作者:搭建punk2558 2022-06-20 18:13 次阅读

合约是代码(它的功能)和数据(它的状态)的集合,存在于以太坊区块链的特定地址。合约账户能够在彼此之间传递信息,进行图灵完备的运算。合约依靠被称作以太坊虚拟机(EVM)字节代码(以太坊特有的二进制格式)上的区块链运行。

合约很典型地用诸如Solidity等高级语言写成,然后编译成字节代码上传到区块链上。

以太坊高级语言

合约依靠被称作以太坊虚拟机(EVM)字节代码(以太坊特有的二进制格式)上的区块链运行。然而,合约很典型地用诸如Solidity等高级语言写成,然后用以太坊虚拟机编译器编译成字节代码上传到区块链。

编译合约

solidity合约的编译可以通过很多机制完成。

通过命令行使用solc编译器。

在geth或eth提供的javascript控制台使用web3.eth.compile.solidity(这仍然需要安装solc编译器)。

在线Solidity实时编译器。

建立solidity合约的Meteor dapp Cosmo。

Mix IDE。

以太坊钱包。

注意:关于solc和编译Solidity合约代码的更多信息可在此查看。

在geth设置solidity编译器

如果你启动了geth节点,就可以查看哪个编译器可用。

这一指令会返回到显示当前哪个编译器可用的字符串。

注意:solc编译器和cpp-ethereum一起安装。或者,你可以自己创建。

如果你的solc可执行文件不在标准位置,可以用—solc标志为solc可执行文件指定一个定制路线。

或者你可以通过控制台在执行期间设置这个选项:

编译一个简单合约

让我们编译一个简单的合约源:

这个合约提供了一个单一方法multiply,它和一个正整数a调用并返回到a*7。

注意:编译器通过RPC因此也能通过web3.js,对浏览器内任何通过RPC/IPC连接到geth的Ðapp可用。

下面的例子会向你展示如何通过JSON-RPC接合geth来使用编译器。

Code编译的以太坊虚拟机字节代码

Info从编译器输出的额外元数据

Source源代码

Language合约语言(Solidity,Serpent,LLL)

LanguageVersion合约语言版本

compilerVersion用于编译这个合约的solidity编译器版本。

abiDefinition应用的二进制界面定义

userDoc用户的NatSpec Doc。

developerDoc开发者的NatSpec Doc。

编译器输出的直接结构化(到code和info)反映了两种非常不同的部署路径。编译的以太坊虚拟机代码和一个合约创建交易被发送到区块,剩下的(info)在理想状态下会存活在去中心化云上,公开验证的元数据则执行区块链上的代码。

如果你的源包含多个合约,输出会包括每个合约一个入口,对应的合约信息对象可以用作为属性名称的合约名字检索到。你可以通过检测当前的GlobalRegistrar代码来试一下:

创建和部署合约

开始这一章节之前,确保你有解锁的账户和一些资金。你现在会在区块链上创建一个合约,方法是用上一章节的以太坊虚拟机代码作为数据给空地址发送交易。

注意:用在线Solidity实时编译器或Mix IDE程序会更容易完成。

所有的二进制数据都以十六进制的格式序列化。十六进制字符串总会有一个十六进制前缀0x。

注意:注意arg1,arg2,…是合约构造函数参数,以备它要接受参数。如果合约不需要构造函数参数,就可以忽略这些参数。

值得指出的是,这一步骤需要你支付执行。一旦交易成功进入到区块,你的账户余额(你作为发送方放在from领域)会根据以太坊虚拟机的gas规则被扣减。一段时间以后,你的交易会在一个区块中出现,确认它带来的状态是共识。你的合约现在存在于区块链上。以不同步的方式做同样的事看起来是这样:

与合约交互

与合约交互典型的做法是用诸如eth.contract()功能的抽象层,它会返回到javascript对象,和所有可用的合约功能一起,作为可调用的javascript功能。描述合约可用功能的标准方式是ABI定义。这个对象是一个字符串,它描述了调用签名和每个可用合约功能的返回值。

现在ABI中具体说明的所有功能调用都在合约实例中可用。你可以用两种方法中的一种来调用这些合约实例上的方法。

当用sendTransaction被调用的时候,功能调用通过发送交易来执行。需要花费以太币来发送,调用会永久记录在区块链上。用这种方式进行的调用返回值是交易散表。

当用call被调用的时候,功能在以太坊虚拟机被本地执行,功能返回值和功能一起返回。用这种方式进行的调用不会记录在区块链上,因此也不会改变合约内部状态。这种调用方式被称为恒定功能调用。以这种方式进行的调用不花费以太币。

如果你只对返回值感兴趣,那么你应该用call。如果你只关心合约状态的副作用,就应该用sendTransaction。

在上面的例子中,不会产生副作用,因此sendTransaction只会烧gas,增加宇宙的熵。

测试合约和交易

你通常需要低级的测试策略,为交易和合约排除故障。这一章节介绍了一些你可以用到的排错工作和做法。为了测试合约和交易而不产生实际的后果,你最好在私有区块链上测试。这可以通过配置一个替代网络ID(选择一个特别的数字)和/或不能用的端点来实现。推荐做法是,为了测试你用一个替代数据目录和端口,这样就不会意外地和实时运行的节点冲突(假定用默认运行。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87595
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66762
收藏 人收藏

    评论

    相关推荐

    AIRLOOK携手百度视觉技术部联合发布国内首个大空间高精度3DGS逆渲染成果

    技术的完美融合,为行业提供更强大的显式编辑能力和更低算力需求的实时渲染能力,进一步降低开发部署门槛,在双方的合作下,将加快创新性技术在地理信息领域的应用。 GIR重建及重光照渲染效果
    的头像 发表于 02-27 14:18 110次阅读
    AIRLOOK携手百度视觉<b class='flag-5'>技术部</b>联合发布国内首个大空间高精度3DGS逆渲染成果

    HarmonyOS开发技术全面分析

    HarmonyOS 通过组件化和小型化等设计方法,支持多种终端设备按需弹性部署,能够适配不同类别的硬件资源和功能需求。支撑通过编译关系去自动生成组件化的依赖关系,形成组件树依赖图,支撑产品系统的便捷开发
    发表于 02-21 16:31

    智慧构思:智能合约技术精髓与价值转化 ——华为云BCS区块链服务

    经由复杂的审批流程或中介,而由数码契约处理,并自动按预设条件执行。信任不再源于权威保障,而是镌刻在一串代码内,契约得以公开、透明,不容篡改。这就是采用华为云BCS「智能合约」(即:华为云区块链服务关键技术之一)实
    的头像 发表于 11-25 17:35 473次阅读
    智慧构思:<b class='flag-5'>智能</b><b class='flag-5'>合约</b><b class='flag-5'>技术</b>精髓与价值转化 ——华为云BCS区块链服务

    人工智能大模型、应用场景、应用部署教程超详细资料

    人工智能是IC行业近几年的热词,目前此技术已经有很多成熟的模型和落地案例。在此跟大家做个分享,更多详细资料,请自行搜索:【展锐坦克邦】,坦克邦-智算天地集算法模型、部署说明于一体,为广大客户提供了
    发表于 11-13 14:49

    SpringBoot 如何实现热部署

    部署是软件开发中一个非常有用的功能,它允许我们在不重新启动整个应用的情况下,依旧能够使我们修改的代码生效。 现在Java Web 开发应该都是使用的 SpringBoot,那么本篇文章就来介绍
    的头像 发表于 09-30 10:16 409次阅读
    SpringBoot 如何实现热<b class='flag-5'>部署</b>

    华秋供应,让硬科技创业更简单

    、M002款已在科研院所进行测试并小批量销售。 03- HonyMow户外机器人前沿技术先锋 专注于户外智能服务型机器人领域的深度开发。主要从事家用服务机器人、商用服务机器人、农业机器人及特种机器人等产业
    发表于 09-26 10:24

    智能运维技术的发展和设计资料

    )和大数据技术(BigData),设计开发智能终端和后台服务器系统,实现对变电站设备的实时增强显示、缺陷告警、缺陷分析与判断智能化、缺陷远程专家会诊等功能。
    发表于 09-21 07:18

    柔性电子供应企业的机会与挑战

    不断推进,形成上下游贯通发展、协同互促的良好局面。 电子供应 在具体的工作举措上,《方案》 从传统及新型行业市场、绿色智能制造 、电子信息技术创新、 供应转型升级 、产业政策环境等
    发表于 09-15 11:37

    迎产业东风,柔性电子供应企业的机会与挑战

    不断推进,形成上下游贯通发展、协同互促的良好局面。 电子供应 在具体的工作举措上,《方案》 从传统及新型行业市场、绿色智能制造 、电子信息技术创新、 供应转型升级 、产业政策环境等
    发表于 09-15 11:36

    K210开发部署开发板上后,会提示“Out of Memory”无法完成检测任务如何解决?

    您好,我想问一下嘉楠官方有没有出一套基于K210开发板进行目标检测的训练流程呢?我想训练自己的数据集并部署到亚博智能K210开发板上,在网络上找到的yolo-for-k210项目所训练
    发表于 09-14 08:35

    HarmonyOS\"一次开发,多端部署\"优秀实践——玩机技巧,码上起航

    随着终端设备形态日益多样化,分布式技术逐渐打破单一硬件边界,一个应用或服务,可以在不同的硬件设备之间按需调用、互助共享,让用户享受无缝的全场景体验。作为应用开发者,广泛的设备类型也能为应用带来广大
    发表于 08-30 18:14

    Ai 部署的临界考虑电子指南

    虽然GPU解决方案对训练,AI部署需要更多。 预计到2020年代中期,人工智能行业将增长到200亿美元,其中大部分增长是人工智能推理。英特尔Xeon可扩展处理器约占运行AI推理的处理器单元的70
    发表于 08-04 07:25

    【EASY EAI Nano人工智能开发套件试用体验】EASY EAI Nano人工智能开发套件开发环境的准备和架设

    大家好,今天来分享我在EASY EAI Nano人工智能开发套件中环境准备和架设的过程,希望对其他开发者起到避坑、缩短开发时间。 还是先简单介绍一下EASY EAI Nano人工智能开发
    发表于 06-10 10:32

    看直播 | 电机控制:如何使用恩智浦MBDT实现快速设计、开发部署

    直播预告 6月8日  15:15–15:45 MATLAB EXPO 2023年6月8日,恩智浦的技术专家将在MATLAB EXPO上发表题为 《电机控制:使用恩智浦 MBDT实现快速设计、开发
    的头像 发表于 06-04 13:45 777次阅读

    以太坊Layer2的技术方案介绍

    以太坊是当前最流行的智能合约平台之一,但它的交易速度和吞吐量仍然受限于其底层的共识算法和智能合约执行引擎。因此,以太坊社区一直在研究和开发
    的头像 发表于 04-28 11:33 3215次阅读