在開發TON合約時,訊息的傳送格式非常關鍵。特別是在使用TypeScript與TON合約互動時,我們會遇到這樣的程式碼片段:
async send(provider: ContractProvider, via: Sender, args: { value: bigint, bounce?: boolean | null | undefined }, message: string | Deploy) {
let body: Cell | null = null;
if (typeof message === 'string') {
body = beginCell().storeUint(0, 32).storeStringTail(message).endCell();
}
if (message && typeof message === 'object' && !(message instanceof Slice) && message.$$type === 'Deploy') {
body = beginCell().store(storeDeploy(message)).endCell();
}
if (body === null) { throw new Error('Invalid message type'); }
await provider.internal(via, { ...args, body: body });
}
為什麼需要storeUint(0, 32)
?
-
訊息結構:
- TON的訊息遵循特定的格式,確保傳送的資訊可以被接收方正確解析。使用
beginCell().storeUint(0, 32)
來定義訊息的型別或識別符號。
- TON的訊息遵循特定的格式,確保傳送的資訊可以被接收方正確解析。使用
-
型別標識:
- 在這裡,
storeUint(0, 32)
通常表示訊息的型別。接收合約可以透過檢查這個識別符號來判斷如何處理後續的資料。例如,值為0
可能表示這是一個普通的字串訊息。
- 在這裡,
-
可擴充套件性:
- 這種結構使得訊息在未來可以靈活擴充套件。如果後續需要增加更多的資訊或型別,只需改變
storeUint
的值或增加更多欄位即可。
- 這種結構使得訊息在未來可以靈活擴充套件。如果後續需要增加更多的資訊或型別,只需改變
-
遵循協議規範:
- TON的訊息傳遞有其特定的協議和規範,遵循這些規範可以確保合約之間的相容性和可預測的行為。
結論
在傳送字串訊息時,使用storeUint(0, 32)
不僅僅是一個技術細節,它在訊息的解碼和處理過程中起著至關重要的作用。理解這些細節有助於我們在開發TON合約時編寫更加高效、可靠的程式碼。希望這個解讀能幫助你更好地理解TON合約中的訊息結構!