Examples: query, "exact match", wildcard*, wild?ard, wild*rd
Fuzzy search: cake~ (finds cakes, bake)
Term boost: "red velvet"^4, chocolate^2
Field grouping: tags:(+work -"fun-stuff")
Escape special characters +-&|!(){}[]^"~*?:\ - e.g. \+ \* \!
Range search: properties.timestamp:[1587729413488 TO *] (inclusive), properties.title:{A TO Z}(excluding A and Z)
Combinations: chocolate AND vanilla, chocolate OR vanilla, (chocolate OR vanilla) NOT "vanilla pudding"
Field search: properties.title:"The Title" AND text
When sending value to multiple accounts with send_raw_message in a Highload Wallet, is it guaranteed that all of the transfers succeed?

Consider I have a highload wallet smart contract deployed to the TON network and I send an external message to it in order to deliver 100 value transfers to different accounts in the network by using a send_raw_message function (like a crypto exchange scenario). The contract is using a seqno mechanism in order to prevent double processing of the same external message.

So, if after sending the transaction I observe that contract's seqno has increased by one, can I be sure that all 100 transfers were also successfully completed or will be guaranteedly completed in the near future (next or so block)? Of course I'm the only one who can send external messages to the contract.

Or do I need to actually confirm delivery of each of the 100 transfers to their destination wallets?

According to the TON white paper (section 2.4. Messages Between Shardchains) TON should ensure exactly-once delivery. However, I'm interested if this actually works in practice.

Posted one year ago
Edited one year ago
Slava Fomin
77 × 2 Administrator
Votes Newest

Answers 2

As client software and the smart contract in question are two separate entities it would be better to actually verify that transaction was actually processed and the outgoing messages were created and submitted for processing.

What you should do is:

1). Create an external message for your highload wallet with the list of value transfers that need to be done. Get the hash of the external message or it's body.

2). Submit the message to the network.

3). Poll for the latest transactions from the Blockchain using your wallet account ID and match the transaction using the pre-generated hash.

4). Check that transaction has been executed successfully (exit code = 0 || 1) and make sure that outgoinng messages contain all of the required value transfers with the correct values.

This ensures that the transfers were actually made. However, if you need to make sure that they were in fact delivered (and not bounced back) you will need to query each individual destination account and check for incoming transactions by matching them using the outgoing message hashes.

Posted one year ago
Slava Fomin
77 × 2 Administrator

Highload wallet doesnt use explicit seqno, it uses a short lived cache using a dictionary, and the key for each transaction is the query id.

So if you want to guarantee that the 100 transactions were sent successfully you should query your wallet adress using getTransactions API using a toncenter service (or others) and verify that the external transaction created a 100 output messages


Could it create less than the specified amount of outgoing messages? Could any individual outgoing message fail?

Slava Fomin   one year ago Report