![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
区块链
文章平均质量分 81
web3、区块链、NFT
甄齐才
倚楼听风雨,淡看江湖路。
展开
-
玩以太坊链上项目的必备技能(内联汇编 [inline assembly]-Solidity之旅十八)
在回答这个问题之前,我们来看看每个新的编程语言诞生都是为了解决当前编程语言无法解决,或者说使用当前编程语言解决起来比较麻烦,那么,新的编程语言就在这样的环境下应运而生,当然咯,并不是所有新编程语言都是为了解决当前编程语言不能解决的问题,才被开发出来,而是……(此处不便说出缘由,毕竟它也不是本文的重点)。以下是一个简单的示例,函数接受两个参数,并将它们的和作为返回值,看看使用。允许您执行一些仅仅靠 Solidity 无法实现的逻辑,比如,指向特定的。,敢断言,那一行不是我写的,其他行也不是我写的。原创 2022-12-28 20:21:06 · 739 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(库 [library]-Solidity之旅十七)
它本质上意味着,与合约不同,您不能在一个库中定义状态变量。为了在合约中使用任何库,我们需要首先告诉合约该库可以操作哪种数据类型。作为开发者的您,想必对项目中重复使用的工具函数,抽取到一个公共中,以便可以在您项目中的其它位置可调用。最后,当库函数成为数据类型本身的一部分时,我们可以在其对象上调用该方法,如我们上面的契约所示,即。因为库是一个独立的实体,它不能继承任何其他的库或合约。有些类似,但它并不是一个合约,它包含了可能多个消费者合约共有的功能,这有助于避免冗余。,因为它不会修改合约的状态。原创 2022-12-24 21:21:05 · 1737 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(Constant 和 Immutable 状态变量-Solidity之旅十六)
编译器生成的合约创建代码将在返回合约之前修改合约的运行时代码,方法是将对不可变量的所有引用替换为分配给它们的值。如果要将编译器生成的运行时代码与实际存储在区块链中的代码进行比较,则这一点很重要。不可变量可以在声明时赋值,不过只有在合约的构造函数执行时才被视为视为初始化。允许内存分配器的副作用的原因是它可以构造复杂的对象,例如: 查找表(lookup-table)。允许可能对内存分配产生副作用(side-effect)的表达式,但那些可能对其他内存对象产生副作用的表达式则不允许。有确定的表达式来给它赋值。原创 2022-12-23 22:04:32 · 2138 阅读 · 2 评论 -
玩以太坊链上项目的必备技能(修改器 [modifier]-Solidity之旅十五)
修改器(modifier)在 Solidity 中是一种特殊类型的函数,用于修改其它函数的行为。例如,开发人员可以使用修改器来检查在允许函数执行之前是否满足某个条件。修改器(modifier)与函数类似,因为它们可以接受参数并有一个返回类型。修改器(modifier)也可以被链在一起,这意味着你可以在一个函数上有多个修改器(modifier)。然而,修改器(modifier)只能修改合约逻辑,不能修改合约的存储,包括结构。修改器(modifier)减少了开发者必须编写模板代码的数量,并且可以使您的原创 2022-12-23 09:47:58 · 2020 阅读 · 1 评论 -
玩以太坊链上项目的必备技能(错误处理以及异常-Solidity之旅十四)
如果到达成功块的末尾,则在。当一个智能合约调用因错误而终止时,所有的状态变化(即对变量、余额等的改变)都会被恢复,一直到合约调用链。在表达式上的错误不会被捕获(例如,如果它是一个复杂的表达式,还涉及内部函数调用),只有外部调用本身发生的revert 可以捕获。现在我们可以用它们来处理外部函数调用的失败,而不需要回滚整个事务(被调用函数中的状态变化仍然会被回滚,但调用函数中的变化不会)。作为开发者的我们知道,我们所编写出来的程序难免会出现 bug ,而要做的是捕获异常,给用户抛出一个友好地错误提示。原创 2022-12-21 20:42:36 · 1530 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(函数及其可见性和状态可变性-Solidity之旅十三)
内部可见性函数访问可以在当前合约或派生的合约访问,外部不可以访问。由于它们没有通过合约的ABI向外部公开,它们可以接受内部可见性类型的参数:比如映射或存储引用。内部可见性状态变量只能在它们所定义的合约和派生合同中访问, 它们不能被外部访问。以便其他的合约读取他们的值。外部可见性函数作为合约接口的一部分,意味着我们可以从其他合约和交易中调用。private 函数和状态变量仅在当前定义它们的合约中使用,并且不能被派生合约使用。函数的参数变量这一点倒是与声明变量是一样的,如果未能使用到的参数可以省略参数名。原创 2022-12-19 20:30:23 · 698 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(事件-Solidity之旅十二)
你必须知道事件的类型,包括哪个参数被索引,以及该事件是否是匿名的,以便正确解释数据。如果外部实体需要该日志实际上存在于区块链中的证明,可以请求日志的Merkle证明. 但需要留意的是,由于合约中仅能访问最近的 256 个区块哈希,所以还需要提供区块头信息。主题topic 让我们可以可以搜索事件,比如在为某些事件过滤一些区块,还可以按发起事件的合同地址来过滤事件。对日志的证明是可能的,如果一个外部实体提供了一个带有这种证明的合约,它可以检查日志是否真实存在于区块链中。添加了索引的事件,虽然方便了查找,但。原创 2022-12-18 20:59:44 · 720 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(OOP-接口-Solidity之旅十一)
它定义了合约的骨架,如合约实现了某些接口(ERC20 或 ERC721),其他。接口基本上仅限于合约 ABI 可以表示的内容,并且 ABI 和接口之间的转换不应该丢失任何信息。接口的话,我们不必去关心它的具体实现功能,却可以与它进行交互。有这些限制,但在不久的将来,有可能解除某些限制(本次使用的是。就可以与我们编写的智能合约进行交互。为例,它定义了3个后续将会讲到的。了(这样说,可能有点不妥,因为。标准的NFT都实现了这些函数。中不能有方法具体实现,而。中可以有方法实现了 )。有这么多的限制,不能像。原创 2022-12-18 15:44:31 · 718 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(OOP-抽象合约-Solidity之旅十)
前文在讲合约继承的基类构造函数的参数时,有提到抽象合约,也就是说,如果派生合约未能给其继承的基合约指定构造函数参数时,那么,该派生合约必须声明为抽象合约(abstract contract)。我们知道Java中抽象类的定义,其一抽象类不能实例化,其二是抽象类中可以拥有抽象方法(是一种没有方法体的、只有方法签名的方法。)而在 Solidity 中的抽象合约与Java的抽象类有异曲同工之妙。即假使合约中至少有一个函数没有实现(没有方法体,只有方法签名的方法),那么便将该合约定义为。原创 2022-12-17 14:59:55 · 730 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(OOP-合约继承-Solidity之旅九)
在这种情况下,当另一个合约从它派生出来时,另一个合约的继承列表或构造函数必须为所有还没有指定参数的基类提供必要的参数(否则,其他合约也必须被声明为抽象的)。构造函数将始终以线性化顺序执行,无论在继承合约的构造函数中提供其参数的顺序如何。的朋友这时可能最想说的是,什么啊,Java 设计者当初就是为了避免多继承所带来的问题,而决定摒弃多继承的。声明的函数)会执行一次。您看,您这个问题,问的就比较有深度了,是的,所以在 Solidity 的。有参数的情况,派生合约需要指定所有参数,对于派生合约有两种方式。原创 2022-12-16 20:15:16 · 630 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(流程控制-Solidity之旅八)
想来您是知道的吧!可若您确实不晓得,那您看了这篇文或许对。,其也是Solidity 唯一一个三元运算符,Solidity 和其他语言一样,支持大部分。当然咯,Solidity 也是支持。另外,Solidity 还支持。谈虎色变而其他语言又保留的。原创 2022-12-14 22:21:38 · 176 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(单位以及全局变量-Solidity之旅七)
例如,挖矿社区中的恶意矿工可以用某个给定的哈希来运行赌场合约的 payout 函数,而如果他们没收到钱,还可以用一个不同的哈希重新尝试。它们是 Solidity 在全局命名空间 预设的一些变量和函数,用于获取区块链信息和一些通用的工具函数。当前区块的时间戳必须严格大于最后一个区块的时间戳,但这里能确保也需要它是在权威链上的两个连续区块。,当然,数字与以太币单位之间需要空格隔开的,这一点想必您应该是清楚的吧!,他们都有各自的货币单位。也是有属于自己的那一套货币单位的。的用法,我们后续会讲到,可以理解为。原创 2022-12-14 09:31:48 · 533 阅读 · 1 评论 -
玩以太坊链上项目的必备技能(基本类型转换以及推断-Solidity之旅六)
假使两个不同类型的值进行操作运算时,编译器则会隐式地将一个类型转换成另一个类型(赋值也是如此),这意味着操作始终是操作数其中一个的类型去执行。苹果(Apple)公司好容易把苹果手机(iphone)设计的越来愈薄,可是到了国内呢,即给手机贴上了膜又让手机套上了那专为手机量身定做的。,最终这样一来,手机厚了(当然咯,我们还是喜欢厚一点的手机,毕竟拿在手上,能察觉手上确实拿了个东西!可能会发生些您无法预料的状况,所以您需要繁琐的测试,看最终是否能达到您的要求。之间的转换并不陌生吧!,通常,是可以进行类型之间的。原创 2022-12-12 22:08:10 · 409 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(变量作用域-Solidity之旅五)
在前文我们讲过 Solidity 是一种静态类型的语言,这就意味着在声明变量前需先指定类型。而 Solidity 对变量划分了以下三种作用域 该变量的值被永久地存放在合约存储中,合约内所有函数可访问,其Gas(燃料)消耗高。 函数体声明的变量,其值在该函数执行前都存在的变量。 存在于全局命名空间的特殊变量,提供有关区块链和交易属性的信息。原创 2022-12-11 21:12:12 · 640 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(类型-映射类型-Solidity之旅四)
Solidity 中的映射本身是无法遍历的,即获取每一组键值对。不过,可通过结构体来实现迭代。,有过其它编程语言经验的您,对这是再熟悉不过了。Solidity 中的。用来记录其他的账号,可以允许从其账号使用多少数量的币.。是一个嵌套mapping的例子.。Solidity 声明。一样,是用来存储一组。原创 2022-12-10 20:49:38 · 744 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(类型-引用类型-Solidity之旅三)
在前文我们讲述了值类型,也就说再修改值类型的时候,每次都有一个独立的副本,如:string 类型的状态变量,其值是无法修改,而是拷贝出一份该状态的变量,将新值存起来。对于处理稍微复杂地值类型时,拷贝将变得愈发大了,也正是介于此,才考虑到将数据存放在内存(memory)或是存放在。在 Solidity 中,数组(array)和 结构体(struct)属于引用类型。更改数据位置或类型转换将始终产生自动进行一份拷贝,而在同一数据位置内(对于 存储(storage) 来说)的复制仅在某些情况下进行拷贝。原创 2022-12-09 20:56:45 · 1313 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(类型-值类型-Solidity之旅二)
Solidity 在编译事需指定变量(状态变量和局部变量)。虽然 Solidity 受到了 c++、python以及 javascript 的影响,但 和是不存在的,当然咯,每个新声明的变量总是有的,显然这是跟其声明的类型相关的。而 Solidity 将类型统归纳为、、。本文将先从讲起。,顾名思义便是按值进行赋值变量或传递给函数,它们总是会将值拷贝(相对于指针传递,也可以说是引用传递)。以下这些类型在 Solidity 中都属于 值类型:它是一种二选一值类型,其取值为和。整数地址类型这是一个 Sol原创 2022-12-06 21:52:25 · 608 阅读 · 0 评论 -
玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一)
前面一篇关于翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用去编写了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂代码,或找出其中的漏洞,那么,学习这门高级的智能合约语言是有必要的,当然,这都得在上,毕竟国内的有些是不兼容。是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了、、影响。Solidity是静态类型的,支持继承、库和复杂的用户定义类型以及其他功能。使用Solidity,您原创 2022-12-05 22:34:42 · 1501 阅读 · 0 评论 -
区块链中的智能合约(Smart Contract)
1994年,法律学者、密码学家Nick Szabo认识到智能合约的去中心化分类账的应用。他理论上认为,这些合同可以用代码编写,可以在系统上存储和复制,并由构成区块链的计算机网络进行监督。这些智能合约也可以帮助在某些条件下在各方之间转移数字资产。智能合约(或称加密合约)是一种计算机程序,在一定条件下直接自动控制双方的数字资产转移。智能合约的工作方式与传统合约相同,同时也自动执行合约。智能合约是完全按照其创建者的设置(编码,编程)执行的程序。就像传统合同可由法律强制执行一样,智能合同可由代码强制执行。比特币网络翻译 2022-12-05 19:45:46 · 6576 阅读 · 0 评论 -
区块链中的共识机制以及共识算法
共识,从字面上来看,是在某方面达成一致。打个比方,一个部门最近来了几位新同事,部门主管为了欢迎新同事的加入,以能让新同事融入到新环境,提议下班后聚个餐,对于聚餐了,大伙对此举双手赞成,毕竟能蹭个免费餐的事并不是每月都有的,这时便可以说,大家对下班后聚餐迎新达成了一致认同。共识机制是一整套由协议、激励和想法构成的体系,使得整个网络的节点能够就区块链状态达成一致。我们知道,区块链是一个分布式的去中心化网络,它提供了不可更改性、隐私性、安全性和透明度。没有中央机构存在来验证和核实交易,但区块链中的每一笔交易都被认翻译 2022-12-04 18:06:02 · 5497 阅读 · 0 评论 -
是时候回答【我为什么要学习 Go 语言(golang)】这个问题了
而那 34 篇是涵盖 golang 的基础语法,虽然 golang 版本使用的是 1.19,但却没能在那 三十来篇里讲述早在 golang 1.18 就出现的新功能。任何人、组织/机构都可参与进来,且链上的所有数据记录公开、透明,任何人都能与之共识过程,不受任何机构控制,是完成。每种语言都有优缺点,不能拿另一个语言中有的功能,来质疑golang怎么没有呢,吐槽golang最厉害莫过于说它没有异常处理,这不就是那其他语言来比较吗!,乍然间,友人们无不张口结舌,双目紧盯着您,不错过任何细节,让您把这趣事讲完。原创 2022-12-02 22:42:22 · 1153 阅读 · 0 评论 -
在构建 Web3 前,需先知道什么是区块链,毕竟 Web3 是基于区块链
要说什么是区块链,那么这里就不得不提比特币了,它是一种点对点(Peer to Peer,P2P)形式的去中心化加密货币,点对点的传输意味着是一个去中心化的支付系统。比特币的概念最初是由中本聪在2008年10月31日提出,于2009年1月3日,中本聪用个人电脑挖出了世界上第一批块比特币(也称创世区块),由此正式宣告了比特币的诞生。由于2008年的金融危机爆发的原因,比特币之父中本聪才想要构建一套不受中心化机构控制的电子货币,他构思底层时决定抛弃中心化数据存储,设计出强去中心化的底层机制。原创 2022-12-01 20:30:51 · 430 阅读 · 0 评论 -
Web3 来了,让我们展开双手拥抱它吧!
也让越来越多的人蜂拥互联网,这其中不乏产生出了独角兽,当然咯,成功的人是少数的,也正是这些极少数的独角兽互联网巨头逐渐开始掌控海量的流量以及其内容产生的价值。中心化网络成就了极少数互联网巨头,他们几乎垄断了互联网,由于数据都保存在中心网络内,以至于那些手头拥有数据的中心化巨头,可以为所欲为,完全没有考虑到用户的感受!还催生了广告驱动的盈利模式,虽然此时的用户可以在平台上创作内容,然而他们却不能拥有自己创作的内容,以及自己无法在该平台下将内容变现。想必,正在屏幕前浏览这篇文章的你,也是没见过。原创 2022-11-30 20:28:25 · 393 阅读 · 0 评论