以太坊智能合约开发:让合约接受转账 在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢? 有三种方式: 部署合约时转账 调用合约提供的方法 直接向合约地址进行转账 但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢? 1.部署转账 在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符. 示例: contract Test { // 构造函数添加payable修饰符…
使用root用户登录进入linux,打开进去终端 在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-eth0 (最后的eth0是网卡名,我的是Auto_eth0) 回车后, 开始编辑,填写ip地址.子网掩码.网关.DNS等.其中"红框内的信息"是必须得有的. 编辑完成后,保存退出 重启网络服务 service network restart 或 /etc/init.d/network restart 然后ping网关,ping外网进行测试.都…
工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后,又去网上搜了通过获取图片的二进制流转换成base64的方式,两种方式,都是亲测有效,通过Toolkit偶尔会出现,转base64后,展示不完整的问题.所以建议用通过下载二进制流转换的方式进行转换. 下面附上代码: import java.awt.image.BufferedImage; impor…
0x00 前言 Solidity(http://solidity.readthedocs.io/en/v0.4.24/) 是一种用与编写以太坊智能合约的高级语言,语法类似于 JavaScript. Solidity 编写的智能合约可被编译成为字节码在以太坊虚拟机上运行.Solidity 中的合约与面向对象编程语言中的类(Class)非常类似,在一个合约中同样可以声明:状态变量.函数.事件等.同时,一个合约可以调用/继承另外一个合约. 在 Solidity 中提供了 call.delegateca…
智能合约地址判断 在旧版本中可使用以下代码来进行比较: owner != 0x0 但如果在新版本中使用,则会提示错误信息. 那么,如何正确使用来比较地址是否为空呢. 解决方案 可以使用address(0)或address(0x0)来替代.因此可以如下写法: owner != address(0); // 或 owner != address(0x0); 当然,在使用操作符的时候也建议使用: == // 或 != 来替代 > 原文链接 :https://www.choupangxia.com/20…
简介 tx.origin是Solidity的一个全局变量,它遍历整个调用栈并返回最初发送调用(或事务)的帐户的地址.在智能合约中使用此变量进行身份验证会使合约容易受到类似网络钓鱼的攻击. 但针对tx.origin的使用并不用谈虎色变,正确的使用还是有它的应用场景的. 漏洞详解 漏洞合约 在如下合约中使用到了tx.origin的判断. pragma solidity ^0.4.11; // 不要使用这个合约,其中包含一个 bug. contract TxUserWallet { address o…
Solidity通过合约转ERC20代币   ERC20代币并不能像Ether一样使用sendTo.transfer(amt)来转账,ERC20代币只能通过token中定义的transfer方法来转账,每个账户的余额信息也只保存在token合约的状态变量中.如果要使用除token合约之外的合约进行ERC20代币的转账,那就需要这个合约能够调用ERC20代币合约中的transfer方法. pragma solidity ^0.4.21; contract token { function tran…
智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用.本篇文章带大家通过具体示例来了解一下智能合约之间的调用. 在智能合约的编译过程中,有两种情况:调用者和被调用者在一个sol文件中和分别在不同的文件中. 同sol文件的智能合约调用 在下面的智能合约中,Demo1和Demo在同一个文件中,可进行同时编译,然后逐个发布. pragma solidity ^0.5.10; contract Demo1{ uint public data; functi…
Solidity编写智能合约 1 pragma solidity ^0.4.4;//版本声明 ^代表向上兼容 pragma代表版本声明 solidity 代表开发语言 2 //定义类 3 contract Person { 4 //定义属性,属性名规范前面加_ 5 uint _height; 6 uint _age; 7 address _owner;//代表合约的拥有者 8 //方法名与合约名相同时属于构造函数 9 function Person(){ 10 _height = 180; 11…
Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来说通过复杂的算法生成随机数成本太高,同时智能合约又运行在多个节点上,因此,不能使用像时钟时间来生成随机数. solidity随机数生成过程 在此使用最常用的算法之一是"线性同余发生器"(LCG).基本步骤如下: 接收输入 基于输入执行算法 取输出模数(除以需要范围内的最大数量). func…