Skip to content

Instantly share code, notes, and snippets.

@dAAAb
Last active April 28, 2018 14:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dAAAb/a2f24ccf7d5207cd5ac0d9f63d0e1b29 to your computer and use it in GitHub Desktop.
Save dAAAb/a2f24ccf7d5207cd5ac0d9f63d0e1b29 to your computer and use it in GitHub Desktop.

[倡議] DTU 一所去中心化大學 Decentralized Taiwan University v1.0

如果大學自治被中心化思想給箝制,而法人自治又遙遙無期。在這個去中心化思維的年代,我們是不是總算可以反過來靜下心,思考一所去中心化的大學該如何建立?

**基於以太坊網路發行 DTU 通證,並在 5/4 開始公開發行,並進行 DAICO

1ETH 兌換 10000 DTU

第一階段

  • 總共發行 54億顆 (台灣兩千七百萬人口,五四運動)DTU
  • 軟上限 5萬4千顆 ETH
  • 硬上線 50萬4千顆 ETH
  • 發行期間:戊戌年五月四日至六月五日
  • 發行期間錢包由第三方律師管理
  • 智能合約由計畫團隊建立,由第三方律師公證
  • 發行結束後,剩餘貨幣將銷燬,所籌集之 ETH 將全數轉移至第二階段智能合約

若第一階段未達軟上限,則全額退回原地址,以太鏈上轉帳手續費由計畫團隊承擔

第二階段

第二階段智能合約由半去中心化自組織共同管理 半去中心化自組織(Semi-DAO)之錢包合約,將設校長、主任秘書、學術副校長、行政副校長,人數等同現有國立台灣大學,並另設財務、會計、法務等稽查員。 每一單位各有一合約管理地址,現階段之校長為團隊推舉,其他人員為校長舉薦會議多數決

若第二階段於三個月內未完成籌設,重要管理員之地址無法由團隊設定入合約,則所有 ETH 將於第一階段合約自行退回贊助者,本計劃中止。

第三階段

將設立第三階段完全去中心化大學自組織智能合約 將 DAO 之營運、撥款權限及人事任用權限交由持有 DTU 代幣者共同決議

DTU 工作事項:

  • 捐贈臺大興建大樓,命名:戊戌樓、自治館(待定)
  • 若臺大不接受,則創辦大學自治獎金(學生、老師)每年選出推廣自治思維、思辨精神的教師、學生,獎金 54 萬元
  • 非自願離職教師法律償助
  • 與國際組織 X Prize 與美國奇點大學合作,創辦 DTU X Prize,全球任何一團隊成功將一般大學轉型為去中心化大學,並得自行營利運作者,獲得一千萬美元獎金

DTU 第一階段合約 - 鑄幣

pragma solidity ^0.4.4;

contract Token {

/// @return total amount of tokens
function totalSupply() constant returns (uint256 supply) {}

/// @param _owner The address from which the balance will be retrieved
/// @return The balance
function balanceOf(address _owner) constant returns (uint256 balance) {}

/// @notice send `_value` token to `_to` from `msg.sender`
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transfer(address _to, uint256 _value) returns (bool success) {}

/// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
/// @param _from The address of the sender
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}

/// @notice `msg.sender` approves `_addr` to spend `_value` tokens
/// @param _spender The address of the account able to transfer the tokens
/// @param _value The amount of wei to be approved for transfer
/// @return Whether the approval was successful or not
function approve(address _spender, uint256 _value) returns (bool success) {}

/// @param _owner The address of the account owning tokens
/// @param _spender The address of the account able to transfer the tokens
/// @return Amount of remaining tokens allowed to spent
function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}

event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);

}

contract StandardToken is Token {

function transfer(address _to, uint256 _value) returns (bool success) {
    //Default assumes totalSupply can't be over max (2^256 - 1).
    //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap.
    //Replace the if with this one instead.
    //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
    if (balances[msg.sender] >= _value && _value > 0) {
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
    } else { return false; }
}

function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
    //same as above. Replace this line with the following if you want to protect against wrapping uints.
    //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) {
    if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
        balances[_to] += _value;
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
    } else { return false; }
}

function balanceOf(address _owner) constant returns (uint256 balance) {
    return balances[_owner];
}

function approve(address _spender, uint256 _value) returns (bool success) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
}

function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
  return allowed[_owner][_spender];
}

mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) allowed;
uint256 public totalSupply;

}

//name this contract whatever you'd like contract ERC20Token is StandardToken {

function () {
    //if ether is sent to this address, send it back.
    throw;
}

/* Public variables of the token */

/*
NOTE:
The following variables are OPTIONAL vanities. One does not have to include them.
They allow one to customise the token contract & in no way influences the core functionality.
Some wallets/interfaces might not even bother to look at this information.
*/
string public name;                   //fancy name: eg Simon Bucks
uint8 public decimals;                //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether.
string public symbol;                 //An identifier: eg SBX
string public version = 'H1.0';       //human 0.1 standard. Just an arbitrary versioning scheme.

// // CHANGE THESE VALUES FOR YOUR TOKEN //

//make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token

function ERC20Token(
    ) {
    balances[msg.sender] = 5400000000000000000000000000; 
    totalSupply = 5400000000000000000000000000;
    name = “Decentralize Taiwan University";
    decimals = 18;
    symbol = “DTU"; 
}

/* Approves and then calls the receiving contract */
function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);

    //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this.
    //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData)
    //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead.
    if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; }
    return true;
}

}

DTU 第二階段合約 - 退幣

contract MultiTransfer { function multiTransfer(address[] _addresses, uint256[] _amount) payable { for (uint256 i = 0; i < _addresses.length; i++) { _addresses[i].call.value(_amount[i]).gas(21000)(); } } function() payable {} }

以上合約程式碼均為暫定,待補完。

沒有人是局外人

其實現在再說什麼挺管、拔管已經沒什麼意義,有人鐵了心幹,有人鐵了心拔。 管爺對還不是不對,罪還是不罪,都不是你我能論斷,國台辦不行,教育部也不行,更何況我們。

我只覺得,對於政府耗費100日來處理此事,使得一間大學已近一年無真正校長,缺席多個國際會議,也少了多個機會與國際接軌(別說什麼有代理校長就可以,代理畢竟是代理,豈可千秋萬世代理下去?那何必有正式校長與代理校長之分?),再再都是全民的損失。

此時正當亞太地區局勢劇變,台灣的角色無論在政治、在經濟、在教育,都需要勵精圖治,怎麼說我都不認同這次事件政府的處理方法(連下七道公文,要求台大說明「坊間傳言」,最後一道公文甚至提供了 49 項傳言!)到最後,昨日政府總算正式回應,拒發聘。

知道這消息,內心有三轉:

  1. 覺得生氣:氣自己,和自己在臉書上的好友們,每個人都生氣,但都是用文字覆議,用鍵盤忿忿不平,滿滿的「無奈」、「憤怒」出現在狀態文、留言文,吃飯的照吃飯,跳舞的照跳舞。一位朋友寫說「同樣的事,連師大附中都會憤怒,為何台大人不憤怒?」我氣,氣自己沒有能力再做更多、說更多;也氣和我一樣的朋友們,只能在線上,虛擬抗議。

  2. 覺得無奈:想著想著,同理心發作。想想自己也是在台大拿了個博士,為何現在沒種抗爭?答案很簡單,我是個吃政府飯的人。我在國立大學任教,從科研專案、到升職評等,全掌握在滿朝官員和支持這滿朝官員的前輩手裡,我如何說?如何講?更如何能做?我一介小小助理教授如此,別人不更是?多少台大人畢業後,在官府裡任職,多少人在得和政府打好關係的大企業裡工作,又有多少人的前途命脈被鎖在這江國朝堂?白色恐怖才過去沒多久,裙帶關係的壓力卻從沒有從這片土地上散去。我們何得何能?

  3. 覺得警醒:想到這裡,內心突然出現一句話「那些位高權重的,都沒說話了,又何來輪你擔憂呢?怎麼說,怎麼做,再再也輪不到你啊。有心無力,有心無力。」這時我突然懂了,懂了那些歷史上所有發生過的沒有人想發生的事,都是這樣姑息過來的,以前天子治國、封建制度,當然可以說一切都是宦官奸臣的錯,但如今,都說好了是民主政體了,台灣尚且是個沒有和諧的和諧之地了,竟然知識份子遇到事了,還沒能有任何作為與反應!?那姑息養奸,養的其實是自己罷!

所以我從此不挺管了,我挺台灣。

台灣怎麼挺呢?台灣的教育怎麼樣能更好呢?怎麼能確保這件事不會再發生呢?

有一句心裡話我從來沒有說,但今天我決定說出來。

沒有人是局外人

「管爺,和挺管諸公,別說沒有人挺你們;今天人們不站出來,年輕人不站出來,除了太陽花世代的挫敗之外,另一個原因就是你們。你們過去二十年,錯過了。錯過了好好培育世代青年的思辨精神、是非的認知、善惡的觀念、民主的素養,這一切,缺漏太多,沈苛太久,你們這一代,欠我們,我們當然還不了給你們。」

我只有無奈地站在凱達格蘭大道,看著數十位年過半百的台大高材生,奮力嘶吼,一小發財車底下,青年多少。

但便如此,今年三十七歲的我,也還是有責任。我們不應因為負了誰,就不做哪樣事。該做的還是得做,該救的還是得救。

這是知識分子的良心。

我們拿了社會的好處,就應該貢獻給社會!

歡迎各界於下方留言,分岔。謝謝!🙌

所有在台灣長大的人,都是台大人

不必挺管。但挺台灣

寶博士.2018.04.28

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment