E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Solidity智能合约
solidity智能合约
[50]-assembly内联汇编
内联汇编对于普通的
solidity智能合约
来说,通过solc编译器的优化操作,将源代码转换为以太坊能够识别的二进制文件。
jonson_jackson
·
2018-11-29 21:37
区块链
以太坊
solidity智能合约
solidity智能合约
[49]-安全-溢出***
***回顾12345672016年6月,以太坊最大众筹项目TheDAO被***,***获得超过350万个以太币,最终导致以太坊分叉为ETH和ETC。2016年拒绝服务***:GovernMental's1100ETH2016年KotET(“纷争时代”)合约遭受***。2017年Parity钱包,遭受delecatecall注入,销毁了合约。损失513,774.16Ether2017年ANTToke
jonson_jackson
·
2018-11-26 22:23
区块链
以太坊
solidity智能合约
solidity智能合约
[45]-library库
library引入常常,我们会进行加减乘除的操作,如下的函数就是对两个函数参数进行了四则运算。123456functionoperate(uinta,uintb)purereturns(uint,uint,uint,uint){ uintadd=a+b; uintsub=a-b; uintmul=a*b; uintdiv=a/b;}library库上面的函数其实是有问题的,因为它不能够避免出错,例
jonson_jackson
·
2018-11-26 22:30
区块链
以太坊
solidity智能合约
solidity智能合约
[44]-以太坊测试网络与metamask
测试网络在之前的案例中,大部分都是在remix在线的本地虚拟环境下做的测试。这一小节将在以太坊测试网络中交互合约。除了主网、以太坊有多个测试网络,用于对于智能合约进行测试。那么之间的主要区别在于共识算法以及确认时间。网络网络id共识算法确认时间Main1POW15秒左右Ropsten3POW不到30秒Ropsten4POA仅geth支持15秒kovan42POA仅parity支持4秒remix部署
jonson_jackson
·
2018-11-26 22:37
区块链
以太坊
solidity智能合约
solidity智能合约
[43]-众筹案例
综合案例:众筹123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354pragmasolidity^0.4.23;contract campaign{ //捐赠者的对象 structfunder{ address funderaddress;//捐赠
jonson_jackson
·
2018-11-26 22:21
区块链
以太坊
solidity智能合约
solidity智能合约
[42]-memory与storage相互转换
memory赋值状态变量下面的例子说明了memory赋值给storage的情况。在test函数中,memory空间的变量s复制给了状态变量stu。为值的拷贝问题。并且由于这两个空间互不影响。因此修改变量的值不会影响到另一个变量的值。当调用call函数时,返回100,"jonson"。s的修改不会影响变量stu。123456789101112131415161718192021222324pragm
jonson_jackson
·
2018-11-26 22:54
区块链
以太坊
solidity智能合约
solidity智能合约
[41]-structdeep
结构体中的mapping###定义时,不用初始化mapping1、结构体中的变量,在定义的时候是不能缺省的,但是结构体中的mapping映射除外。2、在memory中的结构体变量s是不能够操作其中mapping映射。这是由于mapping映射只能够存储在storage空间中1234567structstudent{ uintgrade; stringname; mapping(uint
jonson_jackson
·
2018-11-26 22:23
区块链
以太坊
solidity智能合约
solidity智能合约
[40]-memory属性
memory引入函数中结构体变量默认是是storage类型下面是一段错误的代码,错误的原因在于,init函数中,students默认会加上storage的属性,但是storage属性必须要引用storage空间中的状态变量。但是实例化的student(100,“jackson”)并不在storage中。123456789structstudent{ uintgrade; stringname;
jonson_jackson
·
2018-11-26 21:00
区块链
以太坊
solidity智能合约
solidity智能合约
[39]-结构体
struct语法struct类似于对于一个对象属性的封装。例如一个学生,可能会有姓名、学号等属性。将这些属性封装起来,成为一个结构体。1234struct对象名{ 变量类型1变量名1; 变量类型2变量名2;}struct声明定义一个学生类1234structstudent{ uintgrade; stringname;}结构体不能包含自身12345structstudent{ uintg
jonson_jackson
·
2018-11-25 22:03
区块链
以太坊
solidity智能合约
solidity智能合约
[38]-storage引用
storage引入storage属性是一种引用类型。在如下的合约中,定义了动态长度数组arrx,arrx存储在以太坊虚拟机storage空间中的变量。当调用test方法之后,定义了变量uint[]Z。这个时候,如果我们在remix浏览器中进行编译,我们会看到一个警告。因为默认的情况下,对于动态数组会加上storage属性。也就是:uint[]storagex。storage属性是一种引用类型,其引
jonson_jackson
·
2018-11-25 22:20
区块链
solidity
智能合约
solidity智能合约
[37]-以太坊虚拟机数据存储
EVM当调用solidity函数时,都会在以太坊虚拟机当中来执行。因此了解以太坊虚拟机的细节,了解其数据的存储机制变得尤为重要。以太坊虚拟机中的空间分为3大部分。分别为storage、stack与memory。storage空间非常特殊,其值会被矿工提交到区块链上,改变区块链的状态。下面我们将分析下面例子中,每一个变量所在以太坊evm中的位置。下面的例子中,在运行合约中的代码时,变量a会存储在以太
jonson_jackson
·
2018-11-25 22:26
区块链
solidity智能合约
以太坊
solidity智能合约
[36]-连续继承与多重继承
连续继承合约可以被连续的继承,在下面的合约中,father继承了grandfather、son继承了father。那么son也同样继承了grandfather中的状态变量和方法。12345678910111213contractgrandfather{ uintpublic money=10000; functiondahan()publicpurereturns(string){ re
jonson_jackson
·
2018-11-25 22:29
区块链
solidity
智能合约
solidity智能合约
[35]-function-automatic
自动生成函数public属性的状态变量会自动的生成同名的函数。如果有何其一样的函数定义,则会替换掉默认的函数。一般类型如int、bytes32、bool类型的函数会自动的生成同名的函数。但是要注意的是,生成的函数的属性为external属性。12345uintpublicnum=100;自动生成的函数为: functionnum()externalpurereturns(uint){ retu
jonson_jackson
·
2018-11-25 21:24
区块链
solidity
智能合约
solidity智能合约
[34]-合约继承与可见性
继承继承是面向对象语言的重要特征。继承是为了模拟现实中的现象,并且可以简化代码的书写。例如猫与够都属于动物。他们都继承动物的某些特征。继承语法当前合约继承父类合约的属性和方法。123456789101112131415161718192021222324252627contract 合约名 is 父类合约名{}``` ##继承例子下面的例子中。直接部署son合约后,so
jonson_jackson
·
2018-11-25 21:40
区块链
solidity智能合约
以太坊
solidity智能合约
[33]-modifire-deep
带参modifiremodifire还可以带参数,如下面的例子,模拟了游戏中的升级操作。如果玩家等级达到2级,就可以修改名字。如果玩家等级达到10级,就可以修改DNA。通过带参数的modifire实现对于代码的封装。12345678910111213141516171819202122pragmasolidity^0.4.23;contract modifiererParam{ uintpubl
jonson_jackson
·
2018-11-25 21:28
区块链
solidity智能合约
以太坊
solidity智能合约
[32]-函数modifire
函数modifire函数modifire用于在执行函数前,执行某些初始化的操作。例如权限的判断。modifire可以起到封装的作用,简化代码的书写。modifire的定义添加modifire关键字,在花括号内部输入语句,并在最后加上下划线_。1234modifier 函数名(){ 语句; _;}modifire使用modifire的使用方法是,将modifer的名字加在函数修饰符与返回值之间,如
jonson_jackson
·
2018-11-25 21:58
区块链
solidity智能合
以太坊
solidity智能合约
[31]-构造函数
构造函数的作用构造函数是特殊的函数,在部署合约的时候,就会被调用。而且只能够在此时被调用。常常用于对于某一些状态变量的初始化。构造函数在老版本的solidity编译器中,构造函数是和合约名字同名的1234567891011contract ontractinit{uintpublica;//无参数的构造函数functionontractinit()public{ a=100;}//带参数的构造函
jonson_jackson
·
2018-11-25 21:15
区块链
solidity
以太坊
solidity智能合约
[30]-值拷贝
状态变量的值拷贝问题如下例子中,将状态变量a的值赋值给状态变量b。a与b都是以太坊虚拟机storage中不同的两个空间,所以当调用change方法修改b的值的时候,不会影响到a空间中的值。1234567uintpublica=100;uintpublicb=a;functionchange()public{ b=999;}函数体内部变量的值拷贝在函数体内部,将状态变量a的值赋值给状态变量b。a与
jonson_jackson
·
2018-11-25 21:32
区块链
solidity智能合约
以太坊
solidity智能合约
[29]-函数作用域
函数重名与函数作用域问题1、当状态变量中已经有了一个变量a、状态变量中就不能够再有一个同名的状态变量。2、当状态变量中和函数体内部已经有了都有一个同名的函数的时候,默认处理的是函数体内部的变量。也就是说,变量的操作和其他语言一样,仍然满足就近原则。12345678910uintpublica=100;uintb=200;// uintpublica=999; 当状态变量中已经有了一个变量a、状态变
jonson_jackson
·
2018-11-24 23:55
区块链
以太坊
solidity智能合约
solidity智能合约
[28]-函数返回值
函数返回值一般形式12345678910function resValue()purepublicreturns(uint){ uinta=10; returna;}function recieveValue()purepublicreturns(uint){ uintb; b=resValue(); returnb;}函数命名返回值12345678910111213//1、直接赋值、不
jonson_jackson
·
2018-11-24 22:05
区块链
solidity
智能合约
solidity智能合约
[27]-函数与函数重载
函数的一般形式1function(){public|internal|external}[pure|constant|view|payable][returns()]函数的作用1、与区块链交互2、本地执行3、封装代码带参数函数1234567uintpublicnum;stringpublicname;functionsetparam(uint_num,string_name)public{ nu
jonson_jackson
·
2018-11-24 22:50
区块链
solidity
智能合约
solidity智能合约
[26]-mapping
mappingmapping是一张表,存储key-value对。更准确的说,mapping是一张hash映射表,内部并没有存储真实的key值。mapping用例下面的案例模拟了一个登陆网站,将地址与id绑定在一起。id又与姓名绑定在一起。123456789101112131415161718192021222324pragmasolidity^0.4.23;contractmappingTest{
jonson_jackson
·
2018-11-24 22:46
区块链
solidity
智能合约
solidity智能合约
[25]-转账的3种方式与比较
转账的3种方式123address.transfer()address.send()address.call.value().gas()()转账transfer12345678910functiontransfer(address_address)publicpayable{ _address.transfer(msg.value);} functiontransfer2(address_add
jonson_jackson
·
2018-11-24 22:34
区块链
solidity
智能合约
solidity智能合约
[24]-global
solidity中的全局属性block.blockhash(uintblockNumber)returns(bytes32):返回给定区块号的哈希值,只支持最近256个区块,且不包含当前区块。在版本0.4.22中弃用并被替换为。blockhash(uintblockNumber)block.coinbase(address):当前块矿工的地址。block.difficulty(uint):当前块的
jonson_jackson
·
2018-11-24 22:19
区块链
solidity智能合约
solidity智能合约
[23]-payable
转账如果在函数中涉及到以太币的转移,需要使用到payable关键词。意味着可以在调用这笔函数的消息中附带以太币。123functionpay()publicpayable{}this代表合约地址this代表当前部署的合约地址12345function getThis()publicviewreturns(address){ returnthis; //0x9F4c14f487B8e4E3986
jonson_jackson
·
2018-11-24 22:55
区块链
solidity
智能合约
solidity智能合约
[22]-地址
地址solidity语言中有账户的概念,solidity语言中有两类账户。一类是合约账户、一类是外部账户。账户都有地址。地址为160位。定义地址addresspublicaccount1=0x4B0897b0513fdC7C541B6d9D7E929C4e5364D2dB;addresspublicaccount2=0xCA35b7d915458EF540aDe6068dFe2F44E8fa733
jonson_jackson
·
2018-11-24 22:49
区块链
solidity智能合约
solidity智能合约
[21]-数组字面量
数组字面量特点1、数组字面量类似与一个常量数组,不能修改大小和长度,例如[1,2,3]2、数组字面量满足最小匹配原则,意味着[1,2,3]存储的类型为uint8,[256,2,3]存储的类型为uint16。Solidity会自动的匹配最小的能够容纳的类型3、如果要改变类型的大小,如[1,2,3]中类型为uint256,那么我们可以强制转换为[uint(1),2,3]。代码例子如下123456789
jonson_jackson
·
2018-11-24 22:15
区块链
solidity智能合约
solidity智能合约
[20]-动态二维数组
动态二维数组定义uint[][]publicgrade=[[60,80],[40,20],[50,50]];获取长度123456789functiongetLength()viewpublicreturns(uint){ returngrade.length;} functiongetLength2()viewpublicreturns(uint){ returngrade[0].length
jonson_jackson
·
2018-11-24 22:34
区块链
solidity
智能合约
solidity智能合约
[19]-for循环
forfor语句为"当型"循环结构。for语句的语法为:123for(表达式1;表达式2;表达式){ 语句}说明:表达式1为循环变量赋初始值。表达式2为循环条件。表达式3为循环变量增值。for循环打印斐波拉耶数列123456789101112131415161718192021pragmasolidity^0.4.23;contract forTest{ //0,1,1,2,3,5,8,13,2
jonson_jackson
·
2018-11-22 21:16
区块链
solidity
智能合约
solidity智能合约
[18]-twoarray
二维数组定义1uint[2][3]grade=[[60,80],[40,20],[50,50]];返回二维数组1234functiongetGrade()viewpublicreturns(uint[2][3]){ returngrade;}获取二维数组长度123456789functiongetLength()viewpublicreturns(uint){ returngrade.leng
jonson_jackson
·
2018-11-22 21:56
区块链
solidity智能合约
solidity智能合约
[17]-动态长度数组
动态长度数组动态长度数组可以改变大小和长度动态长度数组的定义uint[]grade=[1,2,3,4,5];返回动态长度数组123functiongetArray()publicviewreturns(uint[]){ returngrade; }获取动态数组长度123functiongetlength()publicviewreturns(uint){ returngrade.length
jonson_jackson
·
2018-11-22 21:52
区块链
solidity智能合约
solidity智能合约
[16]-固定长度数组
数组内存中的一片连续区域定义12int[7]math;bytes2[3]bytesTest;赋值1uint[5]public grade=[1,2,3,4,5];修改内容123functioninit2()public{ bytesTest[1]=0x6a6f;}返回数组1234functiongetArray2()publicviewreturns(bytes2[3]){returnbytesT
jonson_jackson
·
2018-11-22 21:56
区块链
solidity智能合约
solidity智能合约
[15]-fixtostring
固定字节数组转string固定字节数组转换为string没有好的办法,必须要首先将固定字节数组转换为动态字节数组,再将动态字节数组转换为string123456789101112//bytes2 -> bytes ---->string functionfixtostr(bytes32_newname)purepublicreturns(string){ bytesmemorynewName=n
jonson_jackson
·
2018-11-22 21:29
区块链
solidity智能合约
solidity智能合约
[14]-动态字节数组转换为string
动态字节数组转换为string动态字节数组可以通过string(name)非常直接的转换为string类型,下面为例子:1234567891011121314pragmasolidity^0.4.23;contractdynamicTostring{ bytesname=newbytes(2); functionInitName()public{ name[0]=0x6a; nam
jonson_jackson
·
2018-11-22 21:03
区块链
solidity
智能合约
solidity智能合约
[13]-固定字节数组转动态字节数组
固定字节数组转动态字节数组要将固定长度的字节数组转换为动态长度的字节数组,需要首先创建动态数组,并挨个赋值。12345678910111213141516pragmasolidity^0.4.23;contract fixTodynamic{ bytes6name= 0x6a6f6e736f6e; function Todynamic()viewpublicreturns(bytes){
jonson_jackson
·
2018-11-22 21:37
区块链
solidity
智能合约
solidity智能合约
[12]-固定字节数组相互转换
固定字节数组相互转换固定长度字节数组之间能够进行相互转换1234567891011121314151617181920pragmasolidity^0.4.23;contract fixTofix{ bytes6name= 0x6a6f6e736f6e; //bytes1:0x6a function Tobytes1()viewpublicreturns(bytes1){ retur
jonson_jackson
·
2018-11-22 21:13
区块链
solidity
智能合约
solidity智能合约
[11]-字符串
字符串string类型存储字符串,在solidity中使用了UTF-8格式来存储字符串。123stringpublicname="jonson";//6a6f6e736f6estringpublicname1="!@#$%^&*())*";stringpublicname2="我爱你";字符串不能直接的获取长度和内容下面是错误的方式1234567//functiongetLength()retur
jonson_jackson
·
2018-11-22 21:14
区块链
solidity
智能合约
智能合约开发实战(附源码),30个开发案例助你年薪60万!
主要包含以下主题:1)
Solidity智能合约
:lottery(彩票),ICO(首次代币发行),DAO(去中心化自制组织)2)Tokens:ERC20,ERC7213)测试:Solidity测试,JavaScript
BinSTD
·
2018-11-22 14:16
智能合约开发实战(附源码),30个开发案例助你年薪60万!
主要包含以下主题:1)
Solidity智能合约
:lottery(彩票),ICO(首次代币发行),DAO(去中心化自制组织)2)Tokens:ERC20,ERC7213)测试:Solidity测试,JavaScript
BinSTD
·
2018-11-22 14:16
solidity智能合约
[10]-动态字节数组
动态字节数组的定义bytes变量名=newbytes(大小);动态字节数组的属性可以修改大小和长度动态字节数组默认初始化为0bytespublicname=newbytes(2);name的值一开始为0x0000动态字节数组的赋值1234functionInitName() public{ name[0]=0x6a; name[1]=0x6f; }动态字节数组的属性123functiong
jonson_jackson
·
2018-11-21 20:05
区块链
solidity
智能合约
solidity智能合约
[9]-字节数组与运算
byte类型有bytebytes1bytes2…bytes32特殊的有byte==bytes1后面的数字代表占了多少字节。1个字节在内存中占了8位性质固定字节数组不能修改长度和内容字节一般用16进制来存储16进制中的1个数字代表占了4位。1234567bytes1publicnum1=0x6a; //转换为10进制:106bytes2publicnum2=0x6a6f; //转换为10进制
jonson_jackson
·
2018-11-21 20:59
区块链
solidity智能合约
solidity智能合约
[8]-位运算与字面量
位运算solidity中,可以对于最底层的位进行操作。由于以太坊中需要消耗gas,因此,为了节约gas、所以对于位的操作会用到比较频繁。solidity中支持多种类型的位运算操作1、位与&2、位或|3、位异或^4、位取反~5、>数字3、4的二进制表示数字3、4的底层表示位与位与位或位或位异或位异或位取反位取反位左移位左移位右移位右移位运算例子1234567891011121314151617181
jonson_jackson
·
2018-11-21 20:56
区块链
solidity
智能合约
solidity智能合约
[8]-位运算与字面量
位运算solidity中,可以对于最底层的位进行操作。由于以太坊中需要消耗gas,因此,为了节约gas、所以对于位的操作会用到比较频繁。solidity中支持多种类型的位运算操作1、位与&2、位或|3、位异或^4、位取反~5、>数字3、4的二进制表示数字3、4的底层表示位与位与位或位或位异或位异或位取反位取反位左移位左移位右移位右移位运算例子1234567891011121314151617181
jonson_jackson
·
2018-11-21 20:53
区块链
solidity
智能合约
solidity智能合约
[7]-整型与运算
整型变量整数是现实中处理最多的单位,在solidity中的整数类型有int和uint,int类型可以存储负数,uint类型只能够存储非负数。int类型:int8,int16,int24,int32…int256uint类型:uint8,uint16,uint24,uint32…uint256后面的数字代表的是计算机的最小存储单位:位。1个字节代表8位。类型以一个字节递增,最大到256位,也就是32
jonson_jackson
·
2018-11-21 20:25
区块链
solidity
智能合约
solidity智能合约
[6]-基本类型与bool运算
变量存储数据的抽象单位,代表内存中的一段空间。类型同其他的编程语言一样,solidity中也有许多基本的类型。类型决定了存储空间的大小和解析的方式。下面列举出了solidity中基本的类型int、uint、byte、string、bool基本类型bool类型这一小节中介绍基本的bool类型,bool类型只能够存储true或者false。bool运算与运算符123456789101112131415
jonson_jackson
·
2018-11-21 20:47
区块链
solidity
智能合约
solidity智能合约
[5]——一笔交易详解
在之前,我们已经写好了一个最简单的helloworld合约,如下:1234567891011121314151617pragmasolidity^0.4.23;contractHelloWorld{ stringpublicname="jonson"; functiongetName()publicviewreturns(string){ returnname; } function
jonson_jackson
·
2018-11-21 20:28
区块链
solidity
智能合约
solidity智能合约
[4]-pure与view剖析
pure与view代码例子如下的一段
solidity智能合约
中,只要有了pure与view修饰符的函数,那么调用函数就不会消耗gas。
jonson_jackson
·
2018-11-21 20:11
区块链
solidity
智能合约
solidity智能合约
[3]-代码结构
合约结构1、明确solidity的版本号。此行意味着我们正在阻止我们的程序被一个比0.4.0更老的编译器编译^表示向上兼容,但是不能够被0.5.0及其以上的编译器编译。我们这样做是为了尽量减少代码以意想不到或不兼容的方式编译时可能发生的错误的风险。2、定义一个合约,内部有不同的方法和属性。描述一个对象,可以从属性和行为两个方面,这正是面向对象的重要特征。3、在合约的内部声明变量的方法和属性。4、定
jonson_jackson
·
2018-11-21 20:58
区块链
solidity智能合约
【ETH钱包开发04】web3j转账ERC-20 Token
ETH钱包开发03】web3j转账ETHERC-20Token转账的2种方式1、直接用web3j的API2、java/Android调用合约的transfer方法不管用哪种方式来转账,你都需要先写一个
solidity
唠嗑008
·
2018-11-19 09:27
Solidity智能合约
:Ownable Contracts
内容来自:https://cryptozombies.io/OpenZeppelin库的Ownable合约下面是一个Ownable合约的例子:来自_OpenZeppelin_Solidity库的Ownable合约。OpenZeppelin是主打安保和社区审查的智能合约库,您可以在自己的DApps中引用。等把这一课学完,您不要催我们发布下一课,最好利用这个时间把OpenZeppelin的网站看看,保
东方泯
·
2018-11-15 11:04
上一页
1
2
3
4
5
6
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他