即便在虛擬世界我們也是需要傷痕的 — 淺談 ERC 1238
分享一個自己最近最感興趣的ERC協定,ERC-1238
它能創造Non-transferrable Non-Fungible Tokens (badges)
也就是在大家追求著NFT市場流動性的現在反其道而行,
一種為「不可轉讓」而存在的NFT。
一旦分配就無法轉讓,能夠隨著時間推移而累積,
它能夠呈現生命的重量(經驗值)也能夠呈現努力的質量(證書)。
它就像我們身上的傷痕,我想即便在虛擬世界我們也是需要傷痕的。受過的傷是我們的戰果,傷痕是一種記憶,也是一種愛。可以設定遞減或過期,像累積的名聲或噗浪的karma值可能遞減,你也可能把它放到過期,像是有些證照過幾年就要重新努力一次證明自己值得。
甚至可以用來質押(情緒勒索?)
然後你可能因為質押而失去這份愛(?
接下來我們來看看技術層面:
技術上來說它是一種公鑰,定義一組API讓它們能夠辨識公鑰的不同狀態,然後智能合約就能用它來過濾參與者和進行分配。
不過這個構想目前也會面臨一些問題,有些人會擔心如果綁定的是一個帳戶,對於冷錢包的使用者而言,可能會因為不可轉讓而無法將資產從熱錢包移到冷錢包,不過這個擔心其實可以透過多帳戶登錄的方式來解決!
更大的困難是即使是綁定錢包,錢包的主人在現實世界中依然可能會有冒名的問題,這時候可以考慮搭配可以跟像ERC-1484這樣的身分證名協定搭配使用,同時設定轉讓時必須總體轉讓,不能個別轉讓,也能在保留轉讓彈性的同時維持信用人格的完整。
其實另一個協定ERC-725(735)也有類似的功能,claims可以發出身份證明,如果證明出錯或過期,合約持有者也可以撤回,但是對於ERC-725而言,他曾發出的身份證明的所有權(資訊的提供與否)終究還是掌握在持有者身上,要是撤回做得不好,即使持有者將它撤回,持有者仍可能用它曾經發出的證明招搖撞騙,而ERC-1238的理想方向則是將證明的持有權完全取決於分配的合約,合約的持有者隨時能對這些證明進行移除或調整,也就是說實作時的切入點可以參考ERC-725中的claims進行改良,讓合約的持有者發出的證明只能被錢包地址被動接受,並只採信最終狀態。
snaketh4x0r https://github.com/ethereum/EIPs/issues/1238#issuecomment-469764886
在guthub提供了自己嘗試實作方式的參考:
首先他在介面中新增一個定義:
event NonTransferable(address target, bool frozen);
然後在mint的時候把帳戶frozen,
之後再進行移轉的時候,都必須確認帳戶的狀態,如果在frozen就不能夠移轉:
function transfer(address to, uint tokens) onlyOwner public returns (bool success) { require(!frozenAccount[to]); require(!frozenAccount[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); freezeAccount(to, true); emit Transfer(msg.sender, to, tokens); return true; }
xuhcc https://github.com/ethereum/EIPs/issues/1238#issuecomment-592030529
則提供了另一種更簡約的實作參考,只有一個boolean value 去決定它是否可移轉,讓ERC-1238可以更單純的作為一個接口,跟其他協定兼容,也保留轉讓空間,讓持有者可以一次移轉全部:
contract ERC1238 is ERC165 { bool internal _transfersEnabled; /* * bytes4(keccak256('transfersEnabled()')) == 0xbef97c87 */ bytes4 private constant _INTERFACE_ID_ERC1238 = 0xbef97c87; constructor () public { _registerInterface(_INTERFACE_ID_ERC1238); } function transfersEnabled() external view returns (bool) { return _transfersEnabled; } }
這邊還有MiniMeToken實作的案例可以參考:
除此之外還有很多其他更複雜的應用可能,
像是如果遇到隱私權的問題時,
可以設計成申請人用錢包地址申請證明,然後經過合約認證,申請人可以在任何時候領取,不過合約跟申請人都能夠單方面把證明設為不公開,如果證明要認證時,就必須合約和申請人都發布同樣的證明才能被批准,用以保護平時的隱私
ERC-1238這個概念帶給我們的社會更多想像,目前這個協定還在概念階段,真正安全可靠的去中心信用系統還沒有被造出來,但是小至社群身份組、白單和每一場AMA和活動的出席證明,大至社會信用、數位ID身分證、數位畢業證書,都因為這個概念而成為可能,期待之後能看到更多好的應用出現!