賬戶
凱亞賬戶
賬戶、州和地址概覽
Kaia 中的賬戶是一種數據結構,包含個人餘額或智能合約的相關信息。 Kaia 的狀態是其所有賬戶狀態的集合,即存儲在 Kaia 賬戶中的所有數據的過去和當前狀態。 在 Kaia 節點上執行事務時,Kaia 的狀態會隨之在所有節點上發生變化。 如果 Kaia 網絡中的所有節點都以相同的順序處理了相同的區塊,那麼它們的狀態應該是相同的。 每個賬戶的狀態信息都與一個 20 字節的地址相關聯,該地址用於識別每個賬戶。
解耦密鑰對與地址
在典型的區塊鏈平臺中,一個賬戶與一個經過加密處理的地址相關聯,該地址具有一定長度,通常看起來像這樣:"0x0fe2e20716753082222b52e753854f40afddffd2". 該地址與一對密鑰緊密相連。 如果選擇了一對密鑰,地址就會從公開密鑰中導出。 這在用戶體驗方面有很多弊端。 其中包括
- 用戶不可能擁有自己想要的地址。
- 用戶不可能使用多個配對密鑰來提高賬戶的安全性。
- 當私鑰意外暴露或用戶希望定期更新私鑰以提高賬戶安全性時,用戶不可能更改賬戶的配對密鑰。
這些都是很大的障礙,用戶無法將地址視為區塊鏈平臺中的標識符。 為了消除這一障礙,Kaia 提供了一項功能,用戶可以選擇自己的地址和密鑰對。 有了這項功能,用戶可以選擇自己想要的地址,還可以使用多個密鑰對來提高安全性。 密鑰對的數量可以是一個或多個,密鑰對也可以有不同的作用。 有關多密鑰對或基於角色的密鑰的詳細信息,請參閱 多密鑰對和基於角色的密鑰。
值得注意的是,Kaia 還支持密鑰對和地址強耦合的舊方案。
多密鑰對和基於角色的密鑰
如前所述,當私人密鑰被盜、暴露或以某種方式洩露時,無法恢復賬戶的安全性:最好的辦法是生成另一個密鑰對,創建一個新賬戶,並將餘額從原來洩露的賬戶轉移到新賬戶。 缺乏對多重簽名或特定用途密鑰等高級密鑰方案的支持,也是造成嚴重不便的另一個原因。 為了更有效地解決這些問題,Kaia 賬戶提供了以下功能:
- Kaia 賬戶允許更改與賬戶相關的配對密鑰。
- Kaia 賬戶支持多個密鑰對,並能為每個密鑰分配不同的用途。
- Kaia 賬戶與擁有與地址緊密相連的單一密鑰的賬戶保持兼容。
通過利用 Kaia 帳戶基於角色的多密鑰支持,終端用戶可以更好地處理現實生活中的安全風險情況,如私鑰管理不善。 例如,當用戶意識到自己的私人密鑰被洩露時,只需從自己的賬戶中刪除被洩露的密鑰對,並創建一個新的密鑰對來替換它們,就可以替換被洩露的私人密鑰。 要做到這一點,可以使用一個用於更新賬戶信息的專用密鑰,該密鑰是事先創建的,與洩露的私人密鑰分開存儲。
Kaia 錢包鑰匙格式
Kaia 錢包密鑰格式可輕鬆處理私鑰和相應地址。 它使用戶更容易通過地址來維護自己的私人密鑰。 格式為 0x{private key}0x{type}0x{address in hex}
(十六進制),其中 {type}
必須為 "00"。 其他值為保留值。 示例如下:
0x45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d80x000xa94f5374fce5edbc8e2a8697c15331677e6ebf0b
Kaia 賬戶類型
Kaia 有兩種賬戶:外部擁有賬戶(EOAs)和智能合約賬戶(SCA)。
外部擁有賬戶(EOAs)
外部擁有的賬戶有 nonce 和餘額等信息。 這類賬戶沒有代碼或存儲空間。 EOA 由私人密鑰控制,沒有與之相關的代碼。 可使用成對密鑰創建 EOA,然後由擁有成對密鑰的任何人進行控制。 賬戶密鑰在 賬戶密鑰 一節中有說明。
屬性
屬性 | 類型 | 說明 |
---|---|---|
類型 | uint8 (Go) | 外部擁有賬戶的類型。 EOA 必須為 0x1。 |
nonce | uint64 (Go) | 用於確定交易順序的序列號。 下一個要處理的事務具有與此值相同的 nonce。 |
balance | *big.Int (Go) | 賬戶中 KAIA 的金額。 |
humanReadable | bool (Go) | 布爾值,表示賬戶與人類可讀地址相關聯。 由於目前還不支持 HRA(人類可讀地址),因此該值對所有賬戶都是假的。 |
key | AccountKey | 與該賬戶相關的密鑰。 該字段可以是 AccountKeyLegacy、AccountKeyPublic、AccountKeyFail、AccountKeyWeightedMultisig、AccountKeyRoleBased 中的任意一個。 交易中的簽名就是用這個密鑰驗證的。 |
智能合約賬戶(SCAs)
與 EOA 不同,SCA 有與之相關的代碼,並受其代碼控制。 SCA 由智能合約部署交易創建;一旦部署完成,SCA 自身無法啟動新的交易,必須由 EOA 或其他 SCA 觸發另一個賬戶。
屬性
屬性 | 類型 | 說明 |
---|---|---|
類型 | uint8 (Go) | 智能合約賬戶類型。 SCA 必須為 0x2。 |
nonce | uint64 (Go) | 用於確定交易順序的序列號。 下一個要處理的事務的 nonce 與此值相同。 |
balance | *big.Int (Go) | 賬戶中 KAIA 的金額。 |
humanReadable | bool (Go) | 布爾值,表示賬戶與人類可讀地址相關聯。 由於目前還不支持 HRA(人類可讀地址),因此該值對所有賬戶都是假的。 |
key | AccountKey | 與該賬戶相關的密鑰。 該字段可以是 AccountKeyLegacy、AccountKeyPublic、AccountKeyFail、AccountKeyWeightedMultisig、AccountKeyRoleBased 中的任意一個。 交易中的簽名就是用這個密鑰驗證的。 |
codeHash | []byte (Go) | 賬戶智能合約代碼的哈希值。 這個值是不可變的,這意味著它只有在智能合約創建時才會被設置。 |
storageRoot | [32]byte (Go) | 包含賬戶中所有存儲變量值的 Merkle Patricia Trie 根的 256 位散列。 |
codeFormat | uint8 (Go) | 支持解釋器版本。 最多可設置 16 個。 目前,它只支持 EVM(0x00) 。 |
vmVersion | uint8 (Go) | 合約部署時的協議升級(硬分叉)信息(例如 0x0(康斯坦丁堡)、0x1(伊斯坦布爾、倫敦......))。 最多可使用 16 個。 它與合同一起自動創建。 |
注意:從 kaia v1.7.0 開始,智能合約賬戶將添加 vmVersion 屬性。
Kaia 帳戶類型 ID
以下是分配給每個賬戶類型的賬戶類型 ID。
賬戶類型 | 賬戶類型 ID |
---|---|
外部擁有賬戶(EOA) | 0x1 |
智能合約賬戶(SCA) | 0x2 |
賬戶密鑰
賬戶密鑰表示與賬戶相關的密鑰結構。
AccountKeyNil
AccountKeyNil 表示空鍵。 如果賬戶試圖擁有一個 AccountKeyNil 對象,交易將失敗。 AccountKeyNil 僅用於具有基於角色密鑰的 TxTypeAccountUpdate 交易。 例如,如果一個賬戶只嘗試更新 RoleAccountUpdate 密鑰,那麼 TxTypeAccountUpdate 事務的密鑰字段將是
[AccountKeyNil, NewKey, AccountKeyNil]
然後,只更新 RoleAccountUpdate 密鑰。 其他角色不會更新。 詳情請參考 基於帳戶密鑰的角色。
屬性
沒有 AccountKeyNil 的屬性。