在由 OCAP 驅動的區塊鏈上,帳號本質上是與一個地址相關聯的狀態,由一對加密金鑰(公鑰和私鑰)控制。一個需要理解的關鍵概念是,帳號是隱式創建的。一旦帳號收到第一筆傳入的交易,例如代幣或資產轉移,它就在鏈上正式存在。沒有明確的 createAccount 交易。
本指南介紹將舊帳號遷移至由新金鑰控制的另一個地址。鏈上會記錄新舊帳號的遷移關係。費用、資產規則與應用程式自己的記錄需要分別確認;遷移不保證餘額數字不變,也不會自動搬移所有相關物件。
將帳號遷移至新金鑰
migrateAccount 提交目標錢包的地址與公鑰,由原錢包簽署。在下述實作中,目標地址必須與傳送方不同,而且不能已經存在帳號狀態。這在多種情況下都很有用,例如:
- 金鑰洩露:如果您懷疑自己的私鑰可能已經洩露,可以將帳號遷移到一對新的、安全的金鑰對,在遷移生效後替換外洩金鑰的控制權。在生效前,持有舊金鑰的攻擊者也可能發起操作。
- 升級安全性:您可能希望從舊的金鑰類型遷移到更新、更安全的類型。
此操作有效地轉移了帳號的控制權,同時保留其在區塊鏈上的歷史和狀態。
參數
- from
WalletObject(required) — 代表正在遷移的當前帳號的錢包物件。此錢包必須簽署交易以證明所有權。 - to
WalletObject(required) — 將控制權轉移至的新錢包物件。其地址與相符的公鑰指定新的目標帳號,而非在不變的舊地址上替換公鑰。
回傳值
migrateAccount 方法回傳一個 Promise,其解析值為交易雜湊值的字串。
原始碼更正(2026 年 9 月 29 日):上述地址行為已對照 @ocap/client 與 @ocap/tx-protocols 1.20.2 的公開實作核實。先前「地址不變」的說明不正確。此操作需要原私鑰,並非私鑰完全遺失後的恢復。延伸閱讀:帳號遷移機制(簡體中文)。
以下保留歷史 SDK 範例。使用前請確認套件相容性,並提供所用測試網路的有效端點與區塊瀏覽器;此處未確認舊範例服務目前仍可用。
範例
以下是如何將帳號從舊錢包遷移到新錢包的範例。
遷移帳號
import Client from '@ocap/client';
import { fromRandom } from '@ocap/wallet';
const client = new Client('https://beta.abtnetwork.io/api');
// 假設 oldWallet 是目前授權給該帳號的錢包
const oldWallet = fromRandom();
// 建立一個帶有新金鑰組的新錢包
const newWallet = fromRandom();
async function migrate() {
try {
// 在遷移之前,您通常需要為 oldWallet 的地址儲值。
// 在此範例中,我們假設它有足夠的資金來支付交易費用。
// 您可以從 https://faucet.abtnetwork.io/ 獲取測試代幣
console.log(`Migrating account from ${oldWallet.address} to target address ${newWallet.address}`);
const hash = await client.migrateAccount({
from: oldWallet,
to: newWallet,
});
console.log('Account migration transaction sent successfully!');
console.log('Transaction Hash:', hash);
console.log(`View transaction at: https://beta.abtnetwork.io/explorer/txs/${hash}`);
} catch (err) {
console.error('Error migrating account:', err);
}
}
migrate();現在您已了解如何透過遷移金鑰來保護您的帳號,您可能想學習如何在不分享主金鑰的情況下,授予有限權限給其他帳號。請參閱 委派權限 指南以獲取更多詳細資訊。