首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何编写 NFT 智能合约

译文出自:登链翻译计划[1] 译者:翻译小组[2] 校对:Tiny 熊[3] 简介 在之前教程中,我们向你展示了如何使用我们生成艺术库[4]来创建一个头像集合[5],生成符合要求 NFT 元数据...虽然不满足先决条件读者可能会跟着做,甚至可以部署一个智能合约,但如果你对你项目很认真,我们强烈建议找一个知道自己在做什么开发者。...智能合约开发和部署可能是非常昂贵,而且在安全缺陷和 bug 方面也不宽容。 设置本地开发环境 我们将使用 Hardhat,一个行业标准以太坊开发环境,来开发、部署和验证我们智能合约。...编写智能合约 在这一节中,我们将在Solidity[12]中编写一个智能合约,允许任何人通过支付所需数量以太币+Gas 来铸造一定数量 NFT。...另外,邀请你一个朋友连接他们钱包,通过调用mintNFT函数来铸造一些 NFT。 总结 我们现在有一个已部署智能合约,可以让用户从我们合约中铸造 NFT。

1.1K70
您找到你想要的搜索结果了吗?
是的
没有找到

如何理性看待智能合约

通过智能合约能够实现: · 自动、公正地执行合约; · 无需中间人介入。 在执行合约时,如果无需获得另一方信任,那么事情效率会更高。 那么,智能合约究竟是什么?...智能合约并不智能智能”似乎指合约天生具有智能性,但并非如此。智能合约智能体现在,执行合约无需另一方合作。确保合约执行是智能合约强大之处。 ?...智能合约会考虑到所有情况,遵循合约精神,即使在最不明朗情况下也做出公平裁决。换句话说,智能合约像一名出色法官。...比特币智能合约语言与以太坊区别在于,以太坊是图灵完备。也就是说,以太坊智能合约语言Solidity能执行更复杂合约,但分析难度更大。 ?...那么问题来了,Bob需要相信代币代表房子,而且需要确保获取代币意味着房子所有权转给他。 此外,即使政府机构证明代币代表房子,但如果代币被偷了,那会怎么样?房子会属于小偷吗?如果代币丢失怎么办?

36840

golang接口合约

接口类型 1.接口类型具体描述了一系列方法集合,实现这些方法具体类型是这个接口类型实例 2.一个类型如果拥有一个接口需要所有方法,那么这个类型就实现了这个接口 package main import...( "fmt" ) //定义一个接口类型Person type Person interface { //描述了一个需要实现Say方法,返回类型是error Say() error }...//定义一个类型 type Tsh struct{} //给类型定义独占方法,参数返回值和Person接口要求一样,就意味着实现了该接口 func (t *Tsh) Say() error { fmt.Println...("我是tsh") return nil } func main() { //实例化 tsh := Tsh{} //直接调用实例方法 tsh.Say() //该测试方法要求传入Person...类型,因为我Tsh实现了Person接口,所以我Tsh也可以传入 test(&tsh) } //测试方法要求传入Person类型 func test(p Person) { p.Say()

35120

如何智能合约审计?

本文是作者结合自己所写一份智能合约代码来讲述智能合约审计要点技术文章,并包含了对Solidity语言可能遇到几种危险攻击介绍。对于以太坊智能合约开发者而言有一定参考和学习价值。...你有没有考虑过如何审计一个智能合约来找出安全漏洞? 你可以自己学习,或者你可以使用这份便利一步步指南来准确地知道在什么时候该做什么,并对合约进行审计。...我已经研究过很多智能合约审计,并且我已经找到了从任何合约中提取所有重要信息最常规步骤。 在本文中,你将会学到以下内容: 生成对一个智能合约完整审计报告所需所有步骤。...让我们直接开始审计合约吧: 如何审计一个智能合约 为了教会你如何进行审计,我会审计我自己写一份合约。这样,你可以看到可以由你自行完成真实世界审计。...因为类似于比特币脚本或者以太坊智能合约这样区块链应用无法直接获取链外数据,所以就需要一种可以提供链外数据并可以与区块链进行数据交互服务。

1.3K20

如何审计一个智能合约

这是一篇比较完整评估智能合约安全文章。...当下区块链技术增长对分布式共识展示出了无与伦比机会,智能合约应用在之前时间里面出现了百万美元丢失,(如:非常有名DAO Attack事件),这令我们对于智能合约应用安全性产生了非常大担忧。...确保在智能合约发布前进行一次完整代码审计过程,尽可能保证完整审计代码是接近用户最终接触到最终版本智能合约版本。...分析失败处理部分 合约在事件触发失败时候如何响应,如一些bug或者发生漏洞?检查合约是否会暂停或者资金是否有管理风险。 分析代码通用性 所有的使用到库或者工具是否已经安装到了最新版本?...所以无论如何对于之前没有经过审计代码使用必须非常消息谨慎,如果一些经过了非常严格审计代码是可以正常使用。 分析外部调用 状态是否在外部调用以后发生改变?

1K40

如何与以太坊智能合约交互?

智能合约交互必须遵循ABI 规范,这是一套规则和定义,用于规范以太坊生态系统中智能合约通信。 在这篇博客中,我将以简化方式介绍,根据 ABI 规范,必须如何提交数据给区块链,以触发智能合约。...有两种可能情况,你要么有智能合约 JSON ABI,要么没有。 有智能合约 JSON ABI 智能合约 JSON ABI 是一个 JSON 文件,在你构建智能合约时由 solidity 编译器生成。...有智能合约接口 如果你有你想调用智能合约接口,solidity 将为你做大部分工作。 你只需要将接口导入到智能合约文件,实例化一个接口类型对象,并传递智能合约地址,你就可以开始了。....); 没有智能合约接口 如果你没有合约接口,那么你将不得不构建整个消息。 你将需要合约地址,方法签名(方法名称和输入参数类型用逗号分隔)和你希望提交参数(也用逗号分隔)。...,不管你与智能合约交互方式如何,如果你使用智能合约地址是错误,你仍然可以提交交易,没有任何检查。

1.7K40

python智能合约编程-如何编译pyeos

/tinypy下,用于运行python智能合约,编译过程和编译libraries/python下python一样,依次执行下面的命令: 3.2 编译pyeos 下面就可以开始编译pyeos了 转到主目录...--debug 进入调试模式,在这个模式下有许多针对调试调整,如支持在智能合约代码里设置断点调试程序,如块产生不再有会产生超时异常,执行智能合约也不会有时间限制等等。...接下来看下如何执行命令: 执行下面的命令设置python环境变量,请将/dev/pyeos修改成正确pyeos代码所在目录 cd 到build/programs,用下面的命令创建data-dir目录:...再在data-dir下创建config.ini,内容如下 几个要注意参数如下: genesis-json 指定是创世块配置文件 producer-name 用于指定producer账号,这些账号已经在...如果你看到类似下面的输出,那么程序就运行成功了 下篇来介绍下如何在python中调用钱包等api接口

1.5K80

如何编写一个拍卖智能合约

因为存放是受益人地址当然是可以接受以太币。uctionEndTime是一个时间戳变量,表示拍卖结束时间。...beneficiary = beneficiaryAddress; auctionEndTime = block.timestamp + biddingTime; } block.timestamp 向合约提供当前区块时间戳...external则表示这个方法是在外部被调用,也就是被合约用户通过接口调用。逻辑上也不复杂,pendingReturns会记录所有出价成功的人(注意不是拍卖成功)和他们总出价。...amount; return false; } } return true; } 拍卖结束后,没有赢得最终拍卖那些出价者需要有一个接口进行退款...我这里设置受益人地址说:0x5B38Da6a701c568545dCfcB03FcB875f56beddC4 获取下变量初始值看看, 看着都没啥问题。

53230

如何利用OpenZeppelin编写可升级智能合约

尽管基于区块链软件从不变性中获得了可观收益,但仍需要一定程度可变性才能修复错误和改进产品。 在这篇文章中,我们将学习: 1.为什么我们需要升级智能合约?2.了解升级是如何进行?...为什么我们需要升级智能合约 默认情况下,以太坊中智能合约是不可变。一旦创建了它们,就无法对其进行更改,从而有效地充当了参与者之间牢不可破合约(Tiny熊注:指因为不变性提供了参与者信任)。...升级是如何进行 我们可以通过几种方式升级合约。 最明显方式将是这样: •创建并部署新版本合约。•手动将所有状态从旧合约迁移到新合同。 这似乎可行,但是有几个问题。...3.您还必须与所有用户联系,并说服他们开始使用新合同并处理同时使用两个合约,因为用户迁移速度很慢。 更好方法是使用带有接口[5]代理合约,其中每个方法都将委托给实现合约(包含所有逻辑)。 ?...这与以前方法类似,但是这里代理合约没有接口方法,只有 fallback 回退函数,因此,如果更改合约方法,则无需更改代理地址。 这是一个基本解释,足以让我们处理可升级合约

3.6K61

如何在Etherscan中支持合约接口调用

期待结果 默认情况下,etherscan只能查看合约上发生tx,无法调用合约方法。...Contract Code 实现步骤 合并合约:将所有import导入合约和库(library)都写到一个文件中 验证合约:进入verify contract页面,指定已部署合约地址和名称 编译合约:...选择Compiler版本和优化方案 第一步比较繁琐,如果你使用了open-zeppelin之类通用库,需要翻翻好多个目录才能把依赖合约凑齐并放置在一个文件当中,而且特别要注意加上版本宏定义pragma...第二步填入合约地址和名称,注意名称必须和源文件中合约名称一致。etherscan会扫描出代码中所有的合约和库名称。可以说这里名称就是寻常程序main函数。...我做法是先去查看truffle compile之后json文件,比如此处CacContract.json文件,搜索version关键字,定位到compiler处: "compiler": {

1.4K10

用Go语言调用智能合约,做成Restful Api接口

智能合约调用是实现一个 DApp 关键,一个完整 DApp 包括前端、后端、智能合约及区块链系统,智能合约调用是连接区块链与前后端关键。 我们先来了解一下智能合约调用基础原理。...智能合约运行在以太坊节点 EVM 中。因此要 想调用合约必须要访问某个节点。...智能合约运行过程是后端服务连接某节点,将 智能合约调用(交易)发送给节点,节点在验证了交易合法性后进行全网广播,被矿工打包到 区块中代表此交易得到确认,至此交易才算完成。...除了 RPC,以太坊也为开发者提供了 json- rpc 接口,本文就不展开讨论了。 接下来介绍如何使用 Go 语言,借助 go-ethereum 源码库来实现智能合约调用。...这是有固定 步骤,我们先来说一下总体步骤,以下面的合约为例。 image 步骤 01:编译合约获取合约 ABI(Application Binary Interface,应用二进制接口)。

1.1K30

智能合约没有你想那么智能

智能合约,有时也是非常愚蠢 “smart”一词总会让人觉得智能合约会很智能。然而,真实情况,往往并不是这样。也许,智能合约独特之处就在于不需要第三方确认。...按照合约已既定结果强大执行力是智能合约独特之处,而不是智能合约本身存在什么智能。 ​...然而,事实恰恰相反,智能合约根本不智能智能合约是完全基于制定规则,除了合约之内条条款款,并不会进行其他方面的考虑,这是不符合法律本质。...智能合约,貌似并不简单 受以太坊社区对智能合约大量集中宣传影响,也许你会认为,智能合约只应用于以太坊平台之上,这种看法是错误。...于2016年5月28日完成众筹,共募集1150万以太币,在当时价值达到1.49亿美元。 事实上,黑客找到了一种不遵循合约制定者意愿就可以获取钱财方式。

46730

如何编写一个拍卖智能合约-续

简单来讲就是,前一种拍卖大家都能互相看到对方出价,而后一种则看不到。 上一篇文章我们实现了一个简单open auction,本篇我们来讨论下如何实现一个blind auction。...盲拍有个核心问题就是如何保证数据安全性,而区块链加密特性正是解决该问题关键。 我们实现思路是这样,在拍卖期间,竞拍者并不会真正发送自己竞价,而是发送一个本次竞价哈希值版本。...等待拍卖结束时,在reveal阶段才会公开他们竞拍。 盲拍另一个需要解决问题是怎样保证约束力。就是如何防止竞拍人在赢得拍卖后不发送他们货币,也就是防止他们乱喊价。...在公开拍卖场景是不存在这个问题,因为公开拍卖是真实以太币转移,在区块链上是公开,不可篡改也没法抵赖。...修改器(Modifiers)可以用来轻易改变一个函数行为。比如用于在函数执行前检查某种前置条件。 比如这里onlyBefore表示传入时间不能早于当前区块链时间。下面会看到具体应用例子。

32040

如何编写一个可升级智能合约

写在前面 阅读本文前,你应该对以太坊、智能合约及Solidity语言有所了解,如果你还不了解,建议你先看以太坊是什么 当智能合约出现bug 一方面正式由于智能合约不可修改特性,因为只要规则确定之后,...我们知道一个智能合约包含两部分: 代码逻辑和数据,而代码逻辑又是最容易出问题部分, 如在实现如下合约时,由于手抖在写addTen()时,10写成了11。...,可是这时会有一个尴尬问题,原来合约已经有很多人使用,如果部署新合约,老合约数据将会丢失。...数据合约及控制合约 那么如何解决上面的问题了,一个解决方案是分离合约数据,使用一个单独合约来存储数据(下文称数据合约),使用一个单独合约写业务逻辑(下文称控制合约)。...我们来看看代码如何实现。

1.3K10

如何编写一个投票功能智能合约

前面一篇文章带你用一个简单模拟银行合约讲解了solidity基本语法特性。你大概已经对如何编写智能合约有了基本认识。但是要编写产品级别的智能合约,只有这些基础是远远不够。...这篇文章我们来一起编写一个稍微复杂一些投票合约,来进一步学习solidity。 电子投票功能要解决主要问题是如果分配投票权以及如何避免数据被篡改。...本篇实现合约思路是对于每次投票表决都创建一个合约合约创建者就是投票委员会主席,可以给不同账户投票权利。拥有投票权账户可以自己投票也可以委托给他所信任的人代理投票。...; //获取投票数量 } 首先定义了两个结构体,用来表示对象。...(uint => Funder) funders; 接续看代码, address public chairperson; //投票委员会主席,也是合约创建者 //所有参与投票的人 mapping

47430

如何实现一个定制智能合约地址

我学习智能合约一个主要途径就是在 DappRadar 看各个热门应用源代码,前些天我在看  dice2win 时候发现一个有趣现象:虽然它自从上线以来已经多次部署过智能合约,不过让人好奇是这些地址有一个特点...如何实现呢,其实 ethereum 源代码里已经给出答案: func CreateAddress(b common.Address, nonce uint64) common.Address {...address 和 nonce 决定,如果我们希望用一个全新账户来部署合约,那么当它第一次部署时候,nonce 必然是 0,于是乎可以推断合约地址完全是由 address 决定,顺着这个思路,...,指定你想要 pattern 即可,一旦匹配成功,我们就可以通过生成账户来部署合约了,不过在部署前你需要确保账户里有足够以太来支付部署费用。...我在 ropsten 测试网络部署了一个地址前缀定制为 ABCD 开头合约: contract 需要说明是,源代码匹配时候使用了正则,这可能有点慢,如果追求更高效率,可以牺牲一下匹配灵活度,

82420
领券