Skip to content

fstnetwork/relayer

Repository files navigation

English version is coming soon

FST Relayer 預覽版本

FST Relayer是一個由FST Network以 Rust 程式語言實作的 Relayer 服務。

注意: FST Relayer 尚處於測試階段,我們無法保證所有功能都已健全。

License

FST Relayer 以 GNU GENERAL PUBLIC LICENSE Version 3 進行授權。 此專案中有部分程式碼和實作方式取自 Parity Technologies 的 Parity Ethereum,Parity Ethereum 亦採用 GPL v3 進行授權。

Technical Overview

  • Proof-of-RelayProof-of-RelayFST Network 的技術之一,其目的在幫助 ERC-1376 Token 的持有者在不需要花費 Ether作為手續費的情況下傳送自己持有的 ERC-1376 Token,Token 持有者藉由支付自己持有的 ERC-1376 Token 作為手續費,透過 Relayer的協助發送ERC-1376 Token 。簡言之,透過Proof-of-Relay這種方法,持有ERC-1376 Token卻未持有Ether的使用者也可以傳送自己的ERC-1376 Token給其他使用者。

  • ERC-1376 Token:符合ERC-1376規範的Token稱為ERC-1376 Token

  • ERC-1376 Token 持有者ERC-1376 Token的持有者,ERC-1376 Token的持有者不一定持有EtherERC-1376 Token的持有者能透過發送Token Transfer RequestRelayer,在Token Transfer Request中聲明Token的接收者、Token的數量以及支付給Relayer作為手續費的Token數量等資訊。

  • Relayer: RelayerRelay Network中的特殊節點,Relayer的職責在於接收來自ERC-1376 Token持有者的Token Transfer Request並協助持有者傳送TokenRelayer藉由消耗自己的Ether完成 Token 持有者交付的Token Transfer Request,並抽取 Token 持有者在Token Transfer Request中所承諾的一定數量的ERC-1376 Token作為報酬。

成為Relayer有以下必要條件:

  • 持有一定數量的Ether,藉由這些Ether作為支付給礦工的手續費發送合法的Ethereum Transaction
  • 至少能以一種方式接收來自 Token 持有者的Token Transfer Request
  • 能將收集到的Token Transfer Request 發送至區塊鏈網路中執行。

Build Dependencies

FST Relayer需要以最新穩定版本的 Rust 編譯。 我們建議你以rustup安裝 Rust,如果你尚未安裝rustup請使用以下指令安裝rustup

  • Linux:
$ curl https://sh.rustup.rs -sSf | sh

Build from Source Code

  • Linux:
# download FST Relayer source code
$ git clone https://github.com/fstnetwork/fst-relayer
$ cd fst-relayer

# build in release mode
$ cargo build --release

Runtime Dependencies

On-chain

ERC-1376 Token

唯有實作了ERC-1376規範的 Token 才能透過Proof-of-Relay 完成 Token 傳送。

Dispatcher Smart Contract

Dispatcher Smart Contract是一種在區塊鏈上輔助Relayer 的智能合約。Relayer 將收集到的多個Token Transfer Request壓制成一個Ethereum Transaction, 傳送給 Ethereum 上的Dispatcher Smart Contract,透過Dispatcher Smart Contract的輔助能讓Relayer在區塊鏈上依序執行多比Token Transfer Request

Dispatcher Smart Contract負責呼叫ERC-1376 Token的程式碼片段如下:

// 注意:data 當中的資料已經由relayer 在鏈外處理完畢,能夠直接透過call() 呼叫token smart contract

// 當一批Token Transfer Request 只針對單一一個Token 時,我們呼叫此method
function singleTokenDispatch(address token, bytes[] data) public {
    for (uint256 i = 0; i < data.length; ++i) {
        token.call(data[i]);
    }
}

// 當一批Token Transfer Request 混合了多種Token 時,我們呼叫此method
function multipleTokenDispatch(address[] tokens, bytes[] data) public {
    for (uint256 i = 0; i < data.length; ++i) {
        tokens[i].call(data[i]);
    }
}

Off-chain

Ethereum Endpoint

FST Relayer的運作依賴至少一個Ethereum NodeEthereum Node必須是個擁有整本帳本的 Full Node。 Ethereum Node 的架設可參考Go EthereumParity

FST Relayer 藉由 Ethereum Node 進行以下工作:

  • 發送 Ethereum Transaction,藉此完成 relayer 的最終任務
  • 取得區塊鏈上的狀態
  • 測試Token Transfer Request是否符合發送條件