转账接收者、发起者问题
准备写个转账的代码时,发现solidity语言中转账的函数有三个,分别是send、transfer、call。用法也很简单:
目标接收者地址.transfer(金额);
目标接收者地址.send(金额);
目标接收者地址.call.value(金额)();
但使用过程中,总是转账失败,返回revert错误,显示没有钱发送。此时我就很想知道到底是谁再给目标地址转账了。
可以很明显的看出,代码很明显指出接收者是谁,但是发送者到底是谁呢?
标题这个代码到底代表的是谁的地址?我们用代码来展示一下
function getAddress() public view returns(address,uint256){
return (address(this),address(this).balance);
}
运行结果图:

这个地址是什么呢?下图可以给出答案:

很明显,address(this)是合约地址,那么自然,address(this).balance也是没有余额的。
function getMsgAddress() public view returns(address){
return address(msg.sender);
}
合约部署:

运行结果:


调用该合约的账号地址为上图所示,msg.sender显示出来的也是该账户。所以我们可以知道msg.sender是个账户地址。
那么这个账户地址是调用该合约的用户地址,还是部署该合约的用户地址呢?
只需要将账户地址换一个,再调用一次即可:

换成如上图所示的地址看看。

很明显,msg.sender就是合约调用者的地址。
扯了那么多,到底转账发送者是谁呢?到底是合约地址,还是合约调用者呢?
首先先讲讲我碰到的无法转账的问题。(显示余额不足)
contract transfer{
address accountAddress;
address payable targetAddress;
constructor(){
accountAddress=msg.sender;
}
function getAccountAddress() view public returns(address){
return accountAddress;
}
//设置目标地址
function setTargetAddress(address payable target) public {
targetAddress=target;
}
function getTargetAddress() view public returns(address){
return targetAddress;
}
//向目标账户转账
function EFT() payable public{
targetAddress.transfer(100 wei);
}
//据说这两个代码是必须的,下面给个链接,你们可以学习学习
fallback() external payable {}
//https://blog.csdn.net/weixin_43343144/article/details/88173747
receive() external payable {}
}
合约部署信息:

合约账户与目标账户设置:


合约调用者是0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2
转账目标接收者是:0x5B38Da6a701c568545dCfcB03FcB875f56beddC4
随后点击EFT转账,错误信息如下;

很明显这是钱不够导致的。那么我也不卖关子了,需要在下图位置给出金额:

注意:前面所有的操作都不需要给以太币数量赋值,只需要设置为0.。只有当要点击EFT进行转账过程了,需要把以太币数量赋值为转账金额(多一点没关系,少一点就会出现上面我出现的失败)。
为了让结果更加明显,我将代码改为:
//向目标账户转账
function EFT() payable public{
targetAddress.transfer(1 ether);
}
账户初始金额如下图所示:
合约调用者金额99.9
接收者金额99.9
调用EFT函数以后:

由上面可知:谁调用了合约,谁就可以作为主体账户,无论是转账还是其他操作,消耗的都是调用合约的地址的以太币。
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":