3-1直行-轉(zhuǎn)賬交易

嗯喻鳄,說好的智能合約呢扼倘?怎么開始轉(zhuǎn)賬了?

因?yàn)槌牵琔TXO轉(zhuǎn)賬是所有合約的基礎(chǔ)再菊,你一定聽說過交易手續(xù)費(fèi)這個概念,那么交易手續(xù)費(fèi)怎么支付呢颜曾?

這就是個問題了對吧纠拔。

UTXO這個事情本身就是和轉(zhuǎn)賬是一體化的,之前我們在基礎(chǔ)知識哪里講過UTXO泛豪,但是那里是講不清楚的稠诲,因?yàn)椴唤Y(jié)合轉(zhuǎn)賬來說UTXO那是不可能說的清楚的。

UTXO的名字 unspent transaction output候址,未花費(fèi)交易輸出

我們之前提到過找零的問題吕粹,賬戶A給B轉(zhuǎn)賬,需要輸入賬戶A的n個UTXO岗仑,然后一個輸出給B多少錢匹耕,剩余的錢一個輸出給A自己。

如果交易的輸出總額和輸入總額不匹配的時候荠雕,如果輸出總額>輸入總額稳其,交易會失敗。

如果輸出總額<輸入總額會怎樣炸卑?你的錢捐給系統(tǒng)了既鞠,就是這樣。

要支付交易手續(xù)費(fèi)盖文,就把他捐給系統(tǒng)吧嘱蛋。

然后我們來發(fā)一筆轉(zhuǎn)賬吧,首先講一講怎么發(fā)?我們要寫一個自己的輕錢包來發(fā)洒敏,怎么寫龄恋,用這個

https://github.com/NewEconoLab/neo-thinsdk-cs

這個項(xiàng)目提供了neo所需的那些加密運(yùn)算,你需要生成轉(zhuǎn)賬的交易凶伙、簽名郭毕、然后把他發(fā)布到鏈上。

1.生成轉(zhuǎn)賬交易

? ? 最終轉(zhuǎn)賬交易是個二進(jìn)制的數(shù)據(jù)塊函荣,怎么生成這個二進(jìn)制的塊显押,我們通常會寫一個數(shù)據(jù)結(jié)構(gòu),然后提供序列化方法傻挂,把數(shù)據(jù)結(jié)構(gòu)的內(nèi)容變成數(shù)據(jù)塊乘碑。

? ? 這個結(jié)構(gòu)叫做Transaction,thinsdk 當(dāng)然提供了transaction結(jié)構(gòu)和序列化方法踊谋,你也可以閱讀neo官方文檔蝉仇,其中有對二進(jìn)制數(shù)據(jù)構(gòu)成的描述。你也可以閱讀neo源代碼殖蚕,此處,只要會用就好沉迹。

class Transactoion

{

? ?type//交易類型

? ? vertion//交易版本 目前只有 0 1

? ? [type extdata]//每種交易類型獨(dú)有的數(shù)據(jù)睦疫,比如調(diào)用應(yīng)用合約交易,就得有調(diào)用腳本

? ??attributes//交易屬性(0到多個)鞭呕,可以附加一些東西蛤育,比如注釋啦,除輸入以外的附加鑒證人啦

????inputs//交易的輸入(0到多個)(utxo銷毀)

????outputs//交易的輸出(0到多個)(utxo產(chǎn)生)

? ? ?witnesses;//鑒證人(0到多個)

}

要填充一筆轉(zhuǎn)賬交易葫松,輸入是一個問題瓦糕,你要怎么知道一個賬戶到底有哪些utxo呢?thinsdk不管腋么,api管咕娄,看問后例子就好。

2.簽名交易

? ? 嗯珊擂,這里產(chǎn)生了一個概念圣勒,NEO把交易分為未簽名交易與已簽名交易。

不含鑒證人部分的交易稱為未簽名交易摧扇,那自然含有鑒證人部分的交易稱為簽名交易咯圣贸。

簽好名的交易序列化為二進(jìn)制塊,廣播扛稽,這個行為就叫做發(fā)交易

而簽名交易其實(shí)是一個非常不準(zhǔn)確的說法吁峻,只是簽名這個說法大部分人更容易理解

簽名過程是給交易填上鑒證人數(shù)據(jù),script attribute 和 inputs 會導(dǎo)致需要鑒證人,大部分人理解的就是:因?yàn)閕nputs來自我的賬戶用含,所以需要我的簽名矮慕。因?yàn)橐梦业腻X,所以需要我簽名耕餐。

簽名凡傅,就是將該交易的未簽名部分序列化為二進(jìn)制塊,然后調(diào)用ecc算法簽個名肠缔,把這個數(shù)據(jù)加點(diǎn)東西加入簽名的witnesses中夏跷。

實(shí)際上算簽名只是鑒證的一個特例。

交易簽名只是用了特例的名字命名了整個行為明未,交易簽名并不是一定在簽名槽华,只有需要的鑒證人要求簽名時才簽名。

這就講到智能合約的鑒證觸發(fā)器那里了趟妥,這個話題有空再講猫态,讓我們接著聊轉(zhuǎn)賬

3.發(fā)布交易

簽好名的交易序列化為二進(jìn)制塊,廣播披摄,這個行為就叫做發(fā)交易亲雪。

怎么廣播?thinsdk不管疚膊,api管义辕,看例子就好。

這里是例子

在smartcontractDemo中寓盗,有叫做轉(zhuǎn)賬的例子灌砖,這是一個netcore 命令行程序。

1.拼合約

例子中用了下面這個接口來獲取一個賬戶的所有utxo

Helper.HttpGet(api + "?method=getutxo&id=1?ms=['" + _addr + "']")

記得嗎傀蚌,rpc接口不能直接給你這個基显,你就沒法拼轉(zhuǎn)賬交易,所以要爬蟲要api善炫。

此處的api由NEL提供撩幽,不要問我api是多少,他可能會變销部,但是smartcontractDemo這個代碼里會保證api肯定是測試過的摸航。

看代碼

然后你可以看看我們是怎么拼裝一個轉(zhuǎn)賬交易的,有maketran方法舅桩,就是填充inputs outputs那些酱虎,不再贅述。

2.簽合約

byte[] msg = tran.GetMessage();//tran是交易擂涛,getmessage是得到未簽名交易的二進(jìn)制數(shù)據(jù)塊

byte[] signdata = ThinNeo.Helper.Sign(msg, prikey);//簽名算法读串,私鑰什么的都是寫死的聊记,sdk也支持從neo json格式打開私鑰,這個不介紹了恢暖。

tran.AddWitness(signdata, pubkey, address);//添加普通賬戶鑒證人排监,私鑰公鑰地址,全都是一個人

string txid = tran.GetHash().ToString();

byte[] data = tran.GetRawData();//得到簽名交易的二進(jìn)制數(shù)據(jù)塊

直接如代碼

3.發(fā)交易

string rawdata = ThinNeo.Helper.Bytes2HexString(data);

byte[] postdata;

var url = Helper.MakeRpcUrlPost(api, "sendrawtransaction", out postdata, new MyJson.JsonNode_ValueString(rawdata));

var result = await Helper.HttpPost(url, postdata);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杰捂,一起剝皮案震驚了整個濱河市舆床,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫁佳,老刑警劉巖挨队,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒿往,居然都是意外死亡盛垦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門瓤漏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腾夯,“玉大人,你說我怎么就攤上這事蔬充〉悖” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵饥漫,是天一觀的道長跷乐。 經(jīng)常有香客問我,道長趾浅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任馒稍,我火速辦了婚禮皿哨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纽谒。我一直安慰自己证膨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布鼓黔。 她就那樣靜靜地躺著央勒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澳化。 梳的紋絲不亂的頭發(fā)上崔步,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音缎谷,去河邊找鬼井濒。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瑞你。 我是一名探鬼主播酪惭,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼者甲!你這毒婦竟也來了春感?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虏缸,失蹤者是張志新(化名)和其女友劉穎鲫懒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寇钉,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刀疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扫倡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谦秧。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撵溃,靈堂內(nèi)的尸體忽然破棺而出疚鲤,到底是詐尸還是另有隱情,我是刑警寧澤缘挑,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布集歇,位于F島的核電站,受9級特大地震影響语淘,放射性物質(zhì)發(fā)生泄漏诲宇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一惶翻、第九天 我趴在偏房一處隱蔽的房頂上張望姑蓝。 院中可真熱鬧,春花似錦吕粗、人聲如沸纺荧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宙暇。三九已至,卻和暖如春议泵,著一層夾襖步出監(jiān)牢的瞬間占贫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工肢簿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靶剑,地道東北人蜻拨。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像桩引,于是被迫代替她去往敵國和親缎讼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容