以太坊智能合约开发第四篇:实现Hello World智能合约

solidity0.7.1以上本地编译部署配置 由于truffle的solc list 最高只有0.7.1,笔者使用的是0.8.0,因此有了本文 一、solc 1.安装solcjs npm install solc 2.官方文档 GitHub - ethereum/solc-js: Javascript bindings for the Solidity compiler 3. Compile.js 用于编译合约,生成bytecode和abi const fs = require("fs"), s... 阅读详情

原文发表于:以太坊智能合约开发第四篇:实现Hello World智能合约

绝大部分开发者学习一门语言的时候,都是从输出一个 Hello World 开始。我们也从实现一个 Hello World 合约为切入点,开始进入智能合约的世界吧。

环境准备

安装好 nodenpm。这里对node和npm的安装过程,不做详细介绍。本篇依赖的环境版本:

Node : v8.9.0
Npm: 5.5.1

在你的代码目录里,创建名为 smartcontract 的文件夹,并创建如下两个文件 package.jsonHello.sol

smartcontract
├── Hello.sol
└── package.json

package.json 文件里,添加如下依赖包配置:

{
  "name": "smartcontract",
  "version": "0.0.1",
  "dependencies": {
    "fs": "0.0.1-security",
    "solc": "^0.4.21",
    "web3": "^0.20.0"
  }
}

fs模块用于文件的相关操作
solc模块是编译器
web3模块是以太坊提供的工具包,主要用于与合约的通信

接下来执行 npm install 下载相关的依赖包。

编写合约代码

环境准备好后,就可以开始编写合约代码了。 打开 Hello.sol 文件,编写代码如下:

//pragma关键字:版本申明。
//用来指示编译器将代码编译成特定版本,以免引起兼容性问题
//此处不支持0.4.0之前的编译器,也不支持0.5.0之后的编译器(条件为 ^)
pragma solidity ^0.4.0;

//contract关键字:合约申明
//和Java、PHP中的class类似
//此处是申明一个名为Hello的合约
contract Hello {

    //public: 函数访问属性(后续文章为详细阐述)
    //returns (string): 定义返回值类型为string
    function say(string name) public returns (string) {
   
   
        return name;
    }
}

代码很简单。就实现了用户输入什么字符串,合约就原样返回的操作。

接下来,我们需要编写 合约部署 脚本。

编写合约部署脚本

smartcontract 目录下,新建名为 deploy.js 的文件。代码如下:

//设置web3连接
var Web3 = require('web3');
//http://localhost:7545 为Ganache提供的节点链接
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:7545'));
//读取合约
var fs = require('fs');
var contractCode = fs.readFileSync('Hello.sol').toString();
//编译合约代码
var solc = require('solc');
var compileCode = solc.compile(contractCode);

console.log(compileCode);

//获取合约abi和字节码
var abi = JSON.parse(compileCode.contracts[':Hello'].interface);
var byteCode = compileCode.contracts[':Hello'].bytecode;
//创建合约对象
var VotingContract = web3.eth.contract(abi);
//部署合约,并返回部署对象
var deployedContract = VotingContract.new({
    data:byteCode,
    from:web3.eth.accounts[0],  //部署合约的外部账户地址
    gas:750000        //部署合约的矿工费
});
console.log(deployedContract);

代码里我加上了简单的注释。这里解释一下 abi 这个概念。

abi全称是 Application Binary Interface,即应用程序二进制接口。简单的说,就是合约对外的接口描述

需要注意的是,矿工费gas为750000。以太坊上每笔交易的执行(被矿工打包)都会被收取一定数量的gas。gas的目的是限制执行交易所需的工作量,同时为执行支付费用。当EVM执行交易时,gas将按照特定规则被逐渐消耗,无论执行到什么位置,一旦gas被耗尽,将会触发一个 out of gas 异常。当前调用帧所做的所有状态修改都将被回滚。如果执行结束,还有gas剩余,这些gas将会返还给发送账户。因此,如果部署时抛出 out of gas 的异常,我们可适当的提高gas值。

部署

在当前目录下,执行 node deploy.js 命令。我们在部署脚本里将 compileCode 变量打印出来了,粗略看看就行:

{ contracts:
   { ':Hello':
      { assembly: [Object],
        bytecode: '6060604052341561000f57600080fd5b61016c8061001e6000396000f300606060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063d5c6130114610046575b600080fd5b341561005157600080fd5b6100a1600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061011c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100e15780820151818401526020810190506100c6565b50505050905090810190601f16801561010e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61012461012c565b819050919050565b6020604051908101604052806000815250905600a165627a7a72305820ff14cafd1df21e1edf19eff7598bc82a98940cc0fe045d6107d04bb224014f990029',
        functionHashes: [Object],
        gasEstimates: [Object],
        interface: '[{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]',
        metadata: '{"compiler":{"version":"0.4.21+commit.dfe3193c"},"language":"Solidity","output":{"abi":[{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"say","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":
一起学:以太坊智能合约开发 课程介绍 无论在科技圈还是金融圈,“区块链”俨然成了最热的词汇。2016年,区块链写入了国家的十三五规划中;2017年,央行基于区块链技术的数字票据交易平台测试成功;同年,工信部发布了首个区块链参考架构标准。
经过2017年如火如荼的投资盛宴,区块链开始逐渐走向应用落地,业内都在积极探索使用场景。如金融领域的资产贸易、支付系统、金融服务,其他领域的电子商务、社交通讯、游戏娱乐等等。同时,BAT、迅... 阅读详情

相关推荐

如何用 Solidity 创建一个“Hello World智能合约

Solidity 编程语言的 “Hello world

ChainlinkO的博客 1760

投票Dapp创建

投票Dapp创建 环境搭建 # 初始化npm包管理工具 mkdir voteDapp npm init npm install web3@0.20.1 solc@0.4.22 ganache-cli # 启动ganache 默认 http://localhost:8545 ./node_modules/.bin/ganache-cli -h 192.168.1.114 -p 8989 编...

攻城老湿的博客 251

Solidity智能合约开发入门:从Hello World到实战

智能合约区块链技术的核心组件,作为运行在分布式网络上的自治程序,它通过Solidity等专用语言实现业务逻辑。Solidity作为以太坊生态的主流开发语言,采用类JavaScript语法但引入了gas费用、状态变量等区块链特有概念。理解智能合约的工作原理需要掌握交易机制、数据存储位置等基础知识,这些特性使其在DeFi、NFT等场景展现独特价值。本文以经典的Hello World示例为切入点,演示如何使用Remix IDE进行合约编译部署,并详细解析包含权限控制、gas优化在内的工程实践要点,为开发者提供智

weixin_26945061的博客 317

智能合约智能合约的概念与实现

智能合约是运行在区块链网络上的自动化合约。它们是以代码形式编写的,预先定义了合约条款和执行条件。一旦条件满足,智能合约便会自动执行相应的操作,如资金转移、信息更新等,无需人为干预。智能合约作为区块链技术的重要组成部分,正在逐步改变各行各业的运行模式。通过理解智能合约的工作原理及其应用场景,企业和开发者可以更好地利用这一技术,创造出更加高效、安全和透明的商业解决方案。

weixin_39372311的博客 2799

体验开发一个DApp的流程-简单投票DApp

开发准备 主要学习开发一个DApp的流程,合约的设计与逻辑不是重点,所以对于投票合约内容做了简化。 基本知识 DApp中的D指的是decentralization,DApp的意思就是去中心化的应用。 ganache是相对于geth更加方便的一个区块链测试平台,项目中使用ganache。 总体流程 我们首先安装一个叫做 ganache 的模拟区块链,能够让我们的程序在开发环境中运行。 写一个合约并部署到 ganache 上。 然后我们会通过命令行和网页与 ganache 进行交互。 环境要求 要求我们预

文杰的博客 2083

智能合约--如何实现可升级的智能合约

智能合约通俗点说就是写在区块链上面的代码,代码里面编写着严谨完善的规则,一旦某个用户满足了合约里面的规则条件,就会触发里面的代码,执行某个方法

知识的共享,拓宽视野,深化思考,获得新的启发. 5587

智能合约开发环境搭建及Hello World合约

如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。 就先学习任何编程语言一样,入门的第一个程序都是Hello World。今天我们来一步一步从搭建以太坊智能合约开发环境开始,讲解智能合约Hello World如何编写。

深入浅出区块链 1424

Solidity智能合约开发 — 1-以太坊开发工具和部署

solidity以太坊开发工具和部署

qincheng168的博客 6802

以太坊简单的智能合约Hello World”的部署以及运行

一、环境准备 在开始正式编写简单的智能合约之前,需要搭建好的环境如下: ①安装Geth 下载地址:https://geth.ethereum.org/downloads/ ②安装Solidity 刚开始学习的阶段可以直接使用基于浏览器的Remix,来编写、编译智能合约。 二、正式开发 1. 启动环境(打开一个命令行窗口执行如下代码) geth是一个以太坊客户端,利用...

zqq_2016的博客 1988

带你玩转以太坊智能合约的"Hello World"

学习目标 使用solidity语言撰写智能合约 开发前的准备 Ubuntu环境下Atom编辑器安装及使用 安装所需工具 安装nvm 安装node 安装npm 启动testrpc 建立项目 目录结构 新建HelloWorld合约 代码说明 编译 部署 与合约互动 加入新方法 1.学习目标 了解智能合约 简单环境搭建 能够利用solidity编写Hello World

Bonjour~ 1万+

部署以太坊智能合约Hello World

以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链平台。在以太坊开发应用,首先需要安装其客户端基于Go语言的Geth, 官网为:https://github.com/ethereum/go-ethereum。 1.进入命令行窗口 2.在命令行窗口输入 geth --datadir "E:\geth\devchain" --dev console 输入命...

王较瘦的博客 4714

嘿,程序员!手把手教你写出智能合约"Hello, World"

区块链大本营出品参与 | Arvin、波波由于Dapp(去中心化应用)涉及到智能合约概念、以太坊区块链机制等更为基础的知识点,仅从编程角度来讲解Dapp开发的入门,不免给人以空中楼阁、镜花水月的感受。所以,以太坊这份面向Dapp新手的开发教程,从去中心化应用最基础的知识点开始,一步一步介绍如何用以太坊客户端开发出一个最简答的智能合约,也就是Dapp的后端代码。尽管这份Dapp开发入门教程成文已久,

区块链大本营 2657

2.3 智能合约的技术实现

信任的原理是点与点的链接,存在于物理和数字空间,存在于真实世界与虚拟世界,它或许存在于某一个空间,或 者存在于两个不同的空间,这两个空间有着天然的链接,是分布式的,没有中心化的存在。信任关系通过算法转化为代码,代码形成程序,程序驱动着链接,而信任 的链接是在一个系统里,经过注册、登记、交易,一切都在程序里进行,一切都在0和1之间转化。这里没有权威,没有意见领袖。这是一个纯天然的社区,一个去...

2456

solidity实现智能合约教程(1)-ERC20合约

solidity实现智能合约教程,ERC20合约,solidity,智能合约学习,智能合约源码

路漫漫其修远兮 吾将上下而求索 4090

理解智能合约

【汇新云】为大家定期更新文章,【汇新云】IT软硬件项目商务平台 0x00 前言 理解智能合约对理解区块链技术至关重要。我们先来看下什么是智能合约智能合约是 1990s 年代由尼克萨博提出的理念,几乎与互联网同龄。由于缺少可信的执行环境,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先看到了区

qq_39353009的博客 6557

solidity实现智能合约教程(3)-空投合约

solidity实现智能合约教程(3)-空投合约,ERC1155,ERC721,ERC20,空投合约,批量转账合约

路漫漫其修远兮 吾将上下而求索 6384

智能合约编写实例

前言本文主要介绍智能合约的工作原理及其部署过程。合约部署流程一般来说,部署智能合约的步骤为1: 启动一个以太坊节点 (例如geth或者testrpc)。 使用solc编译智能合约。 => 获得二进制代码。 将编译好的合约部署到网络。(这一步会消耗以太币,还需要使用你的节点的默认地址或者指定地址来给合约签名。) => 获得合约的区块链地址和ABI(合约接口的JSON表示,包括变量,事件和可以调用的方法

张童鞋 4万+
上一篇: 以太坊智能合约开发第二篇:理解以太坊相关概念
下一篇: 以太坊智能合约开发第六篇:truffle开发框架
智能合约开发
博客等级 码龄10年 13粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值