LikeCoin 代幣付款委託

使用 ERC-20 代幣作為交易費用

Edmond Yu
Edmond Yu
Aug 13, 2018 · 7 min read

(本文英文原文作者為 Aludirk,由 Edmond Yu 譯)

若你試過 like.co 的點對點轉賬功能,你會懷疑何解你能轉賬 ERC-20 代幣而不用付出以太幣作交易費用。


付出0.0011252ETH作交易費用,以傳送100LIKE

你可以使用 MetaMask 處理一般的 ERC-20 代幣轉賬。你會發現你需要付出例如 0.0011252ETH 作交易費用。

讓我們來看看一般用作傳送 ERC-20 代幣的智能合約:

// LikeCoin.sol
function _transfer(address _from,
address _to,
uint256 _value)
internal returns (bool success) {
_tryUnlockBalance(_from);
require(_from != 0x0);
require(_to != 0x0);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(_from, _to, _value);
return true;
}
// LikeCoin.sol
function transfer(address _to,
uint256 _value)
public returns (bool success) {
return _transfer(msg.sender, _to, _value);
}

很簡單,就是確認 _from_to 不是 0x0,然後於 _from 減去傳送金額,再於 _to 加上傳送金額,完成。


然而,若使用代幣付款委託服務,例如你想發送 100 LIKE 給我,你會發現:

like.co 上的點對點轉賬頁面

點擊「確認」鍵後,你只須在 MetaMask 上簽署,便能傳送 100LIKE到我以太坊上的地址,而毋須支付任何以太幣作交易費。

簽署確認傳送LikeCoin

讓我們來看看智能合約中 trasferDelegated 的源代碼,揭開箇中的秘密吧:

// LikeCoin.sol
function transferDelegated(address _from,
address _to,
uint256 _value,
uint256 _maxReward,
uint256 _claimedReward,
uint256 _nonce,
bytes _signature)
isDelegated(_from, _maxReward, _claimedReward, _nonce)
public returns (bool success) {
require(signatureChecker.checkTransferDelegated(_from,
_to,
_value,
_maxReward,
_nonce,
_signature));
return _transfer(_from, _to, _value);
}
// LikeCoin.sol
modifier isDelegated(address _from, uint256 _maxReward, uint256 _claimedReward, uint256 _nonce) {
require(allowDelegate);
require(_from != 0x0);
require(_claimedReward <= _maxReward);
require(!usedNonce[_from][_nonce]);
usedNonce[_from][_nonce] = true;
require(_transfer(_from, msg.sender, _claimedReward));
_;
}
// SignatureCheckerImpl.sol
function checkTransferDelegated(address _from,
address _to,
uint256 _value,
uint256 _maxReward,
uint256 _nonce,
bytes _signature)
public constant returns (bool) {
bytes32 hash = keccak256(transferDelegatedHash,
keccak256(msg.sender,
"transferDelegated",
_to,
_value,
_maxReward,
_nonce));
var (v, r, s) = _bytesToSignature(_signature);
return ecrecover(hash, v, r, s) == _from;
}

transfertransferDelegated 之間的唯一分別在於 signatureCheckercheckTrasnsferDelegated,以及 isDelegated 修飾器(modifier)。首先,我們以 transferDelegated 方法獲得你的簽署tovaluemaxRewardnoncecheckTransferDelegated 這個函數會使用 ecrecover 去檢查那些數據是否真的由你的地址所簽署。當我們確認這筆記錄真的由擁有人所簽署,我們會先從 _from (簽署方)減去 _claimReward 量的 LikeCoin,並加於 msg.sender (LikeCoin 基金會,作為受託者)作為交易費用。然後,直接執行 _transfer_from 轉賬到 _to

因此,委託者(你)可以就一筆付款委託指定付出最高的交易費用(_maxReward) ,而受託者 (在這個例子便是 LikeCoin 基金會)會負擔所需的以太幣交易費以在以太坊上執行這筆交易。也因此對委託者而言,他只需以 LikeCoin(ERC-20 代幣) 支付交易費用。

咦,但你使用 like.co 的點對點轉賬服務時,好像從來沒有支付過 LikeCoin 作為交易費用啊?當然了,因為我們把 _maxReward 設定了為 0 嘛。

相關鏈結: 以太坊代幣付款委託 | Make it pay | Introduction to LikeChain | English version

緊貼 LikeCoin 消息,加入我們的社群


原文作者,LikeCoin 技術執行長 Aludirk —

LikeCoin

LikeCoin is a decentralized protocol for content…

Edmond Yu

Written by

Edmond Yu

co-founder of oice (黃牛山人)

LikeCoin

LikeCoin

LikeCoin is a decentralized protocol for content monetization, attribution, and distribution. Realign Creativity and Rewards on the Internet. Build on #Cosmos. | Reinventing the Like — 化讚為賞

More From Medium

More on Likecoin from LikeCoin

More on Likecoin from LikeCoin

LikeCoin Weekly Progress Update 2020.03.16

Phoebe Poon
Mar 16 · 5 min read

1

More on Likecoin from LikeCoin

More on Likecoin from LikeCoin

LikeCoin Weekly Progress Update 2020.03.09

Phoebe Poon
Mar 10 · 5 min read

23

More on Likecoin from LikeCoin

More on Likecoin from LikeCoin

LikeCoin Weekly Progress Update 2020.03.02

Phoebe Poon
Mar 4 · 4 min read

7

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade