English version is coming soon
FST Relayer是一個由FST Network以 Rust 程式語言實作的 Relayer 服務。
注意: FST Relayer 尚處於測試階段,我們無法保證所有功能都已健全。
FST Relayer 以 GNU GENERAL PUBLIC LICENSE Version 3 進行授權。 此專案中有部分程式碼和實作方式取自 Parity Technologies 的 Parity Ethereum,Parity Ethereum 亦採用 GPL v3 進行授權。
-
Proof-of-Relay:Proof-of-Relay是FST 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的持有者不一定持有Ether。ERC-1376 Token的持有者能透過發送Token Transfer Request給Relayer,在Token Transfer Request中聲明Token的接收者、Token的數量以及支付給Relayer作為手續費的Token數量等資訊。 -
Relayer:Relayer是Relay Network中的特殊節點,Relayer的職責在於接收來自ERC-1376 Token持有者的Token Transfer Request並協助持有者傳送Token,Relayer藉由消耗自己的Ether完成 Token 持有者交付的Token Transfer Request,並抽取 Token 持有者在Token Transfer Request中所承諾的一定數量的ERC-1376 Token作為報酬。
成為Relayer有以下必要條件:
- 持有一定數量的
Ether,藉由這些Ether作為支付給礦工的手續費發送合法的Ethereum Transaction。 - 至少能以一種方式接收來自 Token 持有者的
Token Transfer Request。 - 能將收集到的
Token Transfer Request發送至區塊鏈網路中執行。
FST Relayer需要以最新穩定版本的 Rust 編譯。
我們建議你以rustup安裝 Rust,如果你尚未安裝rustup請使用以下指令安裝rustup:
- Linux:
$ curl https://sh.rustup.rs -sSf | sh- Linux:
# download FST Relayer source code
$ git clone https://github.com/fstnetwork/fst-relayer
$ cd fst-relayer
# build in release mode
$ cargo build --release唯有實作了ERC-1376規範的 Token 才能透過Proof-of-Relay 完成 Token 傳送。
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]);
}
}FST Relayer的運作依賴至少一個Ethereum Node,Ethereum Node必須是個擁有整本帳本的 Full Node。
Ethereum Node 的架設可參考Go Ethereum或Parity,
FST Relayer 藉由 Ethereum Node 進行以下工作:
- 發送 Ethereum Transaction,藉此完成 relayer 的最終任務
- 取得區塊鏈上的狀態
- 測試
Token Transfer Request是否符合發送條件