如果大學自治被中心化思想給箝制,而法人自治又遙遙無期。在這個去中心化思維的年代,我們是不是總算可以反過來靜下心,思考一所去中心化的大學該如何建立?
**基於以太坊網路發行 DTU 通證,並在 5/4 開始公開發行,並進行 DAICO
1ETH 兌換 10000 DTU
- 總共發行 54億顆 (台灣兩千七百萬人口,五四運動)DTU
- 軟上限 5萬4千顆 ETH
- 硬上線 50萬4千顆 ETH
- 發行期間:戊戌年五月四日至六月五日
- 發行期間錢包由第三方律師管理
- 智能合約由計畫團隊建立,由第三方律師公證
- 發行結束後,剩餘貨幣將銷燬,所籌集之 ETH 將全數轉移至第二階段智能合約
若第一階段未達軟上限,則全額退回原地址,以太鏈上轉帳手續費由計畫團隊承擔
第二階段智能合約由半去中心化自組織共同管理 半去中心化自組織(Semi-DAO)之錢包合約,將設校長、主任秘書、學術副校長、行政副校長,人數等同現有國立台灣大學,並另設財務、會計、法務等稽查員。 每一單位各有一合約管理地址,現階段之校長為團隊推舉,其他人員為校長舉薦會議多數決
若第二階段於三個月內未完成籌設,重要管理員之地址無法由團隊設定入合約,則所有 ETH 將於第一階段合約自行退回贊助者,本計劃中止。
將設立第三階段完全去中心化大學自組織智能合約 將 DAO 之營運、撥款權限及人事任用權限交由持有 DTU 代幣者共同決議
- 捐贈臺大興建大樓,命名:戊戌樓、自治館(待定)
- 若臺大不接受,則創辦大學自治獎金(學生、老師)每年選出推廣自治思維、思辨精神的教師、學生,獎金 54 萬元
- 非自願離職教師法律償助
- 與國際組織 X Prize 與美國奇點大學合作,創辦 DTU X Prize,全球任何一團隊成功將一般大學轉型為去中心化大學,並得自行營利運作者,獲得一千萬美元獎金
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;
}
}
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 項傳言!)到最後,昨日政府總算正式回應,拒發聘。
知道這消息,內心有三轉:
-
覺得生氣:氣自己,和自己在臉書上的好友們,每個人都生氣,但都是用文字覆議,用鍵盤忿忿不平,滿滿的「無奈」、「憤怒」出現在狀態文、留言文,吃飯的照吃飯,跳舞的照跳舞。一位朋友寫說「同樣的事,連師大附中都會憤怒,為何台大人不憤怒?」我氣,氣自己沒有能力再做更多、說更多;也氣和我一樣的朋友們,只能在線上,虛擬抗議。
-
覺得無奈:想著想著,同理心發作。想想自己也是在台大拿了個博士,為何現在沒種抗爭?答案很簡單,我是個吃政府飯的人。我在國立大學任教,從科研專案、到升職評等,全掌握在滿朝官員和支持這滿朝官員的前輩手裡,我如何說?如何講?更如何能做?我一介小小助理教授如此,別人不更是?多少台大人畢業後,在官府裡任職,多少人在得和政府打好關係的大企業裡工作,又有多少人的前途命脈被鎖在這江國朝堂?白色恐怖才過去沒多久,裙帶關係的壓力卻從沒有從這片土地上散去。我們何得何能?
-
覺得警醒:想到這裡,內心突然出現一句話「那些位高權重的,都沒說話了,又何來輪你擔憂呢?怎麼說,怎麼做,再再也輪不到你啊。有心無力,有心無力。」這時我突然懂了,懂了那些歷史上所有發生過的沒有人想發生的事,都是這樣姑息過來的,以前天子治國、封建制度,當然可以說一切都是宦官奸臣的錯,但如今,都說好了是民主政體了,台灣尚且是個沒有和諧的和諧之地了,竟然知識份子遇到事了,還沒能有任何作為與反應!?那姑息養奸,養的其實是自己罷!
台灣怎麼挺呢?台灣的教育怎麼樣能更好呢?怎麼能確保這件事不會再發生呢?
有一句心裡話我從來沒有說,但今天我決定說出來。
「管爺,和挺管諸公,別說沒有人挺你們;今天人們不站出來,年輕人不站出來,除了太陽花世代的挫敗之外,另一個原因就是你們。你們過去二十年,錯過了。錯過了好好培育世代青年的思辨精神、是非的認知、善惡的觀念、民主的素養,這一切,缺漏太多,沈苛太久,你們這一代,欠我們,我們當然還不了給你們。」
我只有無奈地站在凱達格蘭大道,看著數十位年過半百的台大高材生,奮力嘶吼,一小發財車底下,青年多少。
但便如此,今年三十七歲的我,也還是有責任。我們不應因為負了誰,就不做哪樣事。該做的還是得做,該救的還是得救。
這是知識分子的良心。
我們拿了社會的好處,就應該貢獻給社會!
歡迎各界於下方留言,分岔。謝謝!🙌
所有在台灣長大的人,都是台大人
不必挺管。但挺台灣
寶博士.2018.04.28