区块链
Solidity 标签描述

以太坊智能合约介绍,Solidity介绍一个简单的智能合约先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节。 以太坊智能合约介绍,Solidity介绍 一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节。 Storage contractSimpleStorage{ uintstoredData; functionset(uintx){ storedData=x; } functionget()constantreturns(uintretVal){ returnstoredData; } ...

  GmbkOrtGX28b   2023年11月02日   71   0   0 Solidity区块链智能合约eth

solidity简介 本文默认读者已掌握至少一种面向对象编程语言,所以文中一些概念会借助其他语言进行类比。 solidity是用于实现智能合约的一种面向合约的高级编程语言,solidity受到C、Python和JavaScript的影响,被设计为可运行在以太坊虚拟机(EVM)上,所以用户无需担心代码的可移植性和跨平台等问题。solidity是一种静态类型的语言,支持继承、库引用等特性,并且用户可自定义复杂的结构类型。 目前尝试Solidity编程的最好的方式是使用Remix(由于是网页IDE可能加载起来需要一定的时间)。Remix是一个基于Web的IDE,它可以让你编写Solidity智能合约...

  eRngRrDek3v2   2023年11月02日   49   0   0 Solidity区块链智能合约入门

上一篇:智能合约编程语言-solidity快速入门(上) solidity区块及交易属性 在介绍区块及交易属性之前,我们需要先知道solidity中自带了一些全局变量和函数,这些变量和函数可以认为是solidity提供的API,这些API主要表现为Solidity内置的特殊的变量及函数,它们存在于全局命名空间里,主要分为以下几类: 有关区块和交易的属性 ABI编码函数 有关错误处理 有关数学及加密功能 有关地址和合约 我们在编写智能合约的时候就可以通过这些API来获取区块和交易的属性(BlockAndTransactionProperties),简单来说这些API主要用来提供一些区块链当...

storage引入 storage属性是一种引用类型。在如下的合约中,定义了动态长度数组arrx,arrx存储在以太坊虚拟机storage空间中的变量。当调用test方法之后,定义了变量uint[]Z。这个时候,如果我们在remix浏览器中进行编译,我们会看到一个警告。因为默认的情况下,对于动态数组会加上storage属性。也就是:uint[]storagex。storage属性是一种引用类型,其引用了以太坊虚拟机storage空间中的状态变量。而不是对于值的拷贝 因此,在test函数中,当修改了Z的长度和Z的内容之后,再次查看arrx的长度和内容,会发现对应发生了变化。 12345...

  5mjGlyXmoOly   2023年11月02日   54   0   0 Solidity区块链智能合约

  首先我们刚开始想做的是押金制,想要透过智能合约收取押金后,在使用者证明出席后退回押金。     我们的智能合约放在下面:部署时需要提供几个参数: 报名开始时间:只有在开始报名后智能合约才会接受报名 当以上条件都满足时,填妥资料送出后会发出一个Transaction到区块链上,当此笔交易成功时你的钱包位址将会被登录入区块链中的智能合约。   另外由于我们寄送信件是透过Firebase的寄信功能,寄信的时间点在新增资料到Firebase资料库时即寄出信件,但是资料进入资料库时并不保证交易已经成功,导致后台系...

  tEcohMEyDsEb   2023年11月13日   17   0   0 Solidity区块链智能合约

连续继承 合约可以被连续的继承,在下面的合约中,father继承了grandfather、son继承了father。那么son也同样继承了grandfather中的状态变量和方法。 12345678910111213 contractgrandfather{  uintpublic money=10000;  functiondahan()publicpurereturns(string){    return"dahan";  }}contractfatherisgrand...

  5mjGlyXmoOly   2023年11月02日   41   0   0 Solidity区块链智能合约

1.函数定义returns定义好返回个数; 2.函数中使用return(x,x,x)返回 3.效果 <!-本文包含:- <!--

自动生成函数 public属性的状态变量会自动的生成同名的函数。如果有何其一样的函数定义,则会替换掉默认的函数。 一般类型如int、bytes32、bool类型的函数会自动的生成同名的函数。但是要注意的是,生成的函数的属性为external属性。 12345 uintpublicnum=100;自动生成的函数为:&nbsp;functionnum()externalpurereturns(uint){&nbsp;&nbsp;&nbsp;return200;&nbsp;} 动态数组与mapping类型函数会自动生成带参数的函数: 12345 mapping(uint=&gt...

  5mjGlyXmoOly   2023年11月02日   51   0   0 Solidity区块链智能合约

构造函数的作用 构造函数是特殊的函数,在部署合约的时候,就会被调用。而且只能够在此时被调用。常常用于对于某一些状态变量的初始化。 构造函数 在老版本的solidity编译器中,构造函数是和合约名字同名的 1234567891011 contract&nbsp;ontractinit{uintpublica;//无参数的构造函数functionontractinit()public{&nbsp;&nbsp;a=100;}//带参数的构造函数&nbsp;functionontractinit(uint_a,uint_b)public{&nbsp;&nbsp;a=_a;} 新版本的s...

  5mjGlyXmoOly   2023年11月02日   126   0   0 Solidity区块链智能合约

函数返回值一般形式 12345678910 function&nbsp;resValue()purepublicreturns(uint){&nbsp;&nbsp;uinta=10;&nbsp;&nbsp;returna;}function&nbsp;recieveValue()purepublicreturns(uint){&nbsp;&nbsp;uintb;&nbsp;&nbsp;b=resValue();&nbsp;&nbsp;returnb;} 函数命名返回值 12345678910111213 //1、直接赋值、不需要return返回functionresVal...

  5mjGlyXmoOly   2023年11月02日   56   0   0 Solidity区块链智能合约

不能直接returnab;,因为Solidity是不支持两个字符串直接比较的。 将string类型转换为bytes类型,它实际上是一个字节数组,每一个字节是可以直接比较,因此只要所有的字节都能相等,就代表两个字符串相等。 functionisEqual(stringmemorya,stringmemoryb)publicpurereturns(bool){ bytesmemoryaa=bytes(a); bytesmemorybb=bytes(b); //如果长度不等,直接返回 if(aa.length!=bb.length)returnfalse; //按位比较 for(uinti...

  DJsdk34H4Gbu   2023年11月02日   42   0   0 Soliditystring类区块链字符串

一、原因: stack保存很小的局部变量,免费使用,但有数量限制(16个变量),包含参数和返回值(includingparametersandreturnparameters) ​ 二、解决方法: 1.减少输入参数: a.以数组的方式传入 原来是 //设置用户信息functionset_user_info(stringuser_address,stringname,stringage)publicreturns(int){TableFactorytf=TableFactory(0x1001);Tabletable=tf.openTable("user");Entryentry=tab...

mapping mapping是一张表,存储key-value对。更准确的说,mapping是一张hash映射表,内部并没有存储真实的key值。 mapping用例 下面的案例模拟了一个登陆网站,将地址与id绑定在一起。id又与姓名绑定在一起。 123456789101112131415161718192021222324 pragmasolidity^0.4.23;contractmappingTest{&nbsp;&nbsp;uintid=0;&nbsp;mapping(address=&gt;uint)idmap;//将地址与id绑定在一起&nbsp;mapping(uint=...

  5mjGlyXmoOly   2023年11月02日   64   0   0 Solidity区块链智能合约

在函数参数或返回值声明时,如果返回数据的类型是变长的,那么需要加memory修饰,例如 string、 bytes、 数组、 自定义结构 等类型都需要使用memory。 functionsetUser(stringmemory_name,uint8_age,stringmemory_sex)public{ } 在临时变量声明时,对于变长的数据类型也要在storage或memory之间二选一。 storage的作用类似于C中的引用传递,用storage修饰的变量等同于右值的一个分身,对其进行修改也会影响到本尊。 memory修饰的临时变量相当于右值的一个拷贝,对其进行的修改不会影...

  DJsdk34H4Gbu   2023年11月02日   77   0   0 Solidity数据引用传递区块链

函数的一般形式 1 function(&lt;parametertypes&gt;){public|internal|external}[pure|constant|view|payable][returns(&lt;returntypes&gt;)] 函数的作用 1、与区块链交互2、本地执行3、封装代码 带参数函数 1234567 uintpublicnum;stringpublicname;functionsetparam(uint_num,string_name)public{&nbsp;&nbsp;num&nbsp;=_num;&nbsp;&nbsp;name=_...

  5mjGlyXmoOly   2023年11月02日   44   0   0 Solidity区块链智能合约

账户A向账户B转账100元,银行在做交易时,需要执行两个动作: 账户A=账户A100 账户B=账户B+100 对于这类业务,利用事务的特性,两个操作要么一起成功,要么一起失败。 在Solidity中也存在类似的机制,我们可以在执行过程中判断某个条件是否成立,如果不成立,则通过revert()函数退回到合约执行之前的状态,相当于还原现场。 Solidity中,也直接为开发者提供了require和assert函数。 require(boolcond_expr,stringmsg); assert(boolcond_expr); require和assert在内部调用了revert函数,例...

  DJsdk34H4Gbu   2023年11月02日   55   0   0 Solidity区块链初始状态开发者

转账的3种方式 123 address.transfer()address.send()address.call.value().gas()() 转账transfer 12345678910 functiontransfer(address_address)publicpayable{&nbsp;&nbsp;_address.transfer(msg.value);}&nbsp;functiontransfer2(address_address)publicpayable{&nbsp;&nbsp;_address.transfer(101018);} 转账send ...

  5mjGlyXmoOly   2023年11月02日   53   0   0 Solidity区块链智能合约

智能合约(英语:Smartcontract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。 智能合约跟其它编程语言一样,是基础,是智能合约开发人员最基本的技能,也是如何编写智能合约的!选择其中一种语言并开始。 Solidity solidity是一门面向合约的、为实现智能合约而创建的高级编程语言。这门语言受到了C,Python和JavaScript语言的影响,设计的目的是能在以太坊虚拟机(EVM)上运行。 如果是个新手,刚入门应该从solidity开始。如果是从事智能合约的开发人员,可能知道Solidity...

  d6KcFteloty6   2023年11月02日   67   0   0 Solidity区块链智能合约

storage陷阱 下面的合约是一个锁定金额的合约,用户将资金存储在此合约中,只有当过了一段时间时候才能够提取出来。下面的案例是为了说明storage属性预设性带来的陷阱。payIn函数是当用户存储金额时调用的函数。传递的参数似乎解锁的时间。在合约payIn中,HoldRecordnewRecord;其实默认为storage类型,并且,当不为storage变量赋值的时候,变量默认引用的位置是storage空间中的0号位置。这也意味着在当前的案例中,newRecord指针指向了ownerAmount,当对newRecord执行newRecord.amount+=msg.value;实则将ow...

  5mjGlyXmoOly   2023年11月02日   62   0   0 Solidity区块链智能合约

在编写智能合约时,一定要注意对合约参数和行为的检查,尤其是那些对外部开放的合约函数。 Solidity提供了require、revert、assert等关键字来进行异常的检测和处理。 一旦检测并发现错误,整个函数调用会被回滚,所有状态修改都会被回退,就像从未调用过函数一样。 以下分别使用了三个关键字,实现了相同的语义。 require(_datadata,"requiredataisvalid");if(_data!=data){revert("requiredataisvalid");}assert(_datadata); 不过,这三个关键字一般适用于不同的使用场景: req...

  DJsdk34H4Gbu   2023年11月02日   82   0   0 Solidity使用场景复用智能合约