以太坊Python智能合约开发指南

2023-11-12

在以太坊上获得一个基本的智能合约是一个很简单的事,只需google查询“ERC20代币教程”,你会发现有关如何做到这一点的大量信息。以编程方式与合约交互完全是另一回事,如果你是一个Python程序员,那么教程就很少。所以写这个Python中的以太坊智能合约开发指南。

按我的统计对我们来说幸运的是,2017年Web3.py的第4版发布,这意味着现在比以往更容易运行python脚本并观察区块链上发生的神奇事情。像幽灵般的。

Piper Merriam,Jason Carver以及其他所有在Web3.py上努力工作以使我们其他人生活更轻松的人大声呼喊,在Sempo,我们正在使用以太坊来使灾难般的响应更加透明,而且它是只有Web3.py才能真正实现。

设置

首先我们进行设置,确保我们安装了相关的python库。

Python库无处不在,但它们的用途是什么?

有很多与以太坊相关的python库,但是当人们谈论以太坊时,有两个会出现很多:Web3.py和Pyethereum。乍一看,你应该使用哪一个并不明显。

Pyethereum

以太坊虚拟机(EVM)的Python实现。反过来,EVM是以太坊协议的一部分,它实际运行智能合约中的代码并确定其输出。因此,如果你想在Python中运行以太坊节点,那么Pyethereum是一个很好的起点。

即使你非常高兴在不运行自己的节点的情况下运行智能合约,Pyethereum仍然是一个很好的库,它包含许多功能,可以执行有用的功能,例如从私钥计算用户的地址等等。

Web3.py

用于实际与以太坊区块链交互的库。我们谈论的事情包括在账户之间转移以太网,发布智能合约以及触发附加现有智能合约的功能。它受到流行的JavaScript库Web3.js的启发,它将成为我们在本教程中使用的主库。

好的,少说多做!

起初我尝试使用Python3.5版本,但在运行时我遇到了问题,显然是由Python的类型提示造成的。基于Python3.6创建虚拟环境解决了这个问题,所以我建议你做同样的事情。

继续并pip-install web3 (确保你获得版本4)。

除非你喜欢花钱,否则你需要在以太坊测试网上使用钱包,例如Ropsten和其他大量以太玩法。一个简单的方法是下载Chrome的Metamask扩展,并从那里创建一个新帐户。

确保你还选择左侧的’Ropsten Test Net’。

即使你的现有钱包中包含真正的以太币,我也强烈建议你为开发目的创建一个新的钱包。我们将使用私钥做一些相对无法预测的事,所以如果它们不小心变成公共主网络的话就不会有问题(公私钥?)

为新创建的钱包获取测试Ether非常简单:只需访问faucet.metamask.io并点击“请求来自faucet的1个 以太”。对于我们将要做的事情,这应该是充足的。

最后,因为我们将在没有托管我们自己的节点的情况下使用Ropsten TestNet,我们需要一个可以连接Blockchain的供应商。Infura.io适用于此,所以去那里创建一个免费帐户。记下Ropsten TestNet的提供者URL(看起来像https://ropsten.infura.io/FE2Gfedcm3tfed3)。

部署智能合约

使用Python来部署智能合约而不运行自己的节点是非常困难的,所以我们将在这一步上做点儿手脚。对于许多智能合约用例,你只需要执行一次。

正如我之前提到的,有关如何部署ERC20合约的百万条指南,因此我们将部署一些不同的(并且更方便地更短)。

问:谁喜欢在互联网上分享他们的意见?

大家都喜欢?

好答案。以下我称之为“Soap Box”肥皂盒的智能合约允许任何人向区块链广播他们想要的任何意见,在永恒的剩余时间(给予或接受)可以看到它。

但是有一个问题:只有支付了必要的0.02以太网费用的地址才能播出他们的意见。听起来不太公平,但就这样。

Remix,以太坊的在线代码编辑器非常出色,因此在那里创建一个新文件并粘贴以下代码。它是用Solidity(Smart Contracts的编程语言)编写的。如果代码没有太多意义并不重要,我们将在稍后详细介绍相关部分,但最终这是一个Python教程。

pragma solidity ^0.4.0;
contract SoapBox {
// Our 'dict' of addresses that are approved to share opinions   
//我们批准分享意见的地址的“字典” 
    mapping (address => bool) approvedSoapboxer;
    string opinion;
     
    // Our event to announce an opinion on the blockchain  
	//我们的事件发布对区块链的意见 
 
    event OpinionBroadcast(address _soapboxer, string _opinion);
// This is a constructor function, so its name has to match the contract   
//这是一个构造函数,所以它的名字必须与合约相匹配 

    function SoapBox() public {
    }
    
    // Because this function is 'payable' it will be called when ether is sent to the contract address.
	//因为这个函数是“支付”,所以当以太网被发送到合约地址时将被调用。 
    function() public payable{
        // msg is a special variable that contains information about the transaction
		// msg是一个特殊变量,包含有关交易的信息 
        if (msg.value > 20000000000000000) {  
            //if the value sent greater than 0.02 ether (in Wei)
			//如果发送的值大于0.02 ether(在Wei中) 
            // then add the sender's address to approvedSoapboxer 
			//然后将发件人的地址添加到approvedSoapboxer 
            approvedSoapboxer[msg.sender] =  true;
        }
    }
    
    
    // Our read-only function that checks whether the specified address is approved to post opinions.
	//我们的只读函数,用于检查指定地址是否被批准发布意见。 
    function isApproved(address _soapboxer) public view returns (bool approved) {
        retu
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以太坊Python智能合约开发指南 的相关文章

  • solidity通用模式访问限制

    通用模式 访问限制 访问限制是智能合约的一种通用模式 但你不能限制任何人获取你的智能合约和交易的状态 当然 你可以通过加密来增加读取难度 但是如果你的智能合约需要读取该数据 指加密的数据 其他人也可以读取 你可以通过将合约状态设置为私有来限
  • 如何在私有链实现分叉

    待更新 比特币源码 https blog csdn net g2com
  • 10分钟内用Ezo和Python构建以太坊Oracle

    上一篇 我写了用Web3 js构建以太坊Oracle 这个练习给了我一些新的Web3 js 1 0版本知识 许多新的好东西可供选择而且使用它实现一个简单的oracle非常容易 但是 显然必须有更好的方法 Instant Oracles 只需
  • 【以太坊源码】以太坊黄皮书参数

    由于参数比较多 直接贴出来比较杂乱 我将其整理在百度脑图 按照黄皮书章节顺序进行分类 并调整了部分常数顺序 需要查阅特定的参数 可以使用ctrl F直接查询 由于百度脑图不支持下标 或者我不知道 所有参数统一没用下标 并在备注中说明是否有下
  • 使用 sCrypt 实现数独游戏合约

    我们在 BSV 区块链上实现了一个数独游戏智能合约 利用之前介绍过的一种合约范式可以将游戏中寻找解题方案的过程外包上链 因为求解数独问题的计算工作量会随着其行列数快速增长 实际上它也是一个 NP 完全 问题 不过我们可以借由 sCrypt
  • Node.js web3.js编译、部署智能合约

    Node js web3 js编译 部署智能合约 供参考脚本 https github com Saturday24 Smart Contracts Script 1 编译脚本 a install web3 solc fs path b 编
  • FISCO BCOS 七、MetaMask测试Ganache搭建的私有网络

    目录 背景介绍 所需软件 1 Ganache 2 MetaMask 操作 第一步 启动Ganache 第二步 使用MetaMask连接Ganache 第三步 开始测试 背景介绍 本文主要介绍如何使用Ganache 在本地搭建以太坊私有网络
  • 区块链之java调用智能合约(二)部署智能合约

    前言 上一节 已经说过 如何的创建一个合约 如何编译合约 然后在java中调用 但是呢 这些还远远不够 那么还差哪些呢 现在就是如何将创建的智能合约部署的对应的共链 私链 测试链中了 需要部署后 才能真正的使用 现在就讲讲如何部署智能合约
  • 以太坊私有链搭建教程

    写在前面 写这个主要是为了记录下自己的学习过程 同时如果能帮助到同样想搭建私有链的朋友们 那是再好不过了 Step 1 环境搭建 私链搭建有三宝 环境 终端和钱包 我这里用到的是Geth客户端 所以环境当然就是指Go语言运行环境 Ether
  • 和数集团聚焦区块链人才培养推动数字经济场景落地

    随着互联网时代的不断推进 全球经济结构已呈现多元化形态 尤其是大数据 云计算 人工智能等技术革新进步 数字经济迎来了快速发展的时期 从更深层次方面理解 数字经济也契合创新 协调 绿色 开放 共享的新发展理念 为我们国家经济社会发展注入了新动
  • 在 BSV 上构建机器学习竞赛市场

    我们提出了一种在 BSV 上实现去中心化机器学习 ML 市场的新方法 任何人都可以通过发布附带奖励的智能合约来外包机器学习任务 任何提交表现最佳模型的人都将通过区块链交易获得奖励 而无需通过中心化机构 如何在 BSV 上进行机器学习竞赛 K
  • OpenZeppelin集成Truffle编写健壮安全的合约

    原文 http truffleframework com tutorials robust smart contracts with openzeppelin 因为智能合约往往涉及金钱 保证Soldity代码没有错误 以及足够的安全是非常根
  • ERC20智能合约-带销毁功能

    SPDX License Identifier MIT pragma solidity 0 8 0 dev Interface of the ERC20 standard as defined in the EIP interface IE
  • 网络化,元宇宙的门槛

    如果森林中的一棵树倒下 但周围没有人听到 那它是否会发出声音 这一思想实验可以追溯到数百年前 这个实验之所以经久不衰 部分原因是它很有趣 而它之所以很有趣 是因为它耐人寻味并且融人了哲思 人们通常认为 上面这个问题最初是由主观唯心主义哲学家
  • 你也可以构建私有区块链网络

    这是我如何构建私有区块链网络的一篇文章 你也可以 没有什么比自己构建区块链更能帮助理解区块链了 以下是我们将在这篇文章中完成的内容 下图我们以前可能见过 但基本上以太坊区块链网络只是很多EVM 以太坊虚拟机 或连接到每个其他节点的 节点 来
  • 区块链技术实战学习路线图

    请大家前往深入浅出区块链主站 获取最新内容 本章的文章越来越多 本文是一个索引帖 方便找到自己感兴趣的文章 你也可以使用左侧的分类 标签及搜索功能 有新文章时会更新本文 建议大家加入收藏夹中 如果你觉得本站不错 欢迎你转发给朋友 引言 给迷
  • solc安装指定版本

    1 系统linux ubuntu20 04 2 solc安装指定版本 在编译的时候报错 Error Data location must be storage or memory for constructor parameter but
  • 浅谈以太坊智能合约的设计模式与升级方法

    浅谈以太坊智能合约的设计模式与升级方法 1 最佳实践 2 实用设计案例 2 1 控制器合约与数据合约 1 gt 1 2 2 控制器合约与数据合约 1 gt N 2 3 控制器合约与数据合约 N gt 1 2 4 控制器合约与数据合约 N g
  • 区块链应用开发(智能合约的开发和WeBASE合约IDE的使用)

    文章目录 四 智能合约的开发和WeBASE合约IDE的使用 一 实验概述 二 实验目标 三 实验环境及建议 四 实验步骤 4 1 启动Webase 4 2 智能合约开发 4 2 1 合约功能设计 4 2 2 存证合约开发 4 2 3 工厂合
  • Go语言实现区块链与加密货币-Part3(交易优化,单机模拟多节点通信)

    交易 二 在这个系列文章的一开始 我们就提到了 区块链是一个分布式数据库 不过在之前的文章中 我们选择性地跳过了 分布式 这个部分 而是将注意力都放到了 数据库 部分 到目前为止 我们几乎已经实现了一个区块链数据库的所有元素 今天 我们将会

随机推荐

  • R-应用流行病学和公共卫生-5.导入

    rio包 我们推荐的 R 包是 rio 名称 rio 是 RI O 输入 输出 的缩写 它的功能import 和export 可以处理许多不同的文件类型 例如 xlsx csv rds tsv 当您提供这些函数的文件路径 包括 csv 之类
  • 【React】hooks的原理

    https medium com ryardley react hooks not magic just arrays cd4f1857236e 参考了这篇文章 对hooks的实现有初步的了解 具体的还是得研究一下官方的 这篇文章用了一个简
  • pptp和l2tp有什么区别

    PPTP协议是点对点隧道协议 其将控制包与数据包分开 控制包采用TCP控制 用于严格的状态查询及信令信息 数据包部分先封装在PPP协议中 然后封装到GREV2协议中 L2TP是国际标准隧道协议 它结合了PPTP协议以及第二层转发L2F协议的
  • 转:基于 Python 和 Scikit-Learn 的机器学习介绍

    我叫Alex 我在机器学习和网络图分析 主要是理论 有所涉猎 我同时在为一家俄罗斯移动运营商开发大数据产品 这是我第一次在网上写文章 不喜勿喷 现在 很多人想开发高效的算法以及参加机器学习的竞赛 所以他们过来问我 该如何开始 一段时间以前
  • 7天学完Spring:基础学习结束,关于Spring事务及其传播机制

    目录 前言 一丶Spring中事务的实现 lt 1 gt MySQL中的事务使用 回顾 lt 2 gt 手动操作事务 lt 3 gt 自动操作事务 1 gt 作用域说明 2 gt 参数说明 3 gt Transactional 工作原理 二
  • PPPoE Server防止ARP***

    在一般情况下 只要有一台计算机感染ARP病毒就可能造成此网段中所有计算机上网时断时续或缓慢等其它不正常现象 为了保障网络正常运行 针对ARP病毒的猖獗和破坏性 我们也已有一些应对措施 这些措施有的尽管能解一时之急 但不能从根本上彻底解决问题
  • HIVE-执行命令的几种方式 和 hive -e 和hive -f的使用

    第一种 在bash中直接通过hive e命令 并用 gt 输出流把执行结果输出到制定文件 hive e select from test hour rate2 where year 2019 gt tmp output 1 txt 第二种
  • 流明(lux)和坎德拉;

    流明是光照度 坎德拉是光强 流明是光通量的单位 cd是光强单位 光强是单位立体角的光通量 照度是单位面积的光通量 尼特是亮度单位 1尼特 1CD m 2 1 lx 1 流明每平方米 面发光度 光照度 纸面的反射系数 发光强度1坎德拉 cd
  • C++中for( : )用法

    常用的遍历数组的写法 随机定义的数组 int array 10 1 2 3 4 5 6 7 8 9 10 for int i 0 i lt 10 i cout lt lt array i lt lt 输出 1 2 3 4 5 6 7 8 9
  • Vuex安装时报错“Could not resolve dependency: npm ERR peer vue@“^3.0.2“ from vuex@4.0.2”

    报错的原因 安装的版本过高的原因造成的 解决方法 1 可以npm view vuex versions json查版本 找适合的版本 不要最新的 2 npm install vuex 3 6 2 save根据版本下载 这样就可以了
  • 第七届蓝桥杯省赛C++A/B组 最大比例

    X星球的某个大奖赛设了 M 级奖励 每个级别的奖金是一个正整数 并且 相邻的两个级别间的比例是个固定值 也就是说 所有级别的奖金数构成了一个等比数列 比如 16 24 36 54 其等比值为 3 2 现在 我们随机调查了一些获奖者的奖金数
  • sprintf, snprintf, _snprintf, sprintf_s 等的区别

    先放结论 1 在支持snpritf的编译器 只使用int snprintf char buffer size t count const char format argument 无论成功或者失败 都会返回字符串的总长度 不包括结束符 如果
  • 计算机网络之网络层

    网络层涉及的问题 1一般是网关 18 是外网 内网有两类 1 存储转发包交换 2 提供给传输层的服务 3 非连接服务的实现 4 面向连接服务的实现 5 虚电路和数据包的比较 OSPF开放式最短路径优先 自治域 cisco路由器 4种延迟 传
  • 批量修改文件夹名称——规则重命名(Excel+Python脚本两种方式)

    批量修改文件夹名称 场景 在进行神经网络训练的时候 有些时候获取到的数据集的命名是不规则的 不便于直观理解数据的结构 由此需要进行批量重命名 本文提供Excel Python脚本两种方式 Excel 如下图所示 文件是命名是乱序无规则的 在
  • QT信号槽跨线程传递QDataStream问题

    第一点 查看QDataStream类 可以发现这一句 Q DISABLE COPY QDataStream Q DISABLE COPY是QT的一个宏 顾名思义 意思为禁用拷贝构造函数 如果要知道这个宏的实现 可以继续F2 所以第一个结论
  • Android 全局异常处理之UncaughtExceptionHandler

    在日常开发中可能有需要将机器奔溃日志保存本机 以便保存到本地 那么该如何做呢 实现UncaughtExceptionHandler接口 public class ApplicationCrashHandler implements Thre
  • upload-labs 环境搭建(docker)

    1 切换到root用户 2 在docker镜像仓库搜索upload labs镜像 3 下载镜像 4 查看本地镜像库 看是否下载成功 如下图就有了下载的镜像 5 运行镜像 生成镜像 docker run d p92 80 镜像id 92端口是
  • Linux学习笔记一:vmware安装Ubuntu虚拟机并进行联网设置

    目录 概述 新建虚拟机 安装Ubuntu 安装后重启失败 联网设置 修改分辨率 概述 主要参考讯为的教程 没有使用讯为提供的镜像 为了自己动手把相关工具安装一遍 采用了官方的Ubuntu18镜像 过程中与教程难免存在差异 遇到问题再针对解决
  • 总结:Git 撤销操作

    1 还未添加到暂存区 git checkout filename 执行命令后 会回退到未修改之前的状态 2 已经添加到暂存区 git reset HEAD filename 执行命令后 会回退到工作区之前的状态 3 已经 commit 但是
  • 以太坊Python智能合约开发指南

    在以太坊上获得一个基本的智能合约是一个很简单的事 只需google查询 ERC20代币教程 你会发现有关如何做到这一点的大量信息 以编程方式与合约交互完全是另一回事 如果你是一个Python程序员 那么教程就很少 所以写这个Python中的