Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >链上部署智能合约

链上部署智能合约

作者头像
Al1ex
发布于 2023-09-07 02:19:07
发布于 2023-09-07 02:19:07
50800
代码可运行
举报
文章被收录于专栏:网络安全攻防网络安全攻防
运行总次数:0
代码可运行
文章前言

随着区块链技术的发展智能合约已经成为了区块链应用中不可或缺的一部分,以太坊作为一种基于区块链技术的去中心化平台,其智能合约功能更是被广泛应用于各种领域,本文将为大家介绍在以太坊链上部署智能合约的过程和注意事项,希望能够为大家带来一些帮助

智能合约

智能合约(Smart Contract)是一种基于区块链技术的自动化合约,它能够自动执行、管理和验证合约条款,智能合约是一段由计算机代码编写的程序,它被部署在区块链上并且能够自动执行其中定义的条件和操作,智能合约可以实现一系列复杂的业务逻辑,例如:数字货币的转移、贸易的结算、股票的发行和交易、保险的理赔等

智能合约的特点是去中心化、不可篡改和自动执行,由于智能合约被部署在区块链上,因此它不需要中心化的机构来管理和执行合约,也不会受到单点故障的影响,同时智能合约的内容被加密存储在区块链上,保证了合约的不可篡改性,智能合约能够自动执行其中定义的条件和操作,减少了人为干预的可能性,提高了合约的可信度和有效性,智能合约的应用场景非常广泛,尤其在金融、物流、保险、知识产权等领域具有巨大的潜力,智能合约可以帮助企业降低成本、提高效率、增强安全性,同时也能够为消费者提供更加便利和可信的服务

合约部署

智能合约在链上部署要经过以下步骤:

Step 1:编写智能合约

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// SPDX-License-Identifier: SimPL-2.0
pragma solidity ^0.6.8; 

contract HelloWorld {
    string public greeting;

    constructor() public {
        greeting = "Hello, World!";
    }
    function setGreeting(string memory _greeting) public {
        greeting = _greeting;
    }
}

Step 2:将上面的合约代码拷贝到https://remix.ethereum.org编译器中进行编译操作

然后拷贝字节码Bytecode:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b61030c806101166000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063ef690cc0146100f6575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610179565b005b6100fe610193565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b806000908051906020019061018f929190610231565b5050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102295780601f106101fe57610100808354040283529160200191610229565b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027257805160ff19168380011785556102a0565b828001600101855582156102a0579182015b8281111561029f578251825591602001919060010190610284565b5b5090506102ad91906102b1565b5090565b6102d391905b808211156102cf5760008160009055506001016102b7565b5090565b9056fea2646970667358221220995fc5abfc2eef29586818465f505c1afee4b62fdf8c743fd55fb4b32a8f530b64736f6c63430006080033

ABI:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "greeting",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_greeting",
        "type": "string"
      }
    ],
    "name": "setGreeting",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]

Step 3:在bejson中转义成字符串

http://www.bejson.com/jsonviewernew/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"greeting\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_greeting\",\"type\":\"string\"}],\"name\":\"setGreeting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]

Step 4:通过abi创建一个合约对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var abi=JSON.parse('[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"greeting\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_greeting\",\"type\":\"string\"}],\"name\":\"setGreeting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]')
contract = web3.eth.contract(abi)

Step 5:检查coinbase账户余额

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> miner.setEtherbase(eth.accounts[0])
true
> eth.coinbase
"0x84e0d961774b5ae49f2968b51bfce611096adace"
> eth.getBalance(eth.coinbase)
85999992654807192250
> balance=web3.fromWei(eth.getBalance(eth.coinbase),"ether")
85.99999265480719225
> 

注:如果这里的余额大于0,则继续,否则,开始挖矿,等你觉得差不多的时候再停止就OK

Step 6:解锁coinbase账户并使用coinbase账户来部署合约

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
personal.unlockAccount(eth.coinbase,'12345678')

Step 7:部署合约

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#命令格式:
var bytecode = "0x智能合约字节码"
var greeting = "Hello  World!"    
var deploy = {from: "0x账户地址",data: bytecode, arguments: [greeting]};    
var gas = web3.eth.estimateGas(deploy);
var tx = contract.deploy(deploy);

#执行示例
var bytecode = "0x608060405234801561001057600080fd5b506040518060400160405280600d81526020017f48656c6c6f2c20576f726c6421000000000000000000000000000000000000008152506000908051906020019061005c929190610062565b50610107565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100a357805160ff19168380011785556100d1565b828001600101855582156100d1579182015b828111156100d05782518255916020019190600101906100b5565b5b5090506100de91906100e2565b5090565b61010491905b808211156101005760008160009055506001016100e8565b5090565b90565b61030c806101166000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a41368621461003b578063ef690cc0146100f6575b600080fd5b6100f46004803603602081101561005157600080fd5b810190808035906020019064010000000081111561006e57600080fd5b82018360208201111561008057600080fd5b803590602001918460018302840111640100000000831117156100a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610179565b005b6100fe610193565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561013e578082015181840152602081019050610123565b50505050905090810190601f16801561016b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b806000908051906020019061018f929190610231565b5050565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102295780601f106101fe57610100808354040283529160200191610229565b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061027257805160ff19168380011785556102a0565b828001600101855582156102a0579182015b8281111561029f578251825591602001919060010190610284565b5b5090506102ad91906102b1565b5090565b6102d391905b808211156102cf5760008160009055506001016102b7565b5090565b9056fea2646970667358221220995fc5abfc2eef29586818465f505c1afee4b62fdf8c743fd55fb4b32a8f530b64736f6c63430006080033"
var greeting = "Hello  Al1ex!" 
var deploy = {from:"0x84e0d961774b5ae49f2968b51bfce611096adace", data:bytecode,arguments: [greeting]};    
var gas = web3.eth.estimateGas(deploy);
var contracts = contract.new(deploy);

Step 8:查看交易池中的交易信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
txpool.status
eth.getBlock("pending",true).transactions

Step 9:进行挖矿操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
miner.start(1);admin.sleepBlocks(1);miner.stop();

Step 10:查看合约信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
contracts

Step 11:验证合约是否部署成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eth.getCode(contracts.address)

Step 12:调用合约方法,很多人可能会好奇,这里为啥greeting没有变化?这是因为状态变量和全局变量的差异性所导致的,有兴趣的可以自我构建一个合约来进行验证以下

文末小结

本文介绍了以太坊智能合约在以太坊链上的步骤操作流程,主要从合约编写、合约编译、ABI、Bytecode等到链上创建部署合约、调用合约函数等方法

公链基础安全专题到此结束,后续也会分享其余公链安全的内容,敬情期待~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七芒星实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在以太坊私有链上部署智能合约
上节简单介绍了基于以太坊搭建私有链以及挖矿和交易,在部署智能合约之前请确保私有链上的账户有余额,因为部署智能合约需要消耗 Gas ,而 Gas 需要 ether 币来兑换。
字节流动
2020/06/02
1.4K0
在以太坊私有链上部署智能合约
智能合约:写一个hello world
在这个合约代码里面,我们定义了一个名为 "Hello" 的合约。在合约初始化时,保存了一个字符串。例如,传入 "hello world",每次调用 say() 函数时将返回该字符串
yichen
2020/05/04
7820
metaForce佛萨奇2.0智能合约系统开发详情
简单解释下,我们定义了一个名为hello的合约,在合约初始化时保存了一个字符串(我们会传入hello world),每次调用say返回字符串。 把这段代码写(拷贝)到Browser-Solidity,如果没有错误,点击Details获取部署代码,如:
开发v_syn520110
2022/10/27
4130
从零构建以太坊(Ethereum)智能合约到项目实战——第20章 搭建自己的私有链网络
使用此博文进行安装配置:https://blog.csdn.net/w88193363/article/details/79402074
墨文
2020/02/28
1.8K0
从零构建以太坊(Ethereum)智能合约到项目实战——第20章 搭建自己的私有链网络
在Spectrum测试链上部署智能合约
"0xa4aa2105cc3e6b6a83faaaf72782d1e9a68e90ca"
rectinajh
2018/10/22
9470
在Spectrum测试链上部署智能合约
【附代码】如何在私有链上编写、部署与以太坊进行交互的智能合约
原文:How To Write, Deploy, and Interact with Ethereum Smart Contracts on a Private Blockchain 作者:jack_schultz 翻译:无阻我飞扬 摘要:本文作者以极长的篇幅给出了在私有区块链上编写、部署以及与以太坊进行交互的智能合约的较为完整的代码、相关细节步骤、用户界面等。作者是希望借助他这篇文章,大家可以自行在私有以太坊区块链上编写并部署一个智能合约,建议用PC端打开,以下是译文。 这里的规则是:如果通读本文,则
区块链大本营
2018/05/10
1.9K0
智能合约开发环境搭建及Hello World合约
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。 就先学习任何编程语言一样,入门的第一个程序都是Hello World。今天我们来一步一步从搭建以太坊智能合约开发环境开始,讲解智能合约的Hello World如何编写。 开发环境搭建 Solidity安装 强烈建议新手使用Browser-Solidity来进行开发。 Browser-Solidity是一个基于浏览器的Solidity,就可以不用安装Solidity,本文的Hello World教程也将基于Browse
Tiny熊
2018/06/21
1.1K0
第二课 如何实现以太坊最简智能合约“Hello World”的运行
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。 就先学习任何编程语言一样,入门的第一个程序都是Hello World。今天我们来一步一步从搭建以太坊智能合约开发环境开始,讲解智能合约的Hello World如何编写。
辉哥
2018/08/10
6320
第二课 如何实现以太坊最简智能合约“Hello World”的运行
以太坊智能合约
智能合约是一个运行在安全环境下的计算机程序,它可以直接控制数字资产,本篇文章我们主要介绍如何在公链环境中编译、部署、运行合约~
Al1ex
2021/07/21
1.3K0
以太坊智能合约
2019-03-14 通过rpc发布和调用以太坊合约
参考2018-11-22 Debug以太坊go-ethereum实战 启动geth,并attach一个geth执行创建账户的命令:
oracle3
2022/05/13
4600
2018-03-09 Solidity智能合约开发测试环境搭建
以太坊合约开发工具非常多,但是功能上各有优缺点,因此如何选择搭配一套比较好用的开发和测试环境就非常重要。我在开发实践中摸索发现了一种方便快捷的开发和测试方法。
oracle3
2022/05/13
5560
2018-03-09 Solidity智能合约开发测试环境搭建
智能合约DAPP功能系统开发详情介绍(现成演示版)
简单解释下,我们定义了一个名为hello的合约,在合约初始化时保存了一个字符串(我们会传入hello world),每次调用say返回字符串。 把这段代码写(拷贝)到Browser-Solidity,如果没有错误,点击Details获取部署代码,如:
开发v_syn520110
2022/10/25
4170
以太坊智能合约开发入门
中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>
netkiller old
2018/02/04
5.8K0
部署一个私链以太坊的智能合约
部署智能合约的步骤为: 启动一个以太坊节点 (例如geth或者testrpc)。 使用solc编译智能合约。 => 获得二进制代码。 将编译好的合约部署到网络。(这一步会消耗以太币,还需要使用你的节点
rectinajh
2018/05/17
2.4K0
用Vyper实现智能合约 - 一种 Python 方法
很多学习智能合约的程序员都会学 Solidity 语言,网上有大量关于 Solidity 的在线教程和书籍。而 Solidity 与 Truffle 框架的结合,简直就是开发智能合约的杀手级组合。几乎以太坊区块链上所有的的智能合约都是用 Solidity 编写的。
Tiny熊
2022/05/25
1K0
用Vyper实现智能合约 - 一种 Python 方法
以太坊智能合约开发第四篇:实现Hello World智能合约
绝大部分开发者学习一门语言的时候,都是从输出一个 Hello World 开始。我们也从实现一个 Hello World 合约为切入点,开始进入智能合约的世界吧。 环境准备 安装好 node 和 npm。这里对node和npm的安装过程,不做详细介绍。本篇依赖的环境版本: Node : v8.9.0 Npm: 5.5.1 在你的代码目录里,创建名为 smartcontract 的文件夹,并创建如下两个文件 package.json 、 Hello.sol 。 smartcontract ├──
Marser
2018/06/25
1.3K0
【刘文彬】【精解】开发一个智能合约
合约也称合同、协议,是甲乙双方参与的,制定一系列条目规范双方权利与义务的文件。智能合约是电子化的,自动执行的,去中心化的,具有不可抵赖性,本质上它是一段代码,依托于区块链技术,它可以做很多事情,基于以太坊的智能合约可以让你的区块链扩展出任何你想要的功能。
圆方圆学院
2019/03/14
4940
Forsage魔豹联盟DAPP系统开发方案
简单解释下,我们定义了一个名为hello的合约,在合约初始化时保存了一个字符串(我们会传入hello world),每次调用say返回字符串。 把这段代码写(拷贝)到Browser-Solidity,如果没有错误,点击Details获取部署代码,如:
开发v_syn520110
2022/10/27
3750
蚂蚁区块链第13课 如何搭建一个DAPP应用(以姓名年龄为例)
本文介绍如何使用Cloud IDE完成name-age智能合约的编译,获取其ABI和二进制码信息。 接着,本文介绍基于EXPRESS框架搭建的前端页面,完成已部署智能合约的调用,完成了相关功能的呈现。 本文假设用户已经熟悉蚂蚁BAAS的Cloud IDE和Solidity开发编译,不熟悉的查看辉哥的其他文档完成知识准备。
辉哥
2019/04/18
1.3K0
蚂蚁区块链第13课 如何搭建一个DAPP应用(以姓名年龄为例)
在以太坊上部署一个确定性的合约
在基于 EVM 的协议[4]上部署一个新的合约,通常会产生一个无法事先知道的合约地址。幸运的是,EIP-1014[5]中介绍了一种预先计算合约地址的方法。
Tiny熊
2022/11/07
9940
在以太坊上部署一个确定性的合约
推荐阅读
相关推荐
在以太坊私有链上部署智能合约
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档