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

    文章

    7314

    浏览量

    93965
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73135
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    从设计到部署:AI即服务平台开发深度剖析

    从顶层设计到最终部署,一个成功的AI即服务平台开发是一项复杂的系统工程,它融合了软件工程、数据科学和运维技术的精髓。
    的头像 发表于 11-13 14:16 196次阅读

    湖南移动携手华为在湘潭大学完成5G-A超级上行技术部署

    近日,湖南移动联合华为在5G-A技术创新领域再获重大突破——双方在湘潭大学成功完成5G-A超级上行技术部署。依托华为F/A SUL(辅助上行)核心方案,此次部署实现5G单用户上行峰值速率突破
    的头像 发表于 10-21 10:01 332次阅读

    【米尔RK3576开发板免费体验】1、开发环境、镜像烧录、QT开发环境搭建以及应用部署

    微处理器推出的嵌入式模组,具备超高性 能、丰富的拓展接口和边缘算力,适用于边缘计算设备、商用机器人、AI 商显、智能车载终 端、智慧电力等。 开发板的硬件连接如下 1、Linux_SDK构建和工具
    发表于 07-14 11:26

    软通动力中标扬子江药业信息技术部基础架构与安全咨询项目

    软通动力成功中标扬子江药业集团信息技术部基础架构与安全咨询项目,将充分发挥自身专业咨询能力,为扬子江药业集团未来3-5年的IT基础架构与信息安全建设提供顶层规划与实施路径,携手共赴高质量发展新征程。
    的头像 发表于 06-11 11:36 848次阅读

    HarmonyOS5云服务技术分享--Serverless抽奖模板部署

    测试服务PTS 希望这篇教程能帮你快速上手!如果部署过程中遇到问题,欢迎在评论区留言交流~ 也欢迎关注我的技术博客,每周更新HarmonyOS开发实战技巧。祝各位开发者一次
    发表于 05-22 20:25

    ElfBoard技术实战|ELF 2开发板本地部署DeepSeek大模型的完整指南

    ELF 2开发板本地部署DeepSeek大模型的完整指南
    的头像 发表于 05-16 11:13 2280次阅读
    ElfBoard<b class='flag-5'>技术</b>实战|ELF 2<b class='flag-5'>开发</b>板本地<b class='flag-5'>部署</b>DeepSeek大模型的完整指南

    显示屏EMC电磁兼容性测试整改:助搭上智能化快车

    深圳南柯电子|显示屏EMC电磁兼容性测试整改:助搭上智能化快车
    的头像 发表于 04-22 11:20 744次阅读
    显示屏EMC电磁兼容性测试整改:助搭<b class='flag-5'>上智能</b>化快车

    首创开源架构,天玑AI开发套件让端侧AI模型接入得心应手

    正式提出“智能体化用户体验”方向,并启动“天玑智能体化体验领航计划”。更值得注意的是,其三大AI工具的发布——天玑开发工具集、AI开发套件
    发表于 04-13 19:52

    手把手教你把coze扣子智能体接入CSK6大模型开发板实现听新闻自由

    前言 实操演示 路说明[img][/img]示例中包含3条路,分别为 ● 路2: 可通过web对话页调用扣子智能体节点,最终将大模型结果输出到对话页面上。 云端服务接入扣
    发表于 04-03 14:57

    【幸狐Omni3576边缘计算套件试用体验】DeepSeek 部署及测试

    部署的相关流程,包括模型介绍、部署方案、RKLLM 库、编译和运行、效果演示等。通过板端人工智能大模型的部署,展示了该开发板在处理边缘计算
    发表于 03-21 19:31

    在英特尔哪吒开发套件上部署DeepSeek-R1的实现方式

    随着人工智能技术的快速发展,企业对 AI 模型的部署方式有了更多选择。本地部署 DeepSeek-R1 模型具有以下显著优势,使其成为许多企业和开发者的首选。
    的头像 发表于 03-12 13:38 875次阅读
    在英特尔哪吒<b class='flag-5'>开发</b>套件上<b class='flag-5'>部署</b>DeepSeek-R1的实现方式

    《AI Agent 应用与项目实战》阅读心得3——RAG架构与部署本地知识库

    实践RAG技术开发者来说是非常有价值的参考。 本人由于时间关系暂时腾不出太多时间投入实际部署本地知识库,并且考虑到这本书成书是在去年,书中提到的例子是利用Llama3,而当下可以考虑
    发表于 03-07 19:49

    RK3588开发板上部署DeepSeek-R1大模型的完整指南

    DeepSeek作为国产AI大数据模型的代表,凭借其卓越的推理能力和高效的文本生成技术,在全球人工智能领域引发广泛关注。DeepSeek-R1作为该系列最新迭代版本,实现了长文本处理效能跃迁、多模态
    发表于 02-27 16:45

    添越智创基于 RK3588 开发部署测试 DeepSeek 模型全攻略

    DeepSeek 模型的部署与测试,开启这场充满挑战与惊喜的技术探索之旅。 RK3588 开发板:AI 性能担当 RK3588 开发板基于先进的 8nm LP 制程工艺精心打造,其硬
    发表于 02-14 17:42

    东软IndustraMind智能体平台成功部署DeepSeek

    随着东软全面智能化战略的深入推进,东软积极拥抱AI、大数据等前沿技术,通过对东软自研技术及产品不断迭代,让算法优化升级,应用开发部署效果持
    的头像 发表于 02-08 10:46 997次阅读