加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > Ethereum > Info

以太坊智能合約ABI、事件和日志_TRA:以太坊

Author:

Time:1900/1/1 0:00:00

原標題:《以太坊智能合約ABI、事件和日志》

作者:北京大學胡悅陽,本文僅代表作者觀點

原文鏈接:https://mp.weixin.qq.com/s/QKz8r1MpntGuw_xM9gh9_w

智能合約是什么

智能合約是在區塊鏈上運行的應用或程序。通常情況下,它們為一組具有特定規則的數字化協議,且該協議能夠被強制執行。這些規則由計算機源代碼預先定義,網絡節點會復制和執行這些計算機源碼。

簡單的說,智能合約就是區塊鏈上一個包含合約代碼和存儲空間的虛擬賬戶。

智能合約的行為由合約代碼控制,而智能合約的賬戶存儲則保存了合約的狀態。

在以太坊平臺上,智能合約的代碼運行在以太坊虛擬機中,EVM是一個圖靈完備的虛擬機,是以太坊的核心。

在以太坊的點對點網絡中,每個全節點上都包含一個以太坊虛擬機,當節點需要打包或驗證區塊時,便將交易相關的可執行代碼送入EVM中執行,執行的結果更新了以太坊賬戶的狀態并被記錄在區塊鏈上。

智能合約的操作

創建智能合約的流程:

編寫智能合約的代碼編譯智能合約的代碼變成可以在EVM上執行的bytecode,同時可以通過編譯獲得智能合約的ABI部署到區塊鏈,通過一個交易將bytecode存儲在鏈上,并獲得合約地址調用智能合約的流程:

發起一筆指向智能合約地址的交易,智能合約代碼分布式地運行在網絡中每個節點的以太坊虛擬機中,然后會獲得交易的回執。回執保存交易的輸入參數、輸出、執行狀態等。

舉一個例子,首先在Remix平臺編寫一個智能合約Hello.sol

pragma?solidity?>=0.4.21;contract?Hello{????string?message;????event?SetMessage(string?_message);????function?set(string?memory?_message)?public?{????????message?=?_message;??????????emit?SetMessage(_message);????}????function?get()?public?view?returns(string?memory){????????return?message;????}}

編譯成字節碼,發起一筆交易部署到區塊鏈中,得到交易回執。

這樣就成功的將合約部署到區塊鏈網絡中了。

ABI是什么

上文提到調用智能合約,需要發起一筆指向合約地址的交易,以太坊節點會根據輸入的信息,選擇要執行合約中的哪一個函數和函數的參數。如何知道智能合約提供哪些函數以及參數要求呢,就需要用到ABI了。

合約ABI是在以太坊生態系統中與合約進行交互的標準方法,既可以從區塊鏈外部進行,也可以用于合約間的交互。

ABI類似程序中的接口文檔,描述了字段名稱、字段類型、方法名稱、參數名稱、參數類型、方法返回值類型等。

通俗的解釋:

ABI是合約接口的說明ABI定義與合約進行交互的數據編碼解碼規則以之前的Hello.sol為例,在編譯合約的時候可以生成合約的ABI

,????????"name":?"SetMessage",????????"type":?"event"????},????{????????"inputs":?,????????"name":?"get",????????"outputs":?,????????"stateMutability":?"view",????????"type":?"function"????},????{????????"inputs":?,????????"name":?"set",????????"outputs":?,????????"stateMutability":?"nonpayable",????????"type":?"function"????}]

10萬個BTC涌入以太坊網絡 DeFi高收益正在加速吸引BTC持有者:9月13日,隨著9月初加密市場的調整之后,DeFi協議將價值吸引回其流動性池中,目前已將近10萬個比特幣轉移至以太坊區塊鏈。根據Dune Analytics的數據,即使比特幣和以太坊的價格從9月1日開始下跌,轉移到以太坊區塊鏈上的BTC數量在本月到目前為止已經上漲了近45%,從9月1日大雨6.34萬個增加至9月13日的9.27萬個。Wrapped Bitcoin(WBTC)和其他跨鏈比特幣鎖定數量的增加將其鎖定總價值從月初的不到6億美元推升至超過9億美元。 現在總價值相當于整個ETH市值的2%以上。這種趨勢表明,盡管數字資產價格出現波動,但即使在BTC持有者中,對DeFi回報的需求仍然強勁。[2020/9/13]

ABI各參數的意義

??name:函數名稱

??type:方法類型,包括function、event等

??payable:布爾值,表明方法是否可以接受ether

??stateMutability:狀態類型,包括pure(不讀取區塊鏈狀態),view(和constant類型,只能查看,不會修改合約字段),nonpayable,payable。

??inputs:數組,描述參數的名稱和類型

–name:參數名稱

–type:參數類型

??outputs:和inputs一樣,如果沒有返回值,缺省是一個空數組

當用戶調用一個合約時,要對調用的函數名和傳入的函數參數進行編碼,這樣EVM才能執行,知道用戶調用的是哪個接口,以及正確讀取用戶的參數,下面介紹以太坊是如何生成可供EVM調用的字節碼的。

生成的字節碼主要分兩部分:函數選擇器和參數編碼。

函數選擇器?FunctionSelector

函數調用的調用數據的前四個字節指定要調用的函數。它是通過將函數簽名進行Keccak-256哈希運算后,取前四個字節得到的。

以Hello.sol為例,set函數的接口定義為:

functionset(stringmemory_message)public;

在python3環境下安裝ethereum庫

>?from?ethereum.utils?import?sha3>?sha3("set(string)").hex()'4ed3885e778f096a5fd9407b264b5478208ea71532d13d454b0307e5f1542101'>?sha3("set(string)").hex()'4ed3885e'

取前四個字節即:4ed3885e

參數編碼ArgumentEncoding

從第五個字節開始,后面是編碼參數。參數的編碼根據類型的不同,編碼方式也有所區別。主要分為固定類型和動態類型。

1、固定類型

?uint:M位的無符號整數類型,0<M<=256,M%8==0,如uint32,uint8,uint256.。

?int:M位的兩個補碼有符號整數類型.0<M<=256,M%8==0.

?uint和int:整型,分別是uint256和int256的別名。注意:函數參數類型是uint,轉sha3碼時要變成uint256。

?address:地址,20個字節,160bits,等同于uint160。

?bool:布爾類型,1個字節,true:1,false:0

3iq公司的以太坊基金正申請在加拿大證券交易所上市:加拿大投資基金管理公司3iQ Corp稱,已為其以太坊基金申請在加拿大首次公開募股(IPO),目前已獲得加拿大監管機構初步批準。

據悉,該基金是由3iQ管理的封閉式投資基金,擬通過發行A類份額(10.75美元)和F類份額(10.53美元)籌集最低1075萬美元,最高1.075億美元的資金。與該公司早些時候推出的比特幣基金(BitcoinFund)一樣,以太坊基金也計劃在多倫多證券交易所(TSX)上市交易。(Bitcoin.com)[2020/7/27]

?bytes:固定大小的字節數組,0<M<=32,byte都是bytes1的別名。

2、動態類型

?bytes:動態分配大小的字節數組

?string:動態大小UTF8編碼的字符串

?:給定類型的元素的可變長度數組。

?:給定類型的元素的定長數組。

編碼規則

固定類型的編碼就很簡單,直接將參數值轉成32字節長度的16進制即可。需要注意的是:數字類型,不足32bytes時,如果是正數高位補0,如果是負數高位補1。布爾類型高位補0。字節類型、字符串類型在低位補全。?動態類型的編碼稍微復雜點,如果是固定長度就不需要計算偏移量,如果是不定長度就需要先計算偏移量,并在最后加上長度和具體值的編碼。下面舉例說明。

Example

給出如下合約,參考官方文檔:

https://solidity.readthedocs.io/en/develop/abi-spec.html#function-selector-and-argument-encoding

pragma?solidity?>=0.4.16?<0.8.0;contract?Foo?{????function?bar(bytes3?memory)?public?pure?{}????function?baz(uint32?x,?bool?y)?public?pure?returns?(bool?r)?{?r?=?x?>?32?||?y;?}????function?sam(bytes?memory,?bool,?uint?memory)?public?pure?{}}

案例1

函數:baz(uint32,bool)?

調用:baz(69,true)

?0xcdcd77c0:函數選擇器,在python中通過sha3("set(string)").hex()得到0xcdcd77c0

?0x0000000000000000000000000000000000000000000000000000000000000045,十進制69,轉成16進制為45,因為是正數,高位補0至32bytes

?0x0000000000000000000000000000000000000000000000000000000000000001,bool類型,true=1,false=0,高位補0

最終的字節碼為

0xcdcd77c000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001

會返回bool類型.在這個調用中,返回值是false,它的輸出將是單字節數組

0x0000000000000000000000000000000000000000000000000000000000000000

Hyperledger Besu發布1.4版本 提升與其他以太坊客戶端兼容性:由 Linux基金會主導的Hyperledger Besu項目發布1.4版本,Hyperledger Besu是一個開源且兼容以太坊主網的客戶端,基于Java開發。在本次的 1.4 版本中,Hyperledger Besu、EthSigner和Orion項目均得到了更新,Besu新增了插件 API、提升兼容性、端到端加密等;EthSigner新增高級密鑰管理;Orion在3月可以為私有群組添加或移除成員。[2020/2/29]

案例2

函數:bar(bytes3memory)?

調用:bar()

?0xfce353f6:函數選擇器,在python中通過sha3("bar(bytes3)").hex()得到0xfce353f6

?固定長度不需要計算偏移量

?0x6162630000000000000000000000000000000000000000000000000000000000,字符串abc轉成16進制后為616263,低位補0

?0x6465660000000000000000000000000000000000000000000000000000000000,字符串def轉成16進制后為646566,低位補0

字符串轉16進制的python參考代碼

import?binasciis?=?'abc'str_16?=?binascii.b2a_hex(s.encode('utf-8'))??#?字符串轉16進制print(str_16)

案例3

函數:sam(bytes,bool,uint)

調用:sam("dave",true,")

?a5643bf2:函數選擇器,在python中通過sha3("sam(bytes,bool,uint256)").hex()得到a5643bf2.請注意,將uint替換為其規范表示形式uint256。

?0x0000000000000000000000000000000000000000000000000000000000000060:動態類型,計算偏移量。這個的偏移量是指實際存儲值的位置,由于這個函數有3個變量,那么實際存儲值的位置就是第四個32bytes位置,也就是說偏移量等于3*32bytes=96,轉成16進制后就是對應的值

?0x0000000000000000000000000000000000000000000000000000000000000001:第二個參數,布爾值true

?0x00000000000000000000000000000000000000000000000000000000000000a0:動態類型,計算偏移量,這個偏移量就等于參數長度3*32bytes+前面的動態參數參數占有的長度,那么具體的值就是3*32bytes+(1*32bytes+1*32bytes)=5*32bytes=160,轉成16進制就是a0,高位補全就是對應的值

?0x0000000000000000000000000000000000000000000000000000000000000004:第一個參數的數據部分,代表元素中字節數組的長度,在這種情況下為4。

?0x6461766500000000000000000000000000000000000000000000000000000000:“dave”的utf-8編碼,填充為32字節。

?0x0000000000000000000000000000000000000000000000000000000000000003:第三個參數的數據部分,代表數組中元素的個數,在這種情況下為3.

動態 | USDT轉賬似乎印證最新增發是為了將Tether從OMNI遷移至以太坊:北京鏈安鏈上數據監控發現,在北京時間7月4日 18:07 泰達公司在以太網上向 tether treasure 地址增發 1 億枚 USDT之后24小時,已經出現部分資金轉入交易所,其中:3,098,900枚USDT轉入火幣交易所,且本輪轉賬大都經過了兩個中繼地址的跳轉。1,948,050枚USDT轉入幣安交易所,且有990萬枚USDT轉入通常會在接下來轉入幣安交易所的中繼地址,但是尚未有進一步操作。1,990,000枚USDT流入中繼地址后部分轉入Bitfinex交易所。而在下午17:59,有1500萬枚USDT轉入Bitfinex交易所,與此同時,我們也監測到Bitfinex交易所向比特幣網絡的tether treasure地址轉帳1500萬枚 omni-usdt,疑似是將Bitfinex交易所的omni-usdt置換為erc20-usdt,這似乎部分論證了此前Bitfinex CTO對最新增發是基于將Tether從OMNI遷移至以太坊的解釋。[2019/7/5]

?0x0000000000000000000000000000000000000000000000000000000000000001:第三個參數的第一項。

?0x0000000000000000000000000000000000000000000000000000000000000002:第三個參數的第二項。

?0x0000000000000000000000000000000000000000000000000000000000000003:第三個參數的第三項。

最終的字節碼為

0xa5643bf20000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000464617665000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003

綜上所述,ABI是合約接口的說明,并定義了與合約進行交互的數據編碼解碼規則。

事件和日志

區塊鏈是一個塊列表,從根本上講就是交易列表。每一個交易都有一個收據,其中包含0個或多個日志記錄。日志記錄表示從智能合約觸發的事件的結果。在以太坊中,事件是一個基本功能,可以將數據記錄成日志,保存在區塊鏈上。事件也可以與外部交互,比如與前端進行交互。事件強調功能,是指觸發操作的行為,日志強調存儲,是指觸發事件后,將數據保存在區塊鏈上,形成日志。

事件如何定義和觸發

在solidity中,使用關鍵字event來定義事件,使用關鍵字emit來觸發事件,其參數列表就是需要保存在區塊鏈上的數據,最多可有三個具有indexed屬性的參數,表示其可以被索引,便于查找。

動態 | 推特調查:44%的網友支持以太坊切換到ProgPoW:Bitfly在推特發起調查,征求網友關于以太坊替換PoW機制的看法。根據目前的結果,44%的網友支持切換到ProgPoW,36%的網友支持切換到其他抗ASIC算法,3%的網友支持切換到其他ASIC友好型算法,而17%的網友認為應該保留Ethash。[2019/1/14]

contract?MyContract{????event?Transfer(address?indexed?from,?address?indexed?to,?uint256?value);????function?transfer(address?_to,?uint256?_value)?public?returns?(bool)?{????emit?Transfer(msg.sender,?_to,?_value);????return?true;??}}

事件的作用

事件可以在不同的場景下使用,主要有如下三種作用。

獲取合約執行結果過濾日志存儲合約數據1、獲取合約執行結果

在開發Dapp時,我們會通過發送一筆交易來調用智能合約的某個函數,但是我們不能立即得到返回值。因為交易不是立刻打包進區塊鏈的,在這種場景下,可以使用事件來解決這個問題。

以和前端交互為例,我們可以通過編寫代碼來監聽某一特定事件來做到更新前端。例如通過如下代碼來監聽上文提到的合約中的Transfer事件。

var?event?=?myContract.Transfer();event.watch(function(error,?result){????if?(err)?{????console.log(err)????return;??}??console.log(result.args._value。);

當調用transfer函數的交易被打包進區塊鏈中時,將會觸發回調中的watch函數,前端可以得到有效的transfer函數的返回值。

事件通常可以被看作帶有數據的異步觸發器。當一個合約想要觸發前端時,合約會發出一個事件。因為前端正在監聽這個事件,一旦監聽到相關事件,前端可以采取相應的操作,比如顯示消息,更新前端展示內容等。

2、過濾日志

日志不能被合約訪問,Solidity沒有提供查詢日志的接口,在監聽日志的時候,Solidity提供了filter功能,借此我們可以實現對日志的查找過濾。在Transfer事件中,from和to參數被設置成indexed,說明其是可以被索引的。所以我們可以監聽特定的事件,例如轉賬地址為0xab213的事件,也可以監聽從0xab213地址轉賬到0x417ac的事件,但由于value參數沒有indexed屬性,所以我們不能監聽例如value為100的事件。

在此場景下,我們如果想過濾指定地址發出的交易,我們可以通過web3.js編寫如下代碼。

Mycontract.deployed().then(function?(instance)?{var?event?=?instance.Transfer({}function?(error,?result)?{????var?obj1?=?{????????'_to':?'0xab213',????}????var?obj2?=?{????????'fromBlock':?0,????????'toBlock':?'latest'????}????var?event?=?instance.Transfer(obj1,?obj2)????event.watch(function?(error,?result)?{????????console.log(JSON.stringify(result))????}。).then(function?(value)?{????console.log(value。).catch(function?(e)?{????console.log(e。)

參數說明:

?obj1:添加indexed屬性的參數,在這里我們可以過濾特定地址0xab213發起的交易

?obj2:Solidity提供的額外的過濾參數,可選的主要參數有:

–fromBlock:指定過濾的起始位置,值為塊的編號,默認為latest

–toBlock:指定過濾的結束位置,值為塊的編號,默認為latest

·callfunction:回調函數function(error,result

3、存儲合約數據

與上面講述的不同,事件可以作為便宜的多的一種存儲形式。通過觸發事件,存儲在日志上的數據,基本上每字節花費8gas,但是智能合約每存儲32字節花費20000gas。盡管日志可以節省大量gas,但是無法從任何智能合約中讀取日志信息。需要根據使用場景來選擇適合的存儲辦法,日志作為一種廉價存儲的方式,適合存儲可由前端展示的歷史數據。

日志記錄的組成

EVM具有5個用于發出日志的操作碼:LOG0,LOG1,LOG2,LOG3和LOG4。通過這些操作碼來創建日志記錄。

每個日志記錄都包含topics和data。Topics是bytes32類型的參數,不同的操作碼描述包含在日志記錄中的Topics數量。LOG1包含1個topic,LOG2包含2個topics,最多支持4個topics。

Topics用于描述事件,日志中存儲的不同的具有indexed屬性的事件就叫不同的主題。比如對于事件Transfer來說,其定義為eventTransfer(addressindexedfrom,addressindexedto,uint256value);,有三個主題。第一個主題為事件簽名的哈希值,即通過keccak256("Transfer(address,address,uint256)")來得到,如果該事件是匿名事件,那么就沒有這個主題。后面兩個具有indexed屬性的參數,可以用來進行過濾進行精確查找。

由于只能容納32個字節的數據,所以無法將數據或字符串之類的參數用作Topic,應該將其作為data包含在日志記錄中。如果想要包含超過32字節的topic,應該將其哈希。Topic可視作事件的索引,其使用場景在于可以有效縮小搜索查詢范圍內的數據。

日志記錄的另一個部分是數據。Topic是可以搜索的,但是數據卻不可以,數據可以擺脫Topic的32字節大小的限制,包含例如數組或字符串的復雜數據。

下面舉一個例子來說明。還是以上文中的Transfer事件為例,由于Transfer不是一個匿名事件,所以第一個Topic包含事件簽名。

contract?MyContract{????event?Transfer(address?indexed?from,?address?indexed?to,?uint256?value);????function?transfer(address?_to,?uint256?_value)?public?returns?(bool)?{????emit?Transfer(msg.sender,?_to,?_value);????return?true;??}}

在事件的參數部分,Transfer事件有三個參數from、to、value,其中from和to被聲明為indexed,標識其被視為topic,value參數不會被索引,將會作為日志的數據部分。此事件包含3個topics,將使用LOG3操作碼來創建日志記錄。

舉個例子,將上述示例合約部署到區塊鏈網絡中,我們使用:0x246B0ED379bdDbe1aDaC56277Ce5cB3018c24E04地址調用transfer函數,to參數指定為0x3F0b9B0D373C26328A879430383e87F4780AD410,value指定為1,發起一筆交易獲得交易的回執信息。其中在logs屬性中,記錄如下信息

,????"type":"mined",????"id":"log_cf046b97"??}]

其中,topics數組中有三個元素,第一個為keccak256("Transfer(address,address,uint256)")的結果,第二個為from參數的值,這里為0x246B0ED379bdDbe1aDaC56277Ce5cB3018c24E04,第三個為to參數的值,這里為0x3F0b9B0D373C26328A879430383e87F4780AD410。data字段是通過對value進行編碼得到的,這里將1轉成32字節長度的16進制的值,得到0x0000000000000000000000000000000000000000000000000000000000000001。

布隆過濾器LogBloomandFilter

布隆過濾器在以太坊中用于檢索交易日志log,方便交易結果的查詢以及交易事件通知。在以太坊的區塊頭中,有一個區域叫做logsBloom。這個區域存儲了當前區塊中所有收據的日志的布隆過濾器,有2048個bit,相當于256個字節。在一個交易的收據中,可能存在0個或多個日志記錄,每個日志記錄中包含了相應的Topics和data。在一個交易的收據中同樣也存在布隆過濾器,記錄了所有的日志記錄數據。

下面介紹布隆過濾器的原理。我們知道,查找一個元素是否存在于一個集合中,可以使用數組這種數據結構。但是當數據量非常龐大的情況下,數組的空間開銷和查詢開銷也會變得非常大。

布隆過濾器的原理是當一個元素被加入到一個集合中時,使用K個哈希函數,對該元素求哈希值,得到K個不同的哈希值,分別記作X1,X2,X3,…,XK。將這K個數字作為位圖的下標,將對應的

BitMap,BitMap,BitMap,…,BitMap都設置為1。即用K個bit來表示一個元素是否存在。

當想要查詢某個元素是否存在于這個集合中時,用相同的K個哈希函數,得到Y,Y,Y...Y,如果這K個哈希值對應的位圖下標均為1,則表示這個元素可能存在,如果有任意一個下標不為1,則說明這個元素肯定不存在。

舉例說明,假設集合中現在有3個元素{X,Y,Z},使用3個哈希函數。首先將數組進行初始化,每一位置為0。然后對于集合中的每一個元素,都通過3個哈希函數進行哈希計算,每次計算都會產生一個下標,將數組中該下標對應的值設置為1。這時候想要查詢一個元素W是否在該集合中,依次用這3個哈希函數將W映射到數組的3個位點上,如果3個位點對應的值都為1,則可能存在于集合中,若有一個位點的值不為1,則該元素一定不在這個集合中。

布隆過濾器存在一定的誤判性,因為存在一定的哈希碰撞可能,所以當位點上的值都為1時,只能反映該元素可能存在于該集合中。但這不影響其廣泛的應用性,布隆過濾器是一種存儲效率很高的數據結構,其空間利用率和時間利用率非常高,插入數據和查詢數據的時間復雜度為O。

布隆過濾器可以用于事件查詢,在以太坊中,系統會先創建各個主題的布隆過濾器,然后通過合并獲得事件的布隆過濾器,再次合并得到交易的布隆過濾器,最后合并得到區塊的布隆過濾器。在查詢過程中,查詢滿足指定特征的事件的過程是,先根據查詢條件得到布隆過濾器,如果其位向量是區塊布隆過濾器的子向量,則可能存在此區塊中,如果不是其子向量,那么就不存在此區塊中。如果可能存在,繼續比對區塊中各個交易的布隆過濾器,比對交易中每個事件的布隆過濾器。如果與事件的布隆過濾器匹配,再進行嚴格的數據驗證,相同的話即說明存在。

參考資料

https://academy.binance.com/zh/articles/what-are-smart-contracts

https://segmentfault.com/a/1190000016634359

https://cloud.tencent.com/developer/article/1328286

https://fisco-bcos-documentation.readthedocs.io/zhCN/latest/docs/articles/3features/35contract/abiof_contract.html

http://www.jouypub.com/2018/437e42a5629ea0ccd567909c94abb4a4/

https://media.consensys.net/technical-introduction-to-events-and-logs-in-ethereum-a074d65dd61e

Tags:TRAINT以太坊IONsmartcontractschemecoincointiger交易平臺下載以太坊價格走勢圖BSC Station

Ethereum
1分鐘售罄的《時代》雜志NFT銷售將Gas價格推高至近萬gwei,“先到先得”NFT鑄造模式再受爭議_NFT:TIM

9月23日,美國《時代雜志》宣布了他們的NFT系列銷售計劃,名為TIMEPiece。該系列收藏了來自40位藝術家的4,676件作品.

1900/1/1 0:00:00
分析 | 區塊鏈為什么可以上升到國家戰略高度?它的社會價值究竟是什么?_區塊鏈:穩定幣和加密貨幣

作者:北京大學王思遠,本文僅代表作者觀點原標題:《區塊鏈的重要價值》原文鏈接:https://mp.weixin.qq.com/s/TG9ZJxXYYgwMtnW8ke4j-A從2019年的“1.

1900/1/1 0:00:00
深度 | 制約比特幣閃電網絡發展的五個局限_比特幣:9月7號比特幣大跌

本文來自bitcoinmagazine,原文作者:Shinobi,由Odaily星球日報譯者Katie辜編譯.

1900/1/1 0:00:00
美國電力公司Talen Energy籌集1.75億美元,用于建設數據中心和加密礦場_TAL:ULU

巴比特訊,9月22日,TalenEnergyCorporation("Talen")及其全資子公司CumulusGrowthHoldingsLLC("CumulusGrowth")宣布.

1900/1/1 0:00:00
A16z合伙人:為什么“邊玩邊賺”模式可行,鏈游與傳統游戲如何相互借鑒?_NFT:WEB

來源:Twitter 作者:A16z合伙人JonLai當游戲中的真錢交易不頂用時,為什么邊玩邊賺模式卻可行?AxieInfinity、暗黑破壞神3、星戰前夜、反恐精英這些游戲如何能夠相互借鑒?本.

1900/1/1 0:00:00
加密投資者財富管理平臺Abra完成5500萬美元C輪融資。IGNIA和Blockchain Capital領投_VEN:Retrogression

據sharecast9月15日報道,加密投資者財富管理平臺Abra今天宣布已完成5500萬美元C輪融資,該輪融資由IGNIA和BlockchainCapital領投.

1900/1/1 0:00:00
ads