diff --git a/CHANGELOG.md b/CHANGELOG.md index 71852e13e..99c753e46 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Binary and octal literals with underscores as numerical separators: PR [#99](https://github.com/tact-lang/tact/pull/99) - Ternary conditional operator (`condition ? then : else`): PR [#97](https://github.com/tact-lang/tact/pull/97) - The `--version` command-line flag for the Tact executable: PR [#137](https://github.com/tact-lang/tact/pull/137) +- The `SendBounceIfActionFail` send mode constant to the standard library: PR [#122](https://github.com/tact-lang/tact/pull/122) ### Changed - Decimal and hexadecimal literals now allow underscores as numerical separators: PR [#99](https://github.com/tact-lang/tact/pull/99) diff --git a/src/imports/stdlib.ts b/src/imports/stdlib.ts index edb52481d..9f91e7f94 100644 --- a/src/imports/stdlib.ts +++ b/src/imports/stdlib.ts @@ -170,8 +170,8 @@ files['std/contract.tact'] = files['std/crypto.tact'] = 'QG5hbWUoY2VsbF9oYXNoKQpleHRlbmRzIG5hdGl2ZSBoYXNoKHNlbGY6IENlbGwpOiBJbnQ7CgpAbmFtZShzbGljZV9oYXNoKQpleHRlbmRzIG5hdGl2ZSBoYXNoKHNl' + 'bGY6IFNsaWNlKTogSW50OwoKQG5hbWUoY2hlY2tfc2lnbmF0dXJlKQpuYXRpdmUgY2hlY2tTaWduYXR1cmUoaGFzaDogSW50LCBzaWduYXR1cmU6IFNsaWNlLCBwdWJs' + - 'aWNfa2V5OiBJbnQpOiBCb29sOwoKQG5hbWUoY2hlY2tfZGF0YV9zaWduYXR1cmUpCm5hdGl2ZSBjaGVja0RhdGFTaWduYXR1cmUoaGFzaDogU2xpY2UsIHNpZ25hdHVy' + - 'ZTogU2xpY2UsIHB1YmxpY19rZXk6IFNsaWNlKTogQm9vbDs='; + 'aWNfa2V5OiBJbnQpOiBCb29sOwoKQG5hbWUoY2hlY2tfZGF0YV9zaWduYXR1cmUpCm5hdGl2ZSBjaGVja0RhdGFTaWduYXR1cmUoZGF0YTogU2xpY2UsIHNpZ25hdHVy' + + 'ZTogU2xpY2UsIHB1YmxpY19rZXk6IEludCk6IEJvb2w7Cg=='; files['std/debug.tact'] = 'QG5hbWUodGhyb3cpCm5hdGl2ZSBuYXRpdmVUaHJvdyhjb2RlOiBJbnQpOwoKQG5hbWUodGhyb3dfd2hlbikKbmF0aXZlIG5hdGl2ZVRocm93V2hlbihjb2RlOiBJbnQs' + 'IGNvbmRpdGlvbjogQm9vbCk7CgpAbmFtZSh0aHJvdykKbmF0aXZlIHRocm93KGNvZGU6IEludCk7CgpAbmFtZSh0aHJvd191bmxlc3MpCm5hdGl2ZSBuYXRpdmVUaHJv' + @@ -192,30 +192,31 @@ files['std/reserve.tact'] = files['std/send.tact'] = 'QG5hbWUoc2VuZF9yYXdfbWVzc2FnZSkKbmF0aXZlIG5hdGl2ZVNlbmRNZXNzYWdlKGNlbGw6IENlbGwsIG1vZGU6IEludCk7Cgpjb25zdCBTZW5kUmVtYWluaW5nQmFs' + 'YW5jZTogSW50ID0gMTI4Owpjb25zdCBTZW5kUmVtYWluaW5nVmFsdWU6IEludCA9IDY0Owpjb25zdCBTZW5kSWdub3JlRXJyb3JzOiBJbnQgPSAyOwpjb25zdCBTZW5k' + - 'UGF5R2FzU2VwYXJhdGVseTogSW50ID0gMTsKY29uc3QgU2VuZERlc3Ryb3lJZlplcm86IEludCA9IDMyOwoKc3RydWN0IFNlbmRQYXJhbWV0ZXJzIHsKICAgIGJvdW5j' + - 'ZTogQm9vbCA9IHRydWU7CiAgICB0bzogQWRkcmVzczsKICAgIHZhbHVlOiBJbnQ7CiAgICBtb2RlOiBJbnQgPSAwOwogICAgYm9keTogQ2VsbD8gPSBudWxsOwogICAg' + - 'Y29kZTogQ2VsbD8gPSBudWxsOwogICAgZGF0YTogQ2VsbD8gPSBudWxsOwp9CgpmdW4gc2VuZChwYXJhbXM6IFNlbmRQYXJhbWV0ZXJzKSB7CiAgICBsZXQgYjogQnVp' + - 'bGRlciA9IGJlZ2luQ2VsbCgpOwogICAgYiA9IGIuc3RvcmVJbnQoMSwgMik7IC8vIGludGVybmFsX21lc3NhZ2UgKyBpaGRfZGlzYWJsZWQKICAgIGIgPSBiLnN0b3Jl' + - 'Qm9vbChwYXJhbXMuYm91bmNlKTsgLy8gYm91bmNlCiAgICBiID0gYi5zdG9yZUludCgwLCAzKTsgLy8gYm91bmNlZCArIGZyb20KICAgIGIgPSBiLnN0b3JlQWRkcmVz' + - 'cyhwYXJhbXMudG8pOyAvLyBUbwogICAgYiA9IGIuc3RvcmVDb2lucyhwYXJhbXMudmFsdWUpOyAvLyBWYWx1ZQogICAgYiA9IGIuc3RvcmVJbnQoMCwgMSArIDQgKyA0' + - 'ICsgNjQgKyAzMik7IC8vIGN1cnJlbmN5X2NvbGxlY3Rpb24gKyBJSFIgZmVlcyArIEZ3ZCBmZWVzICsgQ3JlYXRlZExUICsgQ3JlYXRlZEF0CgogICAgLy8gU3RhdGVp' + - 'bml0CiAgICBpZiAocGFyYW1zLmNvZGUgIT0gbnVsbCB8fCBwYXJhbXMuZGF0YSAhPSBudWxsKSB7CiAgICAgICAgYiA9IGIuc3RvcmVCb29sKHRydWUpOyAvLyBTdGF0' + - 'ZSBpbml0CgogICAgICAgIC8vIEFzc2VtYmxlIHN0YXRlIGluaXQgY2VsbAogICAgICAgIGxldCBiYzogQnVpbGRlciA9IGJlZ2luQ2VsbCgpOwogICAgICAgIGJjID0g' + - 'YmMuc3RvcmVCb29sKGZhbHNlKTsgLy8gU3BsaXREZXB0aAogICAgICAgIGJjID0gYmMuc3RvcmVCb29sKGZhbHNlKTsgLy8gVGlja1RvY2sKICAgICAgICBpZiAocGFy' + - 'YW1zLmNvZGUgIT0gbnVsbCkgewogICAgICAgICAgICBiYyA9IGJjLnN0b3JlQm9vbCh0cnVlKTsgLy8gQ29kZSBwcmVzZW5jZQogICAgICAgICAgICBiYyA9IGJjLnN0' + - 'b3JlUmVmKHBhcmFtcy5jb2RlISEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVCb29sKGZhbHNlKTsgLy8gQ29kZSBwcmVzZW5jZQog' + - 'ICAgICAgIH0KICAgICAgICBpZiAocGFyYW1zLmRhdGEgIT0gbnVsbCkgewogICAgICAgICAgICBiYyA9IGJjLnN0b3JlQm9vbCh0cnVlKTsgLy8gRGF0YSBwcmVzZW5j' + - 'ZQogICAgICAgICAgICBiYyA9IGJjLnN0b3JlUmVmKHBhcmFtcy5kYXRhISEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJjID0gYmMuc3RvcmVCb29sKGZh' + - 'bHNlKTsgLy8gRGF0YSBwcmVzZW5jZQogICAgICAgIH0KICAgICAgICBiYyA9IGJjLnN0b3JlQm9vbChmYWxzZSk7IC8vIExpYnJhcnkKCiAgICAgICAgYiA9IGIuc3Rv' + - 'cmVCb29sKHRydWUpOyAvLyBTdG9yZSBhcyByZWYKICAgICAgICBiID0gYi5zdG9yZVJlZihiYy5lbmRDZWxsKCkpOwogICAgfSBlbHNlIHsKICAgICAgICBiID0gYi5z' + - 'dG9yZUJvb2woZmFsc2UpOyAvLyBObyBzdGF0ZSBpbml0CiAgICB9CgogICAgLy8gQm9keQogICAgbGV0IGJvZHk6IENlbGw/ID0gcGFyYW1zLmJvZHk7CiAgICBpZiAo' + - 'Ym9keSAhPSBudWxsKSB7CiAgICAgICAgYiA9IGIuc3RvcmVCb29sKHRydWUpOwogICAgICAgIGIgPSBiLnN0b3JlUmVmKGJvZHkhISk7CiAgICB9IGVsc2UgewogICAg' + - 'ICAgIGIgPSBiLnN0b3JlQm9vbChmYWxzZSk7IC8vIE5vIGJvZHkKICAgIH0KCiAgICAvLyBTZW5kCiAgICBsZXQgYzogQ2VsbCA9IGIuZW5kQ2VsbCgpOwogICAgbmF0' + - 'aXZlU2VuZE1lc3NhZ2UoYywgcGFyYW1zLm1vZGUpOwp9CgppbmxpbmUgZnVuIGVtaXQoYm9keTogQ2VsbCkgewogICAgLy8gZXh0X291dF9tc2dfaW5mbyQxMSBzcmM6' + - 'TXNnQWRkcmVzc0ludCBkZXN0Ok1zZ0FkZHJlc3NFeHQgY3JlYXRlZF9sdDp1aW50NjQgY3JlYXRlZF9hdDp1aW50MzIKICAgIC8vICAgICAgICAgICAgICAgICAgICAg' + - 'bWF5YmU6IHN0YXRlSW5pdCAoZmFsc2UpIGJvZHlSZWY6IGJvb2wgKHRydWUpCiAgICBsZXQgYzogQ2VsbCA9IGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlVWludCgx' + - 'NTIxMTgwNzIwMjczODc1MjgxNzk2MDQzODQ2NDUxMywgMTA0KQogICAgICAgIC5zdG9yZVJlZihib2R5KQogICAgICAgIC5lbmRDZWxsKCk7CiAgICBuYXRpdmVTZW5k' + - 'TWVzc2FnZShjLCAwKTsKfQoKQG5hbWUoYWNjZXB0X21lc3NhZ2UpCm5hdGl2ZSBhY2NlcHRNZXNzYWdlKCk7CgpAbmFtZShjb21taXQpCm5hdGl2ZSBjb21taXQoKTs='; + 'UGF5R2FzU2VwYXJhdGVseTogSW50ID0gMTsKY29uc3QgU2VuZERlc3Ryb3lJZlplcm86IEludCA9IDMyOwpjb25zdCBTZW5kQm91bmNlSWZBY3Rpb25GYWlsOiBJbnQg' + + 'PSAxNjsKCnN0cnVjdCBTZW5kUGFyYW1ldGVycyB7CiAgICBib3VuY2U6IEJvb2wgPSB0cnVlOwogICAgdG86IEFkZHJlc3M7CiAgICB2YWx1ZTogSW50OwogICAgbW9k' + + 'ZTogSW50ID0gMDsKICAgIGJvZHk6IENlbGw/ID0gbnVsbDsKICAgIGNvZGU6IENlbGw/ID0gbnVsbDsKICAgIGRhdGE6IENlbGw/ID0gbnVsbDsKfQoKZnVuIHNlbmQo' + + 'cGFyYW1zOiBTZW5kUGFyYW1ldGVycykgewogICAgbGV0IGI6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKICAgIGIgPSBiLnN0b3JlSW50KDEsIDIpOyAvLyBpbnRlcm5h' + + 'bF9tZXNzYWdlICsgaWhkX2Rpc2FibGVkCiAgICBiID0gYi5zdG9yZUJvb2wocGFyYW1zLmJvdW5jZSk7IC8vIGJvdW5jZQogICAgYiA9IGIuc3RvcmVJbnQoMCwgMyk7' + + 'IC8vIGJvdW5jZWQgKyBmcm9tCiAgICBiID0gYi5zdG9yZUFkZHJlc3MocGFyYW1zLnRvKTsgLy8gVG8KICAgIGIgPSBiLnN0b3JlQ29pbnMocGFyYW1zLnZhbHVlKTsg' + + 'Ly8gVmFsdWUKICAgIGIgPSBiLnN0b3JlSW50KDAsIDEgKyA0ICsgNCArIDY0ICsgMzIpOyAvLyBjdXJyZW5jeV9jb2xsZWN0aW9uICsgSUhSIGZlZXMgKyBGd2QgZmVl' + + 'cyArIENyZWF0ZWRMVCArIENyZWF0ZWRBdAoKICAgIC8vIFN0YXRlaW5pdAogICAgaWYgKHBhcmFtcy5jb2RlICE9IG51bGwgfHwgcGFyYW1zLmRhdGEgIT0gbnVsbCkg' + + 'ewogICAgICAgIGIgPSBiLnN0b3JlQm9vbCh0cnVlKTsgLy8gU3RhdGUgaW5pdAoKICAgICAgICAvLyBBc3NlbWJsZSBzdGF0ZSBpbml0IGNlbGwKICAgICAgICBsZXQg' + + 'YmM6IEJ1aWxkZXIgPSBiZWdpbkNlbGwoKTsKICAgICAgICBiYyA9IGJjLnN0b3JlQm9vbChmYWxzZSk7IC8vIFNwbGl0RGVwdGgKICAgICAgICBiYyA9IGJjLnN0b3Jl' + + 'Qm9vbChmYWxzZSk7IC8vIFRpY2tUb2NrCiAgICAgICAgaWYgKHBhcmFtcy5jb2RlICE9IG51bGwpIHsKICAgICAgICAgICAgYmMgPSBiYy5zdG9yZUJvb2wodHJ1ZSk7' + + 'IC8vIENvZGUgcHJlc2VuY2UKICAgICAgICAgICAgYmMgPSBiYy5zdG9yZVJlZihwYXJhbXMuY29kZSEhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiYyA9' + + 'IGJjLnN0b3JlQm9vbChmYWxzZSk7IC8vIENvZGUgcHJlc2VuY2UKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmFtcy5kYXRhICE9IG51bGwpIHsKICAgICAgICAgICAg' + + 'YmMgPSBiYy5zdG9yZUJvb2wodHJ1ZSk7IC8vIERhdGEgcHJlc2VuY2UKICAgICAgICAgICAgYmMgPSBiYy5zdG9yZVJlZihwYXJhbXMuZGF0YSEhKTsKICAgICAgICB9' + + 'IGVsc2UgewogICAgICAgICAgICBiYyA9IGJjLnN0b3JlQm9vbChmYWxzZSk7IC8vIERhdGEgcHJlc2VuY2UKICAgICAgICB9CiAgICAgICAgYmMgPSBiYy5zdG9yZUJv' + + 'b2woZmFsc2UpOyAvLyBMaWJyYXJ5CgogICAgICAgIGIgPSBiLnN0b3JlQm9vbCh0cnVlKTsgLy8gU3RvcmUgYXMgcmVmCiAgICAgICAgYiA9IGIuc3RvcmVSZWYoYmMu' + + 'ZW5kQ2VsbCgpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYiA9IGIuc3RvcmVCb29sKGZhbHNlKTsgLy8gTm8gc3RhdGUgaW5pdAogICAgfQoKICAgIC8vIEJvZHkKICAg' + + 'IGxldCBib2R5OiBDZWxsPyA9IHBhcmFtcy5ib2R5OwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICAgIGIgPSBiLnN0b3JlQm9vbCh0cnVlKTsKICAgICAgICBi' + + 'ID0gYi5zdG9yZVJlZihib2R5ISEpOwogICAgfSBlbHNlIHsKICAgICAgICBiID0gYi5zdG9yZUJvb2woZmFsc2UpOyAvLyBObyBib2R5CiAgICB9CgogICAgLy8gU2Vu' + + 'ZAogICAgbGV0IGM6IENlbGwgPSBiLmVuZENlbGwoKTsKICAgIG5hdGl2ZVNlbmRNZXNzYWdlKGMsIHBhcmFtcy5tb2RlKTsKfQoKaW5saW5lIGZ1biBlbWl0KGJvZHk6' + + 'IENlbGwpIHsKICAgIC8vIGV4dF9vdXRfbXNnX2luZm8kMTEgc3JjOk1zZ0FkZHJlc3NJbnQgZGVzdDpNc2dBZGRyZXNzRXh0IGNyZWF0ZWRfbHQ6dWludDY0IGNyZWF0' + + 'ZWRfYXQ6dWludDMyCiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1heWJlOiBzdGF0ZUluaXQgKGZhbHNlKSBib2R5UmVmOiBib29sICh0cnVlKQogICAgbGV0IGM6' + + 'IENlbGwgPSBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9yZVVpbnQoMTUyMTE4MDcyMDI3Mzg3NTI4MTc5NjA0Mzg0NjQ1MTMsIDEwNCkKICAgICAgICAuc3RvcmVSZWYo' + + 'Ym9keSkKICAgICAgICAuZW5kQ2VsbCgpOwogICAgbmF0aXZlU2VuZE1lc3NhZ2UoYywgMCk7Cn0KCkBuYW1lKGFjY2VwdF9tZXNzYWdlKQpuYXRpdmUgYWNjZXB0TWVz' + + 'c2FnZSgpOwoKQG5hbWUoY29tbWl0KQpuYXRpdmUgY29tbWl0KCk7'; files['std/text.tact'] = 'Ly8KLy8gU3RyaW5nIGJ1aWxkZXIKLy8KCkBuYW1lKF9fdGFjdF9zdHJpbmdfYnVpbGRlcl9zdGFydF9zdHJpbmcpCm5hdGl2ZSBiZWdpblN0cmluZygpOiBTdHJpbmdC' + 'dWlsZGVyOwoKQG5hbWUoX190YWN0X3N0cmluZ19idWlsZGVyX3N0YXJ0X2NvbW1lbnQpCm5hdGl2ZSBiZWdpbkNvbW1lbnQoKTogU3RyaW5nQnVpbGRlcjsKCkBuYW1l' + diff --git a/stdlib/std/send.tact b/stdlib/std/send.tact index a4578e7d9..cf20dbecb 100644 --- a/stdlib/std/send.tact +++ b/stdlib/std/send.tact @@ -6,6 +6,7 @@ const SendRemainingValue: Int = 64; const SendIgnoreErrors: Int = 2; const SendPayGasSeparately: Int = 1; const SendDestroyIfZero: Int = 32; +const SendBounceIfActionFail: Int = 16; struct SendParameters { bounce: Bool = true;