1 链上智能合约Dapp开发技术部署-德赢Vwin官网 网
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(选择一个特别的数字)和/或不能用的端点来实现。推荐做法是,为了测试你用一个替代数据目录和端口,这样就不会意外地和实时运行的节点冲突(假定用默认运行。

审核编辑:符乾江

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

    关注

    8

    文章

    7002

    浏览量

    88938
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68518
收藏 人收藏

    评论

    相关推荐

    dap协议在DApp开发中的作用

    随着区块技术的不断发展,去中心化应用(DApp)逐渐成为技术领域的热门话题。DApp以其去中心化、透明性和安全性的特点,为用户和
    的头像 发表于 11-22 15:43 189次阅读

    Arm推出GitHub平台AI工具,简化开发者AI应用开发部署流程

    专为 GitHub Copilot 设计的 Arm 扩展程序,可加速从云到边缘侧基于 Arm 平台的开发。 Arm 原生运行器为部署云原生、Windows on Arm 以及云到边缘侧的 AI
    的头像 发表于 10-31 18:51 1940次阅读

    不是挂上智慧灯杆屏, 就叫智慧灯杆显示屏了!

    不是挂上智慧灯杆屏, 就叫智慧灯杆显示屏了!
    的头像 发表于 09-29 16:05 360次阅读
    不是挂<b class='flag-5'>上智</b>慧灯杆屏, 就叫智慧灯杆显示屏了!

    [技术] 【飞凌嵌入式OK3576-C开发板体验】llama2.c部署

    MCU 上部署。以下是 llama2.c 在 OK3576 开发板上的部署步骤。 工程克隆 首先我们将源码克隆下来:https://github.com/karpathy/llama2.c.git
    发表于 09-18 23:58

    百度前视觉技术部韩钧宇加入长安智驾

    近日,自动驾驶领域迎来一则重要人事变动,百度前视觉技术部资深经理韩钧宇正式加入长安汽车智能驾驶研发团队,担任关键职务,并直接向长安汽车首席智能驾驶技术官陶吉汇报工作。这一举措无疑为长安
    的头像 发表于 08-27 15:30 443次阅读

    PerfXCloud大模型开发部署平台开放注册

    PerfXCloud 介绍 PerfXCloud是澎峰科技为开发者和企业量身打造的AI开发部署平台。它专注于满足大模型的微调和推理需求,为用户提供极致便捷的一键部署体验。 PerfX
    的头像 发表于 07-02 10:27 372次阅读
    PerfXCloud大模型<b class='flag-5'>开发</b>与<b class='flag-5'>部署</b>平台开放注册

    鸿蒙OS开发:【一次开发,多端部署】(视频应用)

    随着智能设备类型的不断丰富,用户可以在不同的设备上享受同样的服务,但由于设备形态不尽相同,开发者往往需要针对具体设备修改或重构代码,以实现功能完整性和界面美观性的统一。OpenHarmony为开发
    的头像 发表于 05-25 16:29 4535次阅读
    鸿蒙OS<b class='flag-5'>开发</b>:【一次<b class='flag-5'>开发</b>,多端<b class='flag-5'>部署</b>】(视频应用)

    鸿蒙OS开发:【一次开发,多端部署】(音乐专辑页面)

    基于自适应和响应式布局,实现一次开发、多端部署音乐专辑页面。
    的头像 发表于 05-25 16:21 789次阅读
    鸿蒙OS<b class='flag-5'>开发</b>:【一次<b class='flag-5'>开发</b>,多端<b class='flag-5'>部署</b>】(音乐专辑页面)

    HarmonyOS开发案例:【一次开发,多端部署-音乐专辑】

    基于自适应和响应式布局,实现一次开发、多端部署音乐专辑页面。
    的头像 发表于 05-13 16:48 679次阅读
    HarmonyOS<b class='flag-5'>开发</b>案例:【一次<b class='flag-5'>开发</b>,多端<b class='flag-5'>部署</b>-音乐专辑】

    HarmonyOS开发案例:【一次开发,多端部署(视频应用)】

    随着智能设备类型的不断丰富,用户可以在不同的设备上享受同样的服务,但由于设备形态不尽相同,开发者往往需要针对具体设备修改或重构代码,以实现功能完整性和界面美观性的统一。OpenHarmony为开发
    的头像 发表于 05-11 15:41 1440次阅读
    HarmonyOS<b class='flag-5'>开发</b>案例:【一次<b class='flag-5'>开发</b>,多端<b class='flag-5'>部署</b>(视频应用)】

    鸿蒙实战开发-本地部署、SmartPerf 编译部署指导文档

    telnet [部署机器ip地址] 9000。 如果显示端口连接失败 可能是防火墙未对9000 端口放开即可。 最后 如果大家觉得这篇内容对学习鸿蒙开发有帮助,我想邀请大家帮我三个小忙: 点赞,转发,有
    发表于 05-09 14:23

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

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

    HarmonyOS开发技术全面分析

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

    MBD工具的云部署

    “云技术用于不会用于汽车开发“。说到云部署在汽车行业的应用,业界曾经认为云技术并不适合用在汽车行业的产品开发。知识产权保护、数据的安全、流程
    的头像 发表于 02-18 13:48 478次阅读
    MBD工具<b class='flag-5'>链</b>的云<b class='flag-5'>部署</b>

    区块系统软件开发与应用

    区块技术是近年来备受瞩目的创新技术,被广泛应用于金融、供应管理、物联网等领域。区块系统软件开发
    的头像 发表于 01-10 18:18 2507次阅读