以太坊智能合约编程入门(一)

一起学:以太坊智能合约开发 课程介绍 无论在科技圈还是金融圈,“区块链”俨然成了最热的词汇。2016年,区块链写入了国家的十三五规划中;2017年,央行基于区块链技术的数字票据交易平台测试成功;同年,工信部发布了首个区块链参考架构标准。
经过2017年如火如荼的投资盛宴,区块链开始逐渐走向应用落地,业内都在积极探索使用场景。如金融领域的资产贸易、支付系统、金融服务,其他领域的电子商务、社交通讯、游戏娱乐等等。同时,BAT、迅... 阅读详情

原文地址:https://medium.com/@ConsenSys/a-101-noob-intro-to-programming-smart-contracts-on-ethereum-695d15c1dab4

1-ABBewYWJfdIFhgwBt8mfGQ.png

有些人说以太坊太难用了,现在就写一篇入门教程,讲一下怎么使用以太坊构建智能合约和应用。

  • 第一部分 总览关键的术语以及以太坊客户端和智能合约语言
  • 第二部分 讨论工作流以及dapp框架和工具
  • 第三部分 编程,快速编写测试,以及使用truffle开发一个智能合约dapp

第一部分 介绍

如果你还是加密货币行业的新手,不太了解比特币,更不知道它是怎么工作的,那么你应该先去看看Andreas Antonopoulos写的关于比特币的书,熟悉一下这个行业。然后再看看以太坊的白皮书。

如果你已经熟悉了加密货币,那么可以继续读下去了。在开始之前,你不需要知道加密经济学的所有计算机科学知识,也不必知道以太坊是如何改进比特币的那些论文。

起始示例

以太坊官方网站ethereum.org 上有一些示例。以及官方的文档。还有一个学习智能合约的好地方:dappsforbeginners,虽然这个网站可能已经过时了。

这篇文章的目的就是给这些示例做个补充,然后介绍一些有用的开发工具,帮助大家更容易地使用以太坊,智能合约,开发dapp。这篇文章只是从我个人的角度进行讲解,同时得到了ConsenSys的帮助。

基础概念

先看看一些术语:

公钥密码学。假设alice有一个公钥和一个私钥。她可以使用她的私钥来创建一个数字签名,然后bob可以使用alice的公钥来验证,看那个签名是不是真的是用alice的私钥发出的,是不是真的是alice发出的。当你创建了一个太坊或比特币钱包,那么那串长长的“0xdf…5f”地址就是公钥,而私钥保存在别的地方。像coinbase这样的比特币钱包服务商,替你保存着你钱包的私钥,当然你也可以自己保存私钥。如果你把钱包的私钥丢了,那么那个钱包里的所有资金就将永远丢失,所以,你最好备份好你的私钥。我曾经丢过私钥,那种感觉不好受。

点对点网络。像bittorrent一样,以太坊的所有节点都是分布式网络上的点,以太坊上没有中心服务器。[将来以太坊上将有一种混合的半中心服务器,这样能方便用户和开发者使用,这个后面再说]

区块链。区块链就像是一个公共账本,或是记录所有交易的数据库。

以太坊虚拟机。使用以太坊虚拟机你可以在以太坊上开发更强大的程序,比在比特币上开发的更强大。

节点。你可以运行一个节点,然后通过这个节点,使用以太坊虚拟机,可以读取以太坊区块链上的数据,或者向以太坊网络上写入数据。一个完全节点需要下载整个区块链。

矿工。网络上的节点的工作就是挖矿,处理区块链上的区块。你可以在这个地址查看当前以太坊的活跃矿工部分列表:stats.ethdev.com。

工作量证明(proof of wor)。矿工之间需要竞争去完成一些数学题目。第一个算出数学题目答案(区块链的下一个区块)的矿工将赢得一笔奖励:一些以太。然后每个节点都更新到那个区块。每个矿工都想赢得下一个区块,因此这激励着它们持续地更新,然后所有人都保持着一个真实的区块链,整个网络也由此达成了共识。[以太坊计划从pow转成pow与pos混合的机制,不过这不在这篇文章的讨论范围]

以太。或者简称eth。它是一个真正的数字货币,你可以用它来买东西。在这个交易所,你可以在上面交易。

gas。在以太坊网络上运行和存储数据需要耗费一定数量的eth。这样以太坊才能有效率。

dapp。去中心化的app,使用了智能合约的应用。dapp的目标是(应该是)拥有一个漂亮的智能合约界面,以及任意额外的功能,比如ipfs(一种在去中心化网络上存储和服务的方式,不过不是以太坊创建的)。dapp也能在一台中心服务器上运行,如果这台服务器能跟以太坊节点通信的话,它们也可以在本地的以太坊节点上运行。[与普通的webapp不同的是,dapp或许不是在服务器上的。它们或许使用区块链来提交交易然后获取数据,而不是通过一个中心化的数据库。用户使用一个钱包地址,把数据保存在本地,而不是使用典型的用户登录系统。很多方面的架构都与现在的web不一样]。

关于以上这些概念,可以看一看这篇好文章:https://media.consensys.net/time-sure-does-fly-ed4518792679

以太坊客户端,智能合约语言

开发和部署智能合约,不需要运行一个以太坊节点。可以查看下面的ide和api列表。但是如果你正在学如何运行一个以太坊节点,那么可以看一下这些基础部分,这也不难。

运行一个以太坊节点的客户端

以太坊有多个不同的客户端实现(这意味着你可以有多种方式与以太坊网络进行交互),包括c++,go,python,java,haskell,等等。为什么要这么多实现呢?因为不同的语言面向不同的人。而且这也拓展了以太坊网络的安全性和生态系统。还有一个基于gui的客户端,alethzero。

在写这篇文章的时候,我用的一直都是geth,go语言版本,有时候用一个叫做testrpc的工具,这个工具用的是python版本的客户端,pyethereum。现在我们用的是新工具ethersim,ethersim用的是ethereumjs。ethereumjs是一个javascript客户端,它不支持真正的区块链挖矿,所以它不是一个完整客户端,但是开发和测试的时候可以模拟挖矿。后面的例子会使用这些工具。

交互控制台。一旦你用了这些客户端,就有了一个节点,那么你就能和区块链进行同步,创建钱包以及发送接收eth了。在geth上,你可以通过javascript console来实现。或者通过json rpc(远程处理调用),使用一个命令比如cURL来通过url获取数据。不过本文的目的不涉及dapp开发,所以这个问题不多说。不过这些工具在debug,配置节点,使用命令行使用钱包的时候很有用。

在测试网络上运行一个节点。如果你安装了客户端,比如geth,然后在正在的网络上运行的话,它需要花一点时间来下载整个区块链,并与网络同步。(你可以在stats.ethdev.com 上查看最新的区块信息,然后把它跟你的客户端的节点log对比,看看你是否完全同步了)

但是在真正的网络上运行智能合约的话,你需要花费一些eth。不过你可以在本地的测试网络上免费地运行客户端。这样也不需要下载整个区块链,而且会创建以太坊网络的一个私有实例,因此对于开发来说就更快。

testrpc。你可以用geth来运行一个测试网络,但是有其他快速的方法,比如使用testrpc。testrpc会为你创建一批预存资金的账号。而且它也非常快,而且更易于开发和测试。你可以先用testrpc开始,然后等到你的合约像模像样了,在使用geth,要开始使用geth,只需要指定一个networkid就可以:geth-----netwokid“12345”。后面我会在例子中介绍testrpc的用法。[现在testrpc的开发者把重心都放在ethersim上了,把ethersim当作testrpc的替代品,我会更新这个实例,最终也使用ethersim。如果你想的话也可以一开始就使用ethersim]。

下面让我们谈谈编程语言,然后再进行真正的编程。

智能合约编程语言

使用solidity。开发智能合约的语言有好几种:solidity,有点像javascript;serpernt,类python语言;还有一个LLL,基于lisp的语言。以前serpent流行过一段时间,不过现在最流行的是solidity,solidity也更健壮,所以,我们用solidity。你跟喜欢python?那还是用solidity。

solc编译器。用solidity写好智能合约后,就用solc来编译。可以在这里进行安装。如果你想用solc,你也可以用一些机遇浏览器的编译器,比如solidiy real-time 编译器或者cosmo,不过后面的编程的例子是使用solc进行编译的。

web3.js api。在智能合约编译好,发送到网络上之后,你就可以通过以太坊web3.js javascript api来调用它了,并且可以创建跟这些合约互动的web app。

这些就是在以太坊上开发智能合约,构建dapp的基本工具。

未完待续。。。。。

推荐一个区块链新手入门的以太坊DApp开发教程:

http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=20180408csdnw

以太坊智能合约之如何执行智能合约? 区块链技术在顶级技术中占据主导地位的主要原因在于其去中心化。虽然区块链的主要目的是在没有中心的情况下维护交易记录,但为了实现自动化,智能合约被引入。那么在写完智能合约之后呢?在本文的这个以太坊智能合约教程中,我们将了解如何使用Truffle Ethereum和以太坊专用网络来执行智能合约。 我们将在以太坊智能合约教程中查看以下主题: 使用案例:保险流程中的智能合约 智能合约的好处 安装先决条件 ... 阅读详情

相关推荐

以太坊虚拟机EVM介绍,智能合约详解

指的是“一套以数字形式指定的承诺,包括合约参与方可以在上面执行这些承诺的协议”。早在1994年,美国计算机科学家尼克·萨博(Nick Szabo)就提出了智能合约的概念。智能合约是一种基于区块链技术的自动执行合约的计算机程序。它们是一组以代码形式编写的、在区块链上运行的规则和逻辑。智能合约定义了在满足特定条件时应该执行的操作,而无需中介方的干预。以太坊是最为著名的支持智能合约的区块链平台之一。在以太坊中,智能合约是用一种称为Solidity的编程语言编写的。

ydl1128的博客 5728

使用Bezier Paths[转]

使用UIBezierPath类可以创建基于矢量的路径。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。1.Bezier Path 基础UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。我们使用直线段去创建矩形和多边形,使用曲线段...

weixin_30867015的博客 320

以太坊入门【详解】

1.geth 是以太坊(Ethereum)网络中最常用的 Go 语言实现的客户端。注意:以太坊其实就是一个大的全局单例状态机,它的状态的改变就是靠交易来触发,而且交易时唯一可以触发状态的改变的事务。并非提款代码出错了,是因为这是合约的内部交易,并不是某一个账户发到另外一个账户的操作,而是内部函数的行为,被称为。使用有以太币的账号支付gas费用将该智能合约打包到区块链中,让所有节点都可以使用这个智能合约。在以太坊上使用 Solidity 编写的智能合约执行每一步操作都需要燃烧一定数量的 Gas。

violetevergaren的博客 1909

以太坊智能合约:从概念到实操指南

智能合约是一组自动执行预定义规则的代码,类似于我们生活中的自动售货机。当用户选择商品并支付后,售货机会自动释放商品,用户不必担心交易的信任问题,因为售货机按照预设的程序操作。类似地,信用卡的自动还款也是一种实现了智能合约逻辑的机制:在设定自动还款之后,到期时系统会自动扣款。智能合约的这一概念,在数字货币和区块链领域得到了更深入的应用和发展。2008年,一个化名为中本聪的人或团队发表了《比特币:一种点对点的电子现金系统》论文,这标志着比特币的诞生。

Reveone的博客 4905

【智能合约】Solidity 基础知识 | 以太坊智能合约编程语言

介绍一下以太坊的智能合约语言solidity

面向生活编程 8554

以太坊智能合约编程

这篇文章的目的是成为上述资料的补充,同时介绍一些基本的开发者工具,使入门以太坊,智能合约 以及构建 DApps(decentralized apps, 分布式应用)更加容易。我会试图按照我自己(依然是新手)的理解来 解释工作流程中的每一步是在做什么,我也得到了 ConsenSys 酷酷的开发者们的许多帮助。

如何开发一个以太坊nft 智能合约(一)

如何快速在以太坊上发布NFT

m0_66825737的博客 630

以太坊智能合约编程之菜鸟教程

译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队。如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下角Newsletter订阅邮件。本文的翻译获得了ConsenSys创始人Lubin先生的授权。

以太坊–智能合约开发介绍及环境搭建

智能合约(Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由Nick Szabo首次提出。 智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。...

小鹏linux的博客 2075

Solidity编程 - 构建以太坊和区块链智能合约的初学者指南

Solidity编程 - 构建以太坊和区块链智能合约的初学者指南

FOC电机控制中电流采样延迟补偿的原理和方法

摘要: FOC电机控制中,电流采样、计算与PWM更新存在固有延迟(约1.5个PWM周期),导致相位滞后,限制电流环带宽。主流补偿方法包括: 一阶前向预测法:基于历史电流值预测未来电流,抵消延迟,工程应用广泛; 相位超前补偿:通过s/z域校正器设计实现等效预测; 状态观测器法(如龙伯格观测器):通过电机模型闭环估计状态,兼具噪声抑制和参数辨识能力,但复杂度高。实际需注意参数敏感性、离散化精度及延迟时间校准,避免过补偿风险。一阶预测法因平衡效果与复杂度成为工业首选。

jifengzhiling的博客 2233

使用Python开发以太坊智能合约【DApp入门指南】

智能合约概述智能合约是运行在区块链上的自动化合约,能够执行预定的业务逻辑。以太坊是最流行的智能合约平台,提供了强大的开发和运行环境。Solidity基础Solidity是用于编写以太坊智能合约的编程语言,支持面向对象的编程风格。示例包括一个简单的投票合约,演示了如何创建提案、投票以及查询结果。使用Web3.py与以太坊交互Web3.py是一个Python库,允许与以太坊区块链进行交互。示例包括如何部署合约、进行投票以及查询提案。前端集成。

一键难忘的博客 3699

Excel数据透视表实战:分组折线图制作与动态分析指南

数据可视化是数据分析的关键环节,其核心原理在于将抽象数据转化为直观图形,以揭示趋势、对比差异。在众多图表类型中,折线图因其能清晰展示连续数据随时间或其他序列的变化趋势,而成为趋势分析的利器。其技术价值在于通过视觉编码,将多维数据关系降维呈现,从而辅助决策。在业务分析、运营监控等应用场景中,常需对比不同分组(如产品线、销售区域)在同一时间序列上的表现,这正是分组折线图要解决的核心问题。本文聚焦于利用Excel数据透视表这一强大工具,高效构建动态分组折线图,并深入探讨数据透视表在数据重塑和图表自动化中的实战应用

weixin_29057237的博客 382

Mopidy 命令行权威指南:mopidy 命令的语法、参数与子命令详解

Mopidy 是一款用 Python 编写的可扩展音乐服务器,能够同时从本地硬盘、网络电台以及 Spotify、SoundCloud 等在线服务播放音乐,并将所有来源的搜索结果合并、在同一个播放队列中混播。`mopidy` 命令行程序就是启动与运维这台音乐服务器的核心入口:本文以仓库中的 [docs/command.rst](https://link.gitcode.com/i/6de50ef2d

gitblog_00819的博客 369

NVIDIA DGX Spark实战:如何在桌面上轻松运行200B参数大模型(附配置教程)

本文提供了NVIDIA DGX Spark在桌面端运行200B参数大模型的完整实战指南。详细介绍了从硬件初始化、系统配置、容器化环境搭建,到模型加载、量化、推理流水线编写及性能调优的全过程。重点阐述了如何利用其统一内存架构和TensorRT-LLM等工具进行高效本地推理,并探讨了通过双机互联扩展以应对超大规模模型的方法。

i3j4k5的博客 784

URScript介绍

优傲机器人(Universal Robots)是丹麦工业协作机器人制造商,2005年成立,2015年被泰瑞达收购。其自研编程语言URScript基于Python语法,专为机器人控制优化,支持运动指令、IO控制等功能,具有类Python的简洁语法和实时性特点。URScript提供丰富的API,支持变量赋值、条件判断、循环及函数定义等编程结构,参数按值传递。用户可通过该语言在Polyscope界面编写程序,实现自动化任务。目前优傲在全球20多个办事处为多国客户提供服务。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 603

以太坊智能合约编程之带菜鸟入门教程

手把手带你走上智能合约编程之路 译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队。如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下角Newsletter订阅邮件。本文的翻译获得了ConsenSys创始人Lubin先生的授权。 有些人说以太坊太难对付,于是我们(译注:指Consensys, 下同)写了这篇文章来帮助大家学习如何利用以太...

学亮编程手记 2111

从零开始:IBM V3700控制器更换与机器代码升级全流程指南

本文详细介绍了IBM V3700存储系统控制器更换与机器代码升级的全流程指南。从前期准备、硬件更换到版本同步,逐步解析如何应对503错误等常见问题,确保系统稳定运行。通过实战案例和优化建议,帮助工程师高效完成维护任务,提升存储系统可用性。

weixin_28365523的博客 312

以太坊智能合约开发-《精通以太坊智能合约开发》学习总结实践

文章目录初探以太访智能合约remix小demo以太坊核心概念交易/事务( Transaction )区块参考 初探以太访智能合约 remix小demo https://remix.ethereum.org 目前尝试 Solidity 编程的最好方式是使用 Remixo Remix 是一个基于浏览器的 Solidity IDE , 它集成了 Solidity 编译器、运行环境 ,以及调试和发布工具。 使用浏览器打开网址 https://remix.ethereum.org 官方demo // SPDX-Lic

西京刀客 4071

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1572

基于LUT表对鱼眼图像进行畸变校正

当然也可以进行图像的畸变校正操作,已知相机的焦距为fx/fy,光心为cx/cy,像素大小为p(单位mm/pixel)对于畸变校正结果图中像素点(u,v),其对应的原图中的像素坐标(u',v')的计算流程描述如下。1)假设无畸变相机成像模型的焦距和光心与原相机相同,计算得到无畸变相机成像模型中归一化平面坐标(X,Y,Z),其中X=(u-cx)/fx,Y=(v-cy)/fy,Z=1。这里x'/y'的单位为像素。

On my way 639

以太坊智能合约

什么是智能合约? 智能合约是运行在区块链上的一段代码,代码的逻辑定义了合约的内容。 智能合约的账户保存了合约当前的运行状态 balance:当前余额 nonce:交易次数 code:合约代码 storage:存储,数据结构是一颗MPT树 Solidity是智能合约最常用的语言,语法上与JavaScript很接近 example 【payable】 以太坊规定如果合约账户要能接受外部转账,必须标注payable。 调用智能合约 如何调用智能合约 创建一个交易,接收地址为要调用的呢个智能合约的地址,dat

handsomeyinjun的博客 3339

Luma AI技术浅析(一)

是一款基于人工智能的3D内容生成平台,旨在通过深度学习技术实现高效、高质量的3D场景、物体和动画的生成。Luma AI 主要利用了等技术,以实现从图像、视频到3D模型的转换和生成。

m0_75253143的博客 1732

以太坊如何部署智能合约

以太坊社区开发并开源了非常好用的在线 Solidity 集成开发环境Remix,可以方便的在 Remix 中编写、部署、测试智能合约,Remix 提供了强大的自动完成,语法高亮,实时编译检查错误等。打开remix,界面如下: 在代码区输入一下合约代码: pragma solidity ^0.4.21; contract Phone { string public model; ...

zengchen73的专栏 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 深入浅出以太坊和智能合约
下一篇: 前端框架三巨头年度走势对比:Vue 增长率最高
落叶无声9
博客等级 码龄12年 443粉丝 343原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值