이더리움 머니 결제 관련 표기법 및 주의사항
7163 단어 학습 노트
payable 표지의 함수
함수에
payable
표지를 추가하면 ether를 수신할 수 있고 ether를 현재 계약에 저장할 수 있다. 예를 들어 다음 예시의 deposit
함수와 같다.pragma solidity ^0.4.0;
contract supportPay{
// ether
function deposit() payable{
}
//
function getBalance() constant returns(uint){
return this.balance;
}
}
위 코드에서 당신은
deposit()
을 통해 현재 계약에 ether를 저장할 수 있습니다. 이것은 함수 호출을 통해 호출되고 호출에서 address.call( ).value( ether)
을 통해 이루어진 것입니다. 여기서 참고할 수 있습니다.http://me.tryblockchain.org/Solidity-call-callcode-delegatecall.html . send () 함수로 ether 보내기
주소 대상의
send()
은 한 주소에 직접 지불할 수 있는데 다음은 계약 계좌에 지불하는 예이다.우리가
address.send(ether to send)
을 사용하여 어떤 주소로 이체하면 일반 주소라면 직접 받을 수 있으니 매우 간단하다.우리는 계약으로 발송과 수신을 시뮬레이션할 것이다.pragma solidity ^0.4.0;
contract SendAndReceiveByContract{
//fallback
event fallbackTrigged(bytes data);
// send() ether ,
function() payable{fallbackTrigged(msg.data);}
// ether
function deposit() payable{
}
//
function getBalance() constant returns(uint){
return this.balance;
}
event SendEvent(address to, uint value, bool result);
// send() ether
function sendEther(){
// this
//result , this.send(1) , result true, false
bool result = this.send(1);
SendEvent(this, 1, result);
}
}
상기 코드에서 우리는 먼저
deposit()
계약을 사용하여 ether에 저장해야 한다. 그렇지 않으면 잔액이 부족하기 때문에 send()
함수를 호출하면 오류가 발생할 것이다.ether에 저장한 후 우리는 sendEther()
을 호출하여 send()
을 사용하여 계약에 데이터를 보내면 다음과 같은 이벤트를 촉발할 것이다.SendEvent[
"0xc35f7ac1351648b0b8a699c5f07dd6a78f626714",
"1",
"true"
]
fallbackTrigged[
"0x"
]
보시다시피
send()
을 사용하여 1wei를 계약에 발송했습니다.여기서 특별히 주의해야 할 것은, 다음은 모두가 먼저 기억하고, 뒤에는http://me.tryblockchain.org/blockchain-solidity-fallback.html계약은
send()
함수를 통해 전송되는 ether를 수신해야 하며 다음과 같은 제한이 있습니다.send()
함수를 통해 수신하려면 반드시fallback 함수를 정의해야 한다. 그렇지 않으면 이상을 던질 수 있다.payable
키워드를 증가해야 한다. 그렇지 않으면 send()
의 실행 결과는 시종 false
이 될 것이다.지불 중 가능한 실패
send()
실패호출자는 호출된 창고의 깊이를 강제로 지정할 수 있기 때문에 호출된 창고의 깊이가 지정된 값을 초과할 때 일반적으로 1024이다.또는 수신 주소 처리 지불 과정 중
out of gas
.실패로 인해 이때의 send()
의 결과는 false
이었다.계약의
fallback()
계약 주소라면 send()
을 실행할 때 기본적으로 fallback()
을 실행합니다. (이 함수가 존재한다면)EVM의 기본 동작이므로 차단할 수 없습니다.그래서 이 함수는 out of gas
또는 다른 실패를 초래하여 전체 거래가 취소되었다.실패로 인해 이때의 send()
의 결과는 false
이었다.payable 표식
세심한 독자들은
deposit
함수에 payable
키워드가 있다는 것을 발견할 수 있다. 만약에 한 함수가 화폐 조작을 해야 한다면 반드시 payable
키워드를 가지고 있어야 msg.value
을 정상적으로 수신할 수 있다.총괄: 1. 만약에 함수가 화폐 조작을 해야 한다면payable 키워드를 가져가야 한다.
2. 현재 계약에 지불:this.send(10)
3. 만약에 계약이send() 방법을 사용하려면fallback 함수를 정의해야 한다. 그렇지 않으면 이상이 발생할 수 있다.
(tryblockchain. org)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
STL 학습노트(6) 함수 객체모방 함수는 모두pass-by-value이다 함수 대상은 값에 따라 전달되고 값에 따라 되돌아오기 때문에 함수 대상은 가능한 한 작아야 한다(대상 복사 비용이 크다) 함수 f와 대상 x, x 대상에서 f를 호출하면:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.