Solidity(address的四个方法)
address的四个方法
send,call,callcode,delegatecall
例子:
发送以太币的send方法
//下面是send方法,涉及到以太币的情况可能用到payable,senddemo方法是可以发送以太币过去的,add.transfer(u)
pragma solidity ^0.4.;
contract addressDemo{
function addressDemo() payable{
} function sendDemo(address add){
uint u= ether;//以太币的最小单位是wei,最大单位是ether
add.transfer(u)
}
}
call方法,注意地址.call,和地址.delegatecall方法的区别,call是自己本身不发生改变,被调用的值发生改变,delegatecall是自己本省的值发生改变,被调用的不发生改变
pragma solidity ^0.4.; //首先定义了两个合约
contract A{
uint public p;
event e(address add,uint p)//为了观察声明一个事件
//定义了一个方法
function fun(uint u1,uint u2) {
p=u1+u2;//改变了A合约中的p,改变被调用者合约方法中的变量
e(msg.sender,p)//下面的2,3传给了fun方法 } } contract B{ uint public q;
bool public b; //当我们用B中的call方法的时候,调用A中的某个方法的执行,只会改变A中某个方法的值,B中的某个方法的值不会发生改变,被调用的合约本身发生改变 function call1(address add) returns(bool){
b=add.call(bytes4(keccak256("fun(uint256,uint256)")),,)
return b;//下面的add调用call方法
} //下面的delegatecall是会改变B中的某个方法,而A中的某个方法是不会有任何的改变,下面是自己的合约发生变化
function call2(address add) returns(bool){
b=add.delegatecall(bytes4(keccak256("fun(uint256,uint256)")),,)
return b;
} }
例子:
pragma solidity ^0.4.; //定义一个合约
contract CA{
uint public p;
bytes public failmsg;
string public str;
event e(address add,uint p)
event e1(address add, bytes b); //定义一个构造函数,构造方法
function CA(string _str) {
str=_str;//str重新被赋值
}
function fun(uint u1,uint u2) {
p=u1+u2;
e(msg.sender,p)
}
//构造一个匿名函数
function () {//下面就会执行这个匿名函数
failmsg=msg.data;
e1(msg.sender,failmsg)//
}
} contract CB{
uint public q;
bool public b;
function call1(address add) returns(bool){
b=add.call(bytes4(keccak256("fun(uint256,uint256)")),,);
return b
}
function call2(address add) returns(bool){
b=add.delegatecall(bytes4(keccak256("fun(uint256,uint256)")),,);
return b
} //使用的是call方法,上面发生的值发生改变,下面不发生改变
function call3(address add) returns(bool){
b=false
b=add.call("aaaa",,,,,);
return b
} //下面是本身自己的值发生改变,b的值发生改变
function call4(address add) returns(bool){
b=false;
b=add.delegatecall("bbbb",,"10x2323",);//执行匿名函数
return b
}
}
Solidity(address的四个方法)的更多相关文章
- Angular--页面间切换及传值的四种方法
1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...
- oracle增加表空间的四种方法
1. 查看所有表空间大小 select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_nam ...
- 两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...
- 织梦DedeCMS模板防盗的四种方法
织梦(DedeCMS)模板也是一种财富,不想自己辛辛苦苦做的模板被盗用,在互联网上出现一些和自己一模一样的网站,就需要做好模板防盗.本文是No牛收集整理自网络,不过网上的版本都没有提供 Nginx 3 ...
- 让一个图片在div中居中(四种方法)
第一种方法: <div class="title"> <div class="flag"></div> <div cl ...
- 运行jar应用程序引用其他jar包的四种方法
转载地址:http://www.iteye.com/topic/332580 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个ja ...
- java中定时器的四种方法
package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ja ...
- MYSQL获取自增ID的四种方法
MYSQL获取自增ID的四种方法 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与tabl ...
- linux下配置ip地址四种方法(图文方法)
主要是用第四种方法 (1)Ifconfig命令 第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig ...
随机推荐
- string.GetHashCode获取值不一样
今天在使用程序时发现两个String.GetHashCode值不一样,通过测试 (1)程序在两台不同的计算机上运行,没有变化. (2)修改32位,64位,值有变化,说明GetHashCode和.net ...
- 【D3D】Directx12运行报错&win10无法添加【图形工具】
“我欢欣雀跃地打开<3D programming with Directx12>,准备接受D3D的洗礼,然后就卡在了 chapter 0 .”——Liez 100%纯小白的chapter ...
- Chain训练准则的计算
轮迭代时验证集的日志: log/compute_prob_valid.1000.log: LOG (nnet3-chain-compute-prob[5.5.100-d66be]:PrintTotal ...
- Hbase配置WEB UI界面
1 找到各个节点下面的Hbase-site.xml文件,添加如下配置 <property> <name>hbase.master.info.port</name> ...
- JDK1.8源码分析之Comparable && Comparator
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util. ...
- python 中的列表List
一 定义:能装东西的东西 列表中装的数据是没有限制的, 大小基本上是够用的列表使用[]来表示. 在列表中每个元素与元素之间用逗号隔开(有索引和切片) 索引:每个元素对于一个单独索引号 切片, list ...
- Windows命令查看文件MD5,SHA1,SHA256 文件校验
certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile ...
- 使用WebView时软键盘遮挡H5页面解决办法
简单解决办法:在清单文件中添加 android:windowSoftInputMode="adjustResize" 此举可在软键盘弹出时,重新测量布局,保证不遮挡光标的所在位置. ...
- D. Time to go back(思维)
题目链接:http://codeforces.com/gym/100952/problem/D 题目大意:n个礼物,m个人,要给m个人中的k个人买大于等于d的礼物,其他人随意,问你选择礼物的方案数(不 ...
- MGR架构~ 整体性能架构的调优
一 简介:MGR集群架构的调优二 过程:本文将从各个角度来具体阐述下三 硬件 1 硬件选择相同配置的服务器,磁盘,内存,cpu性能越高越好四 网络 1 0丢包和最好万兆网卡五 MGR本身 ...