From f8bc8c669bb9ff909b39a8c00cf4bf6fe9b15129 Mon Sep 17 00:00:00 2001
From: Hang Su <87964331+ahangsu@users.noreply.github.com>
Date: Thu, 17 Aug 2023 19:07:19 -0400
Subject: [PATCH 1/8] Simulate: Hash of Program Bytecodes in Simulation (#5658)
---
daemon/algod/api/algod.oas2.json | 15 +
daemon/algod/api/algod.oas3.yml | 18 +
.../api/server/v2/generated/data/routes.go | 355 ++++++------
.../v2/generated/experimental/routes.go | 389 ++++++-------
.../api/server/v2/generated/model/types.go | 9 +
.../nonparticipating/private/routes.go | 391 ++++++-------
.../nonparticipating/public/routes.go | 541 +++++++++---------
.../generated/participating/private/routes.go | 393 ++++++-------
.../generated/participating/public/routes.go | 412 ++++++-------
daemon/algod/api/server/v2/utils.go | 12 +
ledger/simulation/simulation_eval_test.go | 59 +-
ledger/simulation/trace.go | 7 +
ledger/simulation/tracer.go | 15 +
test/e2e-go/restAPI/restClient_test.go | 20 +-
14 files changed, 1389 insertions(+), 1247 deletions(-)
diff --git a/daemon/algod/api/algod.oas2.json b/daemon/algod/api/algod.oas2.json
index e4c8f8bbe8..4bb1c798a1 100644
--- a/daemon/algod/api/algod.oas2.json
+++ b/daemon/algod/api/algod.oas2.json
@@ -4141,6 +4141,11 @@
"$ref": "#/definitions/SimulationOpcodeTraceUnit"
}
},
+ "approval-program-hash": {
+ "description": "SHA512_256 hash digest of the approval program executed in transaction.",
+ "type": "string",
+ "format": "byte"
+ },
"clear-state-program-trace": {
"description": "Program trace that contains a trace of opcode effects in a clear state program.",
"type": "array",
@@ -4148,6 +4153,11 @@
"$ref": "#/definitions/SimulationOpcodeTraceUnit"
}
},
+ "clear-state-program-hash": {
+ "description": "SHA512_256 hash digest of the clear state program executed in transaction.",
+ "type": "string",
+ "format": "byte"
+ },
"logic-sig-trace": {
"description": "Program trace that contains a trace of opcode effects in a logic sig.",
"type": "array",
@@ -4155,6 +4165,11 @@
"$ref": "#/definitions/SimulationOpcodeTraceUnit"
}
},
+ "logic-sig-hash": {
+ "description": "SHA512_256 hash digest of the logic sig executed in transaction.",
+ "type": "string",
+ "format": "byte"
+ },
"inner-trace": {
"description": "An array of SimulationTransactionExecTrace representing the execution trace of any inner transactions executed.",
"type": "array",
diff --git a/daemon/algod/api/algod.oas3.yml b/daemon/algod/api/algod.oas3.yml
index 01183b62b9..74145aeda6 100644
--- a/daemon/algod/api/algod.oas3.yml
+++ b/daemon/algod/api/algod.oas3.yml
@@ -2291,6 +2291,12 @@
"SimulationTransactionExecTrace": {
"description": "The execution trace of calling an app or a logic sig, containing the inner app call trace in a recursive way.",
"properties": {
+ "approval-program-hash": {
+ "description": "SHA512_256 hash digest of the approval program executed in transaction.",
+ "format": "byte",
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
+ "type": "string"
+ },
"approval-program-trace": {
"description": "Program trace that contains a trace of opcode effects in an approval program.",
"items": {
@@ -2298,6 +2304,12 @@
},
"type": "array"
},
+ "clear-state-program-hash": {
+ "description": "SHA512_256 hash digest of the clear state program executed in transaction.",
+ "format": "byte",
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
+ "type": "string"
+ },
"clear-state-program-trace": {
"description": "Program trace that contains a trace of opcode effects in a clear state program.",
"items": {
@@ -2312,6 +2324,12 @@
},
"type": "array"
},
+ "logic-sig-hash": {
+ "description": "SHA512_256 hash digest of the logic sig executed in transaction.",
+ "format": "byte",
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
+ "type": "string"
+ },
"logic-sig-trace": {
"description": "Program trace that contains a trace of opcode effects in a logic sig.",
"items": {
diff --git a/daemon/algod/api/server/v2/generated/data/routes.go b/daemon/algod/api/server/v2/generated/data/routes.go
index d7429328dc..7f45e0d838 100644
--- a/daemon/algod/api/server/v2/generated/data/routes.go
+++ b/daemon/algod/api/server/v2/generated/data/routes.go
@@ -114,200 +114,201 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
- "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",
+ "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",
- "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",
+ "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",
- "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",
+ "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",
- "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",
+ "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",
- "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",
+ "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",
- "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",
+ "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",
- "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",
- "dx/+bwAAAP//oCDbo8rnAAA=",
+ "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",
+ "/zcAAP//AIj0XV/qAAA=",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/experimental/routes.go b/daemon/algod/api/server/v2/generated/experimental/routes.go
index 8efeb17bb2..633d380def 100644
--- a/daemon/algod/api/server/v2/generated/experimental/routes.go
+++ b/daemon/algod/api/server/v2/generated/experimental/routes.go
@@ -90,200 +90,201 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/model/types.go b/daemon/algod/api/server/v2/generated/model/types.go
index 68249b1c67..97cfcc79a6 100644
--- a/daemon/algod/api/server/v2/generated/model/types.go
+++ b/daemon/algod/api/server/v2/generated/model/types.go
@@ -818,15 +818,24 @@ type SimulationOpcodeTraceUnit struct {
// SimulationTransactionExecTrace The execution trace of calling an app or a logic sig, containing the inner app call trace in a recursive way.
type SimulationTransactionExecTrace struct {
+ // ApprovalProgramHash SHA512_256 hash digest of the approval program executed in transaction.
+ ApprovalProgramHash *[]byte `json:"approval-program-hash,omitempty"`
+
// ApprovalProgramTrace Program trace that contains a trace of opcode effects in an approval program.
ApprovalProgramTrace *[]SimulationOpcodeTraceUnit `json:"approval-program-trace,omitempty"`
+ // ClearStateProgramHash SHA512_256 hash digest of the clear state program executed in transaction.
+ ClearStateProgramHash *[]byte `json:"clear-state-program-hash,omitempty"`
+
// ClearStateProgramTrace Program trace that contains a trace of opcode effects in a clear state program.
ClearStateProgramTrace *[]SimulationOpcodeTraceUnit `json:"clear-state-program-trace,omitempty"`
// InnerTrace An array of SimulationTransactionExecTrace representing the execution trace of any inner transactions executed.
InnerTrace *[]SimulationTransactionExecTrace `json:"inner-trace,omitempty"`
+ // LogicSigHash SHA512_256 hash digest of the logic sig executed in transaction.
+ LogicSigHash *[]byte `json:"logic-sig-hash,omitempty"`
+
// LogicSigTrace Program trace that contains a trace of opcode effects in a logic sig.
LogicSigTrace *[]SimulationOpcodeTraceUnit `json:"logic-sig-trace,omitempty"`
}
diff --git a/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go b/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
index 94c2b17f3e..1ae7e9043f 100644
--- a/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
+++ b/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
@@ -130,201 +130,202 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "H4sIAAAAAAAC/+y9e5PcNpIg/lUQtRshW79it172jvWLib22ZHv7LNsKddtzu5JuBkVmVWGaBXAAsLvK",
- "On33C2QCJEiCVazutjyO27+kLuKRSCQSiXx+mOVqUykJ0prZ8w+zimu+AQsa/+J5rmppM1G4vwowuRaV",
- "FUrOnodvzFgt5Go2nwn3a8XtejafSb6Bto3rP59p+EctNBSz51bXMJ+ZfA0b7ga2u8q1bkbaZiuV+SHO",
- "aIjzl7OPez7wotBgzBDKn2S5Y0LmZV0As5pLw3P3ybAbYdfMroVhvjMTkikJTC2ZXXcas6WAsjAnYZH/",
- "qEHvolX6yceX9LEFMdOqhCGcL9RmISQEqKABqtkQZhUrYImN1twyN4ODNTS0ihngOl+zpdIHQCUgYnhB",
- "1pvZ87czA7IAjbuVg7jG/y41wK+QWa5XYGfv56nFLS3ozIpNYmnnHvsaTF1aw7AtrnElrkEy1+uE/VAb",
- "yxbAuGRvvn3Bnj59+pVbyIZbC4UnstFVtbPHa6Lus+ezglsIn4e0xsuV0lwWWdP+zbcvcP4Lv8Cprbgx",
- "kD4sZ+4LO385toDQMUFCQlpY4T50qN/1SByK9ucFLJWGiXtCje91U+L5f9ddybnN15US0ib2heFXRp+T",
- "PCzqvo+HNQB02lcOU9oN+vZR9tX7D4/njx99/Je3Z9l/+T+/ePpx4vJfNOMewECyYV5rDTLfZSsNHE/L",
- "msshPt54ejBrVZcFW/Nr3Hy+QVbv+zLXl1jnNS9rRyci1+qsXCnDuCejApa8Li0LE7Nalo5NudE8tTNh",
- "WKXVtSigmDvue7MW+Zrl3NAQ2I7diLJ0NFgbKMZoLb26PYfpY4wSB9et8IEL+udFRruuA5iALXKDLC+V",
- "gcyqA9dTuHG4LFh8obR3lTnusmKXa2A4uftAly3iTjqaLssds7ivBeOGcRaupjkTS7ZTNbvBzSnFFfb3",
- "q3FY2zCHNNyczj3qDu8Y+gbISCBvoVQJXCLywrkbokwuxarWYNjNGuza33kaTKWkAaYWf4fcum3/nxc/",
- "/ciUZj+AMXwFr3l+xUDmqoDihJ0vmVQ2Ig1PS4hD13NsHR6u1CX/d6McTWzMquL5VfpGL8VGJFb1A9+K",
- "Tb1hst4sQLstDVeIVUyDrbUcA4hGPECKG74dTnqpa5nj/rfTdmQ5R23CVCXfIcI2fPvnR3MPjmG8LFkF",
- "shByxexWjspxbu7D4GVa1bKYIOZYt6fRxWoqyMVSQMGaUfZA4qc5BI+Qx8HTCl8ROGGQUXCaWQ6AI2Gb",
- "oBl3ut0XVvEVRCRzwn72zA2/WnUFsiF0ttjhp0rDtVC1aTqNwIhT75fApbKQVRqWIkFjFx4djsFQG8+B",
- "N14GypW0XEgoHHNGoJUFYlajMEUT7n/vDG/xBTfw5bOxO779OnH3l6q/63t3fNJuY6OMjmTi6nRf/YFN",
- "S1ad/hPeh/HcRqwy+nmwkWJ16W6bpSjxJvq727+AhtogE+ggItxNRqwkt7WG5+/kQ/cXy9iF5bLgunC/",
- "bOinH+rSiguxcj+V9NMrtRL5hViNILOBNfngwm4b+seNl2bHdpt8V7xS6qqu4gXlnYfrYsfOX45tMo15",
- "LGGeNa/d+OFxuQ2PkWN72G2zkSNAjuKu4q7hFew0OGh5vsR/tkukJ77Uv7p/qqp0vW21TKHW0bG/klF9",
- "4NUKZ1VVipw7JL7xn91XxwSAHhK8bXGKF+rzDxGIlVYVaCtoUF5VWalyXmbGcosj/auG5ez57F9OW/3L",
- "KXU3p9Hkr1yvC+zkRFYSgzJeVUeM8dqJPmYPs3AMGj8hmyC2h0KTkLSJjpSEY8ElXHNpT9onS4cfNAf4",
- "rZ+pxTdJO4Tv3hNsFOGMGi7AkARMDR8YFqGeIVoZohUF0lWpFs0Pn51VVYtB/H5WVYQPlB5BoGAGW2Gs",
- "+RyXz9uTFM9z/vKEfRePjaK4kuXOXQ4kari7YelvLX+LNbolv4Z2xAeG4XYqfeK2JqDBifn3QXH4rFir",
- "0kk9B2nFNf4P3zYmM/f7pM5/DBKLcTtOXPjQ8pijNw7+Ej1uPutRzpBwvLrnhJ31+96ObNwoaYK5Fa3s",
- "3U8adw8eGxTeaF4RgP4L3aVC4iONGhGsd+SmExldEuboDEe0hlDd+qwdPA9JSJAUejB8Xar86j+4Wd/D",
- "mV+EsYbHD6dha+AFaLbmZn0yS0kZ8fFqR5tyxFxDfOCzRTTVSbPE+1regaUV3PJoaR7etFhCqMd+yPRA",
- "J94uP+F/eMncZ3e2HeunYU/YJTIwQ8fZGxkK99qnBwLN5BqgFkKxDT3wmXt1HwXli3by9D5N2qNvSKfg",
- "d8gvotmhy60ozH1tEw42tlexgHr+kl50FjYm8WprVsW15rv02mmuKQi4VBUr4RrKPgjEsnA0Qoja3jtf",
- "+FptUzB9rbYDnqC2cC874cZBuTpg9wB8Lz1kSh/GPI49BelugU6WN8geZCwCuVlabfXZQunbseMen5Ws",
- "1cEz7kaNbqN5D0nYtK4yfzYTejxq0BuoNXvu56L94VMY62DhwvLfAAvGjXofWOgOdN9YUJtKlHAPpL9O",
- "3oILbuDpE3bxH2dfPH7y1ydffOlIstJqpfmGLXYWDPvMP1aZsbsSPh+uDJ+LdWnTo3/5LGhuu+OmxjGq",
- "1jlseDUcijTCJBNSM+baDbHWRTOuugFwEkcEd7UR2hkZOxxoL4VxIudmcS+bMYawop2lYB6SAg4S07HL",
- "a6fZxUvUO13fx9setFY6eXVVWlmVqzK7Bm2ESpiXXvsWzLcI8n7V/52gZTfcMDc36sJriRJWgrLsVk7n",
- "+zT05Va2uNnL+Wm9idX5eafsSxf5QbVqWAU6s1vJCljUq87TcKnVhnFWYEe8o78DS3KL2MCF5Zvqp+Xy",
- "ft7OCgdKvGHFBoybiVELJzUYyJUk15ADz1U/6hT09BETdJZ2HACPkYudzFHxeh/HdvwlvxESrUBmJ/Po",
- "We9gLKFYdcjy7s/3MXTQVA9MAhyHjlf4GTU/L6G0/FulL1ux7zut6urehbz+nFOXw/1ivG6pcH2DUkHI",
- "Vdl1R1o52E9Sa/xdFvQiHF+/BoQeKfKVWK1t9M56rZVa3j+MqVlSgOIHeqWWrs/wrfqjKhwzsbW5BxGs",
- "HazlcI5uY77GF6q2jDOpCsDNr01aOBtxYEHLORr8bSzv2TU9PBfgqCvntVttXTE0Zw/ui7ZjxnM6oRmi",
- "xowY8xorLLWi6cg5otTAix1bAEimFt5i5m15uEiOtngbxBsvGib4RQeuSqscjIEi85q6g6CFdnR12D14",
- "QsAR4GYWZhRbcn1nYK+uD8J5BbsMPUcM++z7X8znvwO8VlleHkAstkmht9F7eLPoEOpp0+8juP7kMdlx",
- "DSzcK8wqlGZLsDCGwqNwMrp/fYgGu3h3tFyDRgPlb0rxYZK7EVAD6m9M73eFtq5G/CH989ZJeG7DJJcq",
- "CFapwUpubHaILbtGnTe4W0HECVOcGAceEbxecWPJqC5kgbpAuk5wHhLC3BTjAI8+Q9zIv4QXyHDs3N2D",
- "0tSmeY6YuqqUtlCk1iBhu2euH2HbzKWW0djNm8cqVhs4NPIYlqLxPbJoJYQgbhvbk/c6GS4OLTTunt8l",
- "UdkBokXEPkAuQqsIu7FP2AggwrSIJsIRpkc5jSPafGasqirHLWxWy6bfGJouqPWZ/bltOyQubtt7u1Bg",
- "0BXNt/eQ3xBmyRtwzQ3zcLANv3KyB6pByPo/hNkdxswImUO2j/LxiedaxUfg4CGtq5XmBWQFlHw3HPRn",
- "+szo874BcMfb566ykJFbV3rTW0oOXjR7hlY4nkkJjwy/sNwdQfcUaAnE9z4wcgE4doo5eTp60AyFcyW3",
- "KIyHy6atToyIt+G1sm7HPT0gyJ6jTwF4BA/N0LdHBXbO2rdnf4r/BOMnaOSI4yfZgRlbQjv+UQsY0aF6",
- "j/novPTYe48DJ9nmKBs7wEfGjuyIQvc111bkosK3zvewu/enX3+CpN2VFWC5KKFg0Qd6BlZxf0YOSf0x",
- "b/cUnKR7G4I/UL4lllMKgyJPF/gr2OGb+zV5ukaqjvt4yyZGdfcTlwwBDf5zTgSPm8CW57bcOUHNrmHH",
- "bkADM/ViI6wlD/buU9eqKosHSNo19szorZpJm+JeM+sFDhUtb7gV8xm9CfbDd9l7GHTQ4d8ClVLlBA3Z",
- "ABlJCCY5wLBKuV0X3pk+uFMHSuoA6Zk2mrSb6/+B6aAZV8D+U9Us5xKfXLWFRqZRGgUFFCDdDE4Ea+b0",
- "ri4thqCEDdBLEr88fNhf+MOHfs+FYUu4CREormEfHQ8foh7ntTK2c7juQR/qjtt54vpAg4+7+PwrpM9T",
- "Drta+JGn7OTr3uCNlcidKWM84brl35kB9E7mdsraYxqZ5maC406y5XRM9sN1475fiE1dcnsfViu45mWm",
- "rkFrUcBBTu4nFkp+c83Ln5puGF0DuaPRHLIcY0ImjgWXrg+FkRx6G7budWKzgUJwC+WOVRpyoLAHJ/KZ",
- "BsYTRg6R+ZrLFUr6WtUr75FH4yCnrg3pVHQtB0MkpSG7lRlqp1Oc23thh8gXJwcBd2+xvmqbXh43vJnP",
- "BztNuVIj5PVV/Unr1nw2+lR1SL1un6qEnG74zgQu3hHUIvy0E0+0gSDqnNAyxFe8Le4UuM39bXTt7dAp",
- "KIcTRz6C7ccxN0H3Ti539yCt0EBMQ6XB4N0S65cMfVXLOFTPXz5mZyxship46vrXkeP3ZvShp2QpJGQb",
- "JWGXjE4XEn7Aj8njhPfbSGeUNMb69h8PHfh7YHXnmUKNd8Uv7nb/hPZNTeZbpe/LlkkDTpbLJ5gOD9rJ",
- "/ZS3NXDyskzYBH0gT58BmHmTOEBoxo1RuUBh67wwczpo3ozoo3666H/duCffw9nrj9szfsUxoqjchbJi",
- "nOWlQNWvksbqOrfvJEflUrTUhNdSeEWPqxtfhCZp/WZC/eiHeic5eqw1Kqekp8USEvqVbwGC1tHUqxUY",
- "23ukLAHeSd9KSFZLYXGujTsuGZ2XCjS6Dp1Qyw3fsaWjCavYr6AVW9S2K7ZjnJqxoiy9Jc5Nw9TyneSW",
- "lcCNZT8IebnF4YK1PhxZCfZG6asGC+nbfQUSjDBZ2rvqO/qKnsB++WvvFYx5Behz8LJsA2dnbpmdWPn/",
- "/dm/P397lv0Xz359lH31/52+//Ds4+cPBz8++fjnP/+f7k9PP/7583//19ROBdhTUVQe8vOX/kl7/hLf",
- "La3xZgD7J1Pcb4TMkkQWu2H0aIt9hhHDnoA+72q17BreSbuVjpCueSkKx1tuQw79G2ZwFul09KimsxE9",
- "LVZY65GvgTtwGZZgMj3WeGspauiQmI5XRGuiD0HE87KsJW1lkL4pHCc4hqnlvIlJpXQ1zxkGLK558Gr0",
- "fz754svZvA00bL7P5jP/9X2CkkWxTYWTFrBNPfL8AcGD8cCwiu8M2DT3QNiTPnDklBEPu4HNArRZi+rT",
- "cwpjxSLN4UKQg1cWbeW5JI92d37QNrnzJg+1/PRwWw1QQGXXqTQWHUENW7W7CdDzF6m0ugY5Z+IETvrK",
- "msK9F703Xgl8iekU8PWppryGmnNAhBaoIsJ6vJBJGpEU/fT8+f3lb+79OeQHTsHVn7MxRIa/rWIPvvvm",
- "kp16hmkeUGQzDR3Foiae0j7cquNJ5LgZJe8hIe+dfCdfwlJI4b4/fycLbvnpghuRm9PagP6al1zmcLJS",
- "7HmI4HrJLX8nB5LWaH6tKHaOVfWiFDm7ih8kLXlSzpThCO/eveXlSr17937gVDF8PvipkvyFJsicIKxq",
- "m/mMD5mGG65TRivTRPzjyJTSZd+sJGSrmjSbIaOEHz/N83hVmX7k73D5VVW65UdkaHxcq9syZqzSQRZx",
- "AgpBg/v7o/IXg+Y3Qa9SGzDsbxtevRXSvmfZu/rRo6fAOqGwf/NXvqPJXQWTtSujkcl9pQounJ6VsLWa",
- "ZxVfpWxj7969tcAr3H2Ulzeo4yhLht06IbjBox6HahcQ8DG+AQTH0eGEuLgL6hWye6WXgJ9wC7GNEzda",
- "i/1t9ysKyr31dvUCewe7VNt15s52clXGkXjYmSbpz8oJWcGNwogVvlZ9fqQFsHwN+ZVPXAObyu7mne7B",
- "U8cLmoF1CEMpjSikDpNqoGVhAayuCu5FcS53/ewGBqwN/sBv4Ap2l6rNyXFMOoNudL0ZO6hIqZF06Yg1",
- "PrZ+jP7me3cwfNhXVQhSx2jFQBbPG7oIfcYPMom893CIU0TRif4eQwTXCUQQ8Y+g4BYLdePdifRTy3Ov",
- "jAXdfIn0RoH3M9+kfTx5z614Nah1p+8bwPxo6sawBXdyu/KpvSiCPOJiteErGJGQY+POxDjtjkEIBzl0",
- "7yVvOrXsX2iD+yYJMjXO3JqTlALuiyMVfMz0/PXCTGQ/9JYJzNjpEbYoUUxqHBuJ6XDdMbJRCsIx0NIE",
- "DFq2AkcAo4uRWLJZcxOyjmFytnCWJ8kAv2FGhH15cM4jV7MoA1uT5Sbw3P45HbwufTackAIn5L2Jn5YT",
- "ctg4CR+921PboSQKQAWUsKKFU+NAKG12hnaDHBw/LZelkMCylNdapAaNrhk/Bzj5+CFjpIFnk0dIkXEE",
- "NtrFcWD2o4rPplwdA6T02SV4GBst6tHfkI77Ij9uJ/KoyrFwMWLVygMH4N7Vsbm/eg63OAwTcs4cm7vm",
- "pWNz/sXXDjJIx4Jiay/5ivfM+HxMnN1jAKGL5ag10VV0m9XEMlMAOi3Q7YF4obYZBX4mJd7FduHoPena",
- "jmGoqYNJiW8eGLZQW/T2wauFXKkPwDIORwAjeuFvhUF6xX5jtzkBs2/a/dJUigoNkoxX5zXkMiZOTJl6",
- "RIIZI5fPolw2twKgp+xoE0P7x+/BR2pXPBle5u2tNm9ztIWoodTxHztCyV0awd9QC9Nkn3ndl1iSeoqu",
- "00o38U4kQqaI3rGJoZFmaAoyUAI+CrKOEJVdpSyn7m0DeONchG6R8gLT+3C5+zzyhNKwEsZCq0QPfhK/",
- "h3qSY1ZBpZbjq7OVXrr1vVGquabIjIgdO8v85CtAV+Kl0MZmaIFILsE1+tbgo/pb1zQtK3V9rSgHryjS",
- "vAGnvYJdVoiyTtOrn/f7l27aHxuWaOoF8lshyWFlgTmjkx6Ye6YmJ929C35FC37F7229006Da+om1o5c",
- "unP8Qc5Fj/PuYwcJAkwRx3DXRlG6h0FGkbND7hjJTZGN/2Sf9nVwmIow9kGvnRC/O3ZH0UjJtUQKg72r",
- "EGgmcmKJsFHK5WFI68gZ4FUlim1PF0qjjr6Y+VEKj5CorocF3F0/2AEMoEj7BpagIalCaD6Rd3QjLsWJ",
- "CjGyu5MKJ7Hpo8r/riotXJRN5YhoolsowXxqyfE9bn0vO6kXu0tJ1C4YzloLab98NqTIRsfvYJmyGxdp",
- "1fqFe2h0ER89tyiV+YFNECMP95g8I/YcTyVMKMQxJNsmBvIQ5V4CL7+H3S+uLS5n9nE+u5siO0X5fsQD",
- "uH7dHLYkntFRghSbHbvUkSjnVaXVNS8zr+4fYxRaXXtGgc2DdeATXzxpyr785uzVaw/+x/ksL4HrrBHc",
- "RleF7ao/zKooGeXIAQmJ/t0LPLygSLCPNr/JoBebCG7W4DOmR2+DQWrX1vwTHUVvMlim/bUO8j5vqaIl",
- "7rFYQdUYrFplKtmrujYqfs1FGbSYAdoR3ypc3LT8wEmuEA9wZ1tXZLLM7pXdDE53+nS01HWAJ8Vz7cnp",
- "vqGyBYYp2XdoQA/0XeV9IDYcE7OSjmrInGS9Qb1OZkqRpzXecmEccUiyZLrGDBuPPA3ciLUYMYzLWkRj",
- "uWZTMg31gIzmSCLTJJMdtbhbKC9Y1FL8owYmCpDWfdJ4KnsHNYg2OOrgOnWS3HAuPzDZS9rh7yLxxUmJ",
- "+zceArFf3IvtpgNwXzYKjLDQRj/YSnzHul/EMw6uxD2uE54+PDWTK+m6a/+cJoVNKV8VJD+fHXlkjmQ5",
- "KmGypVa/QvrVjcqKRPhYSMMs0OfoV4iFy7gIS4fFNLq2tqpWO/uh7Z4u2Y9t/J0l+bDoJvPzbcT49Kk+",
- "biNvI7KbdJIzj+QxETJWvHb9ckZYCx6vyBKNSXeDUYZLOk8UO9Vx70yfytiR+pTGb0+lh3ngfF7ymwVP",
- "ZSR2kpyDKdrejvnIKhY6hw0wTYARzc4i94mmraD8CxXoNnx2mMvpllIZTTtZHmvFL6SoWPCak8m7NCox",
- "TC1vuKRKTq4f8Svf2wDpe12vG6Uxe4pJW7oKyMWGl2nxrMiHVo1CrAQVKaoNRFVw/EBUAI6oyFcSasLm",
- "PGrOl+zRPCrF5XejENfCiEUJ2OIxtVhwg9dlo3tturjlgbRrg82fTGi+rmWhobBrQ4g1ijWSM74hG3vt",
- "AuwNgGSPsN3jr9hnaKk24ho+d1j0QtDs+eOv0M5AfzxK3bK+yNQ+ll0gz/6L59lpOkZTPY3hmKQf9SSZ",
- "aIKqTI7fDntOE3Wdcpawpb9QDp+lDZd8BWnnqM0BmKgv7ibqjnt4kQWVSDNWqx0TNj0/WO7400jAhWN/",
- "BAbL1WYj7MbbM43aOHpqS9zQpGE4qrfms5MHuMJHdAuoglW091L/tHYCEiJSq0bnjR/5BrponTNOKXNK",
- "0TrshJoJ7Dxk5MJ07U2WdsKNm8stHWVJ9N9ZskoLafH1Vttl9ieWr7nmuWN/J2PgZosvnyXSnnczA8vj",
- "AP/keNdgQF+nUa9HyD7ILL4v+0wqmW0cRyk+bwOcolM56r+QtlSPmcv3Dz1V8nWjZKPkVnfIjUec+k6E",
- "J/cMeEdSbNZzFD0evbJPTpm1TpMHr90O/fzmlZcyNkqn0my2x91LHBqsFnCN7qrpTXJj3nEvdDlpF+4C",
- "/e9rbAsiZySWhbOcfAhcb34Juu/RMBUnwv/ygy+pOpC9R1xryHem6fOJw2+SXngkoaHnKsNVs789/hvT",
- "7iWJ0ujDhwj0w4dzL8z97Un3MzGphw/TyaeSiiP3a4uFu7zrsG9qD79WCTVOqPTQGAB9iE1CjTbGat0H",
- "d5QXfqg562bV//R34f04b6YN9OlT8O7dW/wS8IB/9BHxOx953MDWBYlWMkIoUVWRJMkUzffINYizr9V2",
- "KuH0OGkgnn8CFI2gZKKSCVcyqJqSNJkdtNlGNOpGXUCp3FMpTggda6X/OHh2i5/vwXYtyuKXNj1A7yLR",
- "XObrpGPFwnX8a1vdtFkiscpkjtk1lxLK5HD0QvtreMkl3pp/V1Pn2Qg5sW2/ag8tt7e4FvAumAGoMKFD",
- "r7ClmyDGajfyuonsKVeqYDhPm9C0ZY7D8ldRTY5/1GBs6mjgB/IuRpONY75UEoKBLFCHc8K+wxhIB0sn",
- "Wx3qTkI6oW5qjboqFS/mmObo8puzV4xmpT5Uo49KUqxQddBdRVLXOz3VSFNuLx1DN32c/UE9btXGZk0F",
- "iVSWAteirXEheuZLVCrE2DlhL6NS5JTQwA3BMMuV3kARFaygFwXShPuPtTxfo6Kkc5GNk/z0WiqBKk1U",
- "0LkpzNgkMMZz5+D25VSomsqcKbsGfSMM1a2Ha+gmRmiyhHhFXUiU0F2erqUkSjk5QqZo0hUfi/YAHAkk",
- "wcKZhKyH+COfyVSK6NjSMhfYK5lPsV+nZlDJmcLsm4J7P4Ra3FwqKXLMZpgSiHyB+yk2kwmJH9PGDjPz",
- "JzRxuJLVcRp/bY/F0Xo5gRF6xA3tj9FXt6lEHfSnxUrqa27ZCqzxnA2KeSjy5LXzQhrwCakdEcV8UumO",
- "S0XjRzasaNxYc48kI4zPHFG3fOu+/eiVcRi4dCUkPrs92ryYTfpzrL9t3VtdWLZSYPx6ukkqzFvX5wTz",
- "NRSwfX8S6nXjGOSR4JZN7jfDoc6CM453fnFtX7i2Pote83MnFIYmPasqP+l4CbB03cOtHEVwQgTKglU7",
- "Qm4zfjzaHnLb60WH96kjNLhGHxyo8B4eEEZTDqtXe9I9EYiisAUjX+JkKh0hE2C8EhLaavKJCyJPXgm4",
- "MXheR/qZXHNLIuAknnYJvCT1RYKhGesNgncdqp9D0KEE1xjmGN/GtpLXCONoGrSCG5e7poi9o+5ImHjB",
- "y8YLLVGXC6UqL0QVGNrWq9SVYhyOcYdagN0L4ED5z3nbHRNqHnsTjWUrWNTFCmzGiyKVH/xr/MrwKytq",
- "lBxgC3nd5JGuKpZjcq5utrIhtfmJciVNvdkzV2hwx+mi0ncJaojL74UdxmjIxQ7/PaYwa+N/drQ/enA2",
- "K45L0Tf0r09JvY6mMyNW2XRM4J1yd3S0U9+O0Nv+90rppVp1Afk9lKQjXC7eoxR/+8ZdHHEKn0FmcLpa",
- "mgw76G+sQgVnfDY2uSG6XAmvskGqcDTBNgVR96shxkubzvHyG4kBiVXedL+SGngsEiQfDVzi1odQW872",
- "sqDRsFRyXOwp0Yf2jDFnRfJVvD/ls1/rXoQGL9ghQN8HF3tWceEdVlpmMcSsD40aBqtNcdNvN7i/CB9w",
- "NKof/f56LDgoZOzE7/3Sh1fg86pUGq6FqoMrSHDIDE9C+rVTSLAJz0quf6jmxql+X+XzqKr80pegoWX6",
- "N/n3v5D7LgNp9e6fQHE+2PRBUcWhtEvqqbYJa6oXTKpm0LkVp2SzTSVO9bJhp6zjgaKUA7J6OUUcGBaZ",
- "nM/Oi6MuzFTy3RmNkjp26ZKR47kJ23yEeMQqZURbRCRVS3Ki5/MlloOMcisOxwoecdeQW6wc03r6aIBj",
- "Mi26yaLq1P+do3DkOd04iPvUhPvyEQ7LxRy44wchw1HYO5XaOJmefe+s8edEPo0p81cgfYHobvjZ5CCY",
- "5RJyK64PhGj/ZQ0yCv+dB70MwrKMIrZFE1SBGb6O1zq2AO2LoN4LT5Rp987gjIUEXsHugWEdakjW/piH",
- "q/Y2yZ0QA8gdMkciyqT8pUiR7F1YhGkoA7EQ/BOpO7RpMkfLBkYJB245VyBJd3G0SQj2TJmuWzZpLtf1",
- "qNQcGB8wFsU9LHs0/v54iVWmTFPSNySHil/p7HyYQvfGJ5fCgPrGdhLSTIEJv4XsGTRLKa4gLmyIlqob",
- "rovQIql6CVqdbM99NAi9DiV7+kAvm5lF600+tFUnkjJiYEZeKidGZGPRLV0H7sb76YEhNzWqEYKu6Q6u",
- "JWhfABbl31IZyKwK3uf74NiHCvLFuxUSzGgiZAJuND3Zmzb/GiaE55iOjHsXvHiBTMOGO+h0lCVtfM59",
- "yH5B30M8Y0gIflDD1NDr4co0IY5AmAESY6pfMn9bHo6TvI2ySUgJOguWp37KNAm6aw2ptCrqnC7o+GA0",
- "CrnJCQn3sJKkniYfrrL3RoiCza9gd0qPoFDSJ+xgDDRJTgR6lGqnt8n3qn4zKbhX9wLe76m5ms8qpcps",
- "xNhxPszz1qf4K5FfQcHcTRH8bUfKrLHPUMfeWLNv1ruQ16yqQELx+QljZ5IiHIJhu1tooDe5fGD3zb/F",
- "WYuaUi96pdrJO5l2FcekiPqO3CwMs5+HGXCs7o5T0SAHsohtR3LMaX6TKDp4MvVVPjQ19wvBtURFUKRk",
- "kguyWL3Ag55SHN1oYcE7NtAl7jaSeUsXM6VKuWTCzbSUFI37rtuRUo1c3PFkCJAFOSV0uYHCD55EQFPk",
- "7YCjUOMj1NbHav2EhuJRWaqbDI9R1mTJTD26XDvTvSZCYvC2n6O3BUQeR9x4EWLH1rxgudIa8rhHOiyK",
- "oNooDVmp0AEpZRtdWicRbjAWQrJSrZiq3EOfss0GK1KyettgrlpKjhc6RP4eSRTwPMfXp2K+D2v6TJ3y",
- "vorjUeoGWnRGVrYRl0gwPlWDxxA1HsK7pz7d8bXvLtcJZRliLhDI0QXuPJEfXZcqAnPC4TqsKDxL1e/r",
- "rqtfSXKsrqtVG5Gn0f3HchEadexJUW8KFT41PMXpYjPkKTEfayzCeHqGaAbJF2XyfvDHz1vGkM7df1Fs",
- "6I/LluD52QgPTRSiJ9af5aMXVA8AhJSCx2ytKZ98fH00VSrVioJN0a7XB3Qiw0H3ibvB5ka4T6A+7ieU",
- "VBnLxEFodsdX2QzR8iOHKumYsd8PgkobL6Z6QzTlMybyzwiAcf+IDgyTvCSOBWOJpcIznkDyefM2nUcS",
- "tves7xdFEsYzw5yTbmoNzI1da/DR21TTuFdEseJ2HWRV13yoQZIFbMFgaDVVguOG9J1B7+oLKvcfAarK",
- "SriGjtuIDymv8SIX1xAXY6bOrACo0ArRfxun/CHi67D3YPJrzyKL+hTsJl9QhFjaKXbgeZR8zG1lRsfE",
- "TD1KDqJrUdS8gz9zh7K04xVpBxJYRpIWHYgp0/xMI7wJA5yF/ilpIGDi/TQ+dDQLSqNuHwM66B+FJyp5",
- "6mXaPSrOl9AoVnG2ojHAEIm3fMNU/EaOKyKGJN8Ks9PLRUeI/WYLOQoGXf+fu+OE4WDM9HKhjEqxutnh",
- "2yu0fhca3kvCo+OlpHUDyGDb90yrbg7raOgirlmNZXCkkxyd4Imp5z3/9/xvjpU7aSD3iqJM+HFp7pcQ",
- "LAeYXLJRmnqZUDQXWvBzmvvsXP0nmIg8PDd8x5TGf6Sy7B81L8VyhyeUwA/dmFlzR0LeVEE2NO835Sbe",
- "L5jMA2DhFajCVLRuMXXMaLidGyUC2l2BTGmv9d7wK4i3Ac2DxHly61hOWyF+3t/OIRb84kOE9YYXEIVj",
- "YJ6nbgmiUNzU9f7/2+iReKqQnqUqed6WFDV801PMUW2TQFx2DZv94UXDF2YggaZeSku0OoQVFpT9g/DX",
- "hPqjJIL/WQirud7tcXY8aEFO+eyiPvsQ2IM6EqjcvrdlHFPYrI3Q3BOYNWkp970LU+3UA6DR2BVy5BwA",
- "n3KbhXw6nwL/yRRsY8uYAv4/C95Hym/E8FKljU+A5U7ocQJW0qIt1DbTsDSHTLKkRluobQuwaezwQuYa",
- "uCEb9flP/snWZhgT0j0hyYuqsQI0oxSwFLJllkJW3XLXnl1jojG5ixAWKyMRrSNK5zEpwYlh17z86Rq0",
- "FsXYxrnTQen/4/y0QQHr+yYe/82dOhxAmPb1gxFN0EbMRM3cBV6I5RI0OTgZy2XBdRE3F5LloN29z274",
- "ztxe0+2g1bWTLw7ounkkzXTjbCOtN5I2AVLuvBnljnroBkB+jwrpCYpk9KRLKJFJKWLViN54CEM6vJtv",
- "s1KtMM5lhAB9KjfU9NNjRUnUeZI8dNw8RvwK+6fBLLb+4FuFs06ZYv85+wlRhw+en6Wwe08aadP6gUfk",
- "GUYHIdC/XLXuqbQ5Q/pPxYpdUnXtOF6sX6wy7DWZqWk+GCm+0VWCjuwiGup8oGGs8TTTjQEdW2AqIo3e",
- "sBm+bc0eB1QwUXnv3DsQDJU+g0cxIWXu4/mO1AmRMjbcAyPgUYUrf7a60zZGXTfOdFkjsmCmIapUleVT",
- "vJIKKMGxOdIJe0i7ME6welb5vofrmJJghCt1FdBqifwBjwWpRtB/u1EIzPuRBV0lSHPwGGca8lqjkvCG",
- "7w7n7W8VIemgTBo5WDiCr3kDtd9gOuIkLshkWvxj1G8JrpMqgDpMSH7/i6Fo49Yf8rdbjvd4Si/gTHp5",
- "Esva76O3VlEdSCVBa04YSzCN4NNziwWO6ccmxMvd21Y1p+W32KDkJXm7qkGTQBvGTiWwiQCMBEV03Nnj",
- "omJt2i9NqilUYgV9f59f/NDaAQ567yEkocMB8OIoh7Zd43Dmwfmd82f90CAlWsr7MUroLP9Q4IRfYGs4",
- "ibbIS+rWApV4pCwg3X2JomLMiybYZORqHsSkYAUxJ56VZSKWhR4PeKZiwnH3or7m5aePR8HScmeIDyje",
- "jHuwxgENMZIJleZ26VRe8UlzR8EL9ze1fI3xM38Bt0fJa8EP5W0mA+aPTz9ekq/R0sciuiHZDY5J9vDH",
- "X7KFT9BaaciF6dtibkLd+MZ/H7RY+mAY2NoDAQOH1vmLsncg42UwnLIfI52qwrdrC2F7RH9npjJycpNU",
- "nqK+AVkk8JfiUXE5mgPXxVUnKreV6qIbTWm45+jcKM/GkdG5w0I7U5dHEaju0qkNDNc5+bbu4DZxUbdr",
- "mxpaPjmbKhYInhIRns586rpjSPq9pEA9KgHqbxCMTjjyY/h5UxTzy1h6MkrBNZIJr7cftSgPWkk7eQ0/",
- "zmcrkGCEwcx9f/X5hj/tXRogoAC54VElWO8S1UuISay1M3k0VZSxcEKyQt8tkZoQnc/zWgu7w1pT4cUr",
- "/poMm/+uCcH0IbyNAtfffVZdQVOtrA3YrE24Xb9TvMT7iPTK0t1Cqjxh32z5piq9ToT9+cHi3+Dpn54V",
- "j54+/rfFnx598SiHZ1989egR/+oZf/zV08fw5E9fPHsEj5dffrV4Ujx59mTx7MmzL7/4Kn/67PHi2Zdf",
- "/dsDx4ccyARoSKT5fPa/srNypbKz1+fZpQO2xQmvxPfg9gaflkuFtVAcUnM8ibDhopw9Dz/9j3DCTnK1",
- "aYcPv858Tu/Z2trKPD89vbm5OYm7nK4wQiuzqs7Xp2EerFDRkVdenzdeiWT8xR1tfODJDOBJ4Qy/vfnm",
- "4pKdvT4/aQlm9nz26OTRyWM3vqpA8krMns+e4k94eta476ee2GbPP3ycz07XwEsMaHZ/bMBqkYdPGnix",
- "8/83N3y1An2Cjqf00/WT0yBWnH7wkWof9307je2Kpx86AX3FgZ5oEzv9EIoi7W/dKYjj3RGiDhOh2Nfs",
- "dIEppKc2BRM1Hl8KPjbM6QcUl0d/P/VZWNMf8dlC5+E0RL2mW3aw9MFuHawHemxFEa0k5zZf19XpB/wP",
- "Uu9HYiclpCJgKbUpZ23zOROW8YXSWEbH5mvHQUL9DmGiljOkaToO54U7Bq7XC4IglEOjar3P3w79YnEg",
- "FkZCnuEORHukOzO1XBvtM1HJ0uZO6rRvb6a3j7Kv3n94PH/86OO/uJvH//nF048TvbVfNOOyi+Zamdjw",
- "PRa/QKcaPOlPHj0K7M0/HiLSPPUnOVrc4BHVLpI2qfHZGd76nhbG/SP9VvUGYg0yDiTp7w0/FF6Qoz87",
- "csV7NU2dfE04fD+fdMFCEA/O/fjTzX0uyVPI3Rx0w32cz774lKs/l47kecmwZVR1abj1P8srqW5kaOnE",
- "kXqz4XoXjrHpMAXmNxsvPb4yaGPQ4pqjFCiVjJJQyNXsPYYzpgKpRviNsfwW/ObC9fpvfvOp+A1u0n3w",
- "m+5A98xvnhx55v/4K/5/m8M+e/SnTwdBiAO9FBtQtf2jcvgLYrd34vBe4KQkm6d2K0/RI+X0Q0d89p8H",
- "4nP397Z73OJ6owoI8q5aLqn+6L7Ppx/o32gi2FagxQYkFQLzv1ICslMsQ7Ub/ryTefLH4To6yZdGfj79",
- "0Pmz+74w69oW6oYqSSSvTKybzEtf/w+Vyc3D1CoWBmizPbGffILKcocadFEA45g5X9W21RyQT52PyWls",
- "O24EZtZeib4SEidAJT3OQoUueeSxYCBXssD3cO969pD9qAoYXs94Af+jBr1rb2AP42ze4c+ewBNlJe98",
- "3Q3Z6cfjyB+NCWQJGxKH+1ib/t+nN1xYd4n7tEuI0WFnC7w89TnWe7+2aU0HXzBXa/RjHFiU/PWUd6m9",
- "+04PxXWTH/uP+NRX/4gdaRS8+sLnVqEXK8iQXBrV2Nv3btexJqCnpFbf8/z0FN2818rY09nH+YeeLij+",
- "+L7Z6FAEqNnwj+8//t8AAAD//5R90cnG6AAA",
+ "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",
+ "r0xVb/jt+9v/HwAA//9bWhkhW+sAAA==",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go b/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
index 6f12f9a396..db5e8206e5 100644
--- a/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
+++ b/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
@@ -724,276 +724,277 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "H4sIAAAAAAAC/+y9fXfbtpIw/lVwtHtOXlaU89burX+nZ39u0hdvkzQndnv3bpOnhciRhGsK4AVAW2qe",
+ "fPfnYACQIAlKlC3bSeu/EoskMBgMBvM+H0apWBaCA9dqdPhhVFBJl6BB4l80TUXJdcIy81cGKpWs0Ezw",
+ "0aF/RpSWjM9H4xEzvxZUL0bjEadLqN8x349HEv5VMgnZ6FDLEsYjlS5gSc3Ael2Yt6uRVslcJG6IIzvE",
+ "8YvRxw0PaJZJUKoL5U88XxPG07zMgGhJuaKpeaTIBdMLohdMEfcxYZwIDkTMiF40XiYzBnmmJn6R/ypB",
+ "roNVusn7l/SxBjGRIocunM/Fcso4eKigAqraEKIFyWCGLy2oJmYGA6t/UQuigMp0QWZCbgHVAhHCC7xc",
+ "jg5/HSngGUjcrRTYOf53JgH+gERTOQc9ej+OLW6mQSaaLSNLO3bYl6DKXCuC7+Ia5+wcODFfTcirUmky",
+ "BUI5efvdc/L06dOvzEKWVGvIHJH1rqqePVyT/Xx0OMqoBv+4S2s0nwtJeZZU77/97jnOf+IWOPQtqhTE",
+ "D8uReUKOX/QtwH8YISHGNcxxHxrUb76IHIr65ynMhISBe2Jf3uumhPPf6q6kVKeLQjCuI/tC8Cmxj6M8",
+ "LPh8Ew+rAGi8XxhMSTPor4+Sr95/eDx+/Ojjv/16lPyv+/OLpx8HLv95Ne4WDERfTEspgafrZC6B4mlZ",
+ "UN7Fx1tHD2ohyjwjC3qOm0+XyOrdt8R8a1nnOc1LQycsleIonwtFqCOjDGa0zDXxE5OS54ZNmdEctROm",
+ "SCHFOcsgGxvue7Fg6YKkVNkh8D1ywfLc0GCpIOujtfjqNhymjyFKDFyXwgcu6NNFRr2uLZiAFXKDJM2F",
+ "gkSLLdeTv3Eoz0h4odR3ldrtsiKnCyA4uXlgL1vEHTc0nedronFfM0IVocRfTWPCZmQtSnKBm5OzM/ze",
+ "rcZgbUkM0nBzGveoObx96OsgI4K8qRA5UI7I8+euizI+Y/NSgiIXC9ALd+dJUIXgCoiY/hNSbbb9v09+",
+ "ek2EJK9AKTqHNzQ9I8BTkUE2IcczwoUOSMPREuLQfNm3DgdX7JL/pxKGJpZqXtD0LH6j52zJIqt6RVds",
+ "WS4JL5dTkGZL/RWiBZGgS8n7ALIjbiHFJV11Jz2VJU9x/+tpG7KcoTamipyuEWFLuvr60diBowjNc1IA",
+ "zxifE73ivXKcmXs7eIkUJc8GiDna7GlwsaoCUjZjkJFqlA2QuGm2wcP4bvDUwlcAjh+kF5xqli3gcFhF",
+ "aMacbvOEFHQOAclMyM+OueFTLc6AV4ROpmt8VEg4Z6JU1Uc9MOLUmyVwLjQkhYQZi9DYiUOHYTD2HceB",
+ "l04GSgXXlHHIDHNGoIUGy6x6YQom3KzvdG/xKVXw5bO+O75+OnD3Z6K96xt3fNBu40uJPZKRq9M8dQc2",
+ "Llk1vh+gH4ZzKzZP7M+djWTzU3PbzFiON9E/zf55NJQKmUADEf5uUmzOqS4lHL7jD81fJCEnmvKMysz8",
+ "srQ/vSpzzU7Y3PyU259eijlLT9i8B5kVrFGFCz9b2n/MeHF2rFdRveKlEGdlES4obSiu0zU5ftG3yXbM",
+ "XQnzqNJ2Q8XjdOWVkV2/0KtqI3uA7MVdQc2LZ7CWYKCl6Qz/Wc2QnuhM/mH+KYrcfK2LWQy1ho7dlYzm",
+ "A2dWOCqKnKXUIPGte2yeGiYAVpGg9RsHeKEefghALKQoQGpmB6VFkeQipXmiNNU40r9LmI0OR/92UNtf",
+ "Duzn6iCY/KX56gQ/MiKrFYMSWhQ7jPHGiD5qA7MwDBofIZuwbA+FJsbtJhpSYoYF53BOuZ7UKkuDH1QH",
+ "+Fc3U41vK+1YfLdUsF6EE/viFJSVgO2L9xQJUE8QrQTRigLpPBfT6of7R0VRYxCfHxWFxQdKj8BQMIMV",
+ "U1o9wOXT+iSF8xy/mJDvw7FRFBc8X5vLwYoa5m6YuVvL3WKVbcmtoR7xniK4nUJOzNZ4NBgxfx8Uh2rF",
+ "QuRG6tlKK+blH9y7IZmZ3wd9/HmQWIjbfuJCRcthzuo4+Eug3NxvUU6XcJy5Z0KO2t9ejmzMKHGCuRSt",
+ "bNxPO+4GPFYovJC0sAC6J/YuZRyVNPuShfWK3HQgo4vCHJzhgNYQqkufta3nIQoJkkILhm9ykZ79QNVi",
+ "D2d+6sfqHj+chiyAZiDJgqrFZBSTMsLjVY825IiZF1HBJ9Ngqkm1xH0tb8vSMqppsDQHb1wssajH75Dp",
+ "gYzoLj/hf2hOzGNztg3rt8NOyCkyMGWPs3MyZEbbtwqCncm8gFYIQZZWwSdG694Jyuf15PF9GrRH31qb",
+ "gtsht4hqh05XLFP72iYcrG+vQgH1+IXV6DQsVURrq1ZFpaTr+NrtXEMQcCoKksM55G0QLMvC0SxCxGrv",
+ "fOEbsYrB9I1YdXiCWMFedsKMg3K1x+4W+F44yITcjnkcewjSzQKNLK+QPfBQBDKz1Nbqo6mQl2PHLT7L",
+ "SW2DJ9SMGtxG4xaS8NWySNzZjNjx7AutgWq352Yu2h4+hrEGFk40vQYsKDPqPrDQHGjfWBDLguWwB9Jf",
+ "RG/BKVXw9Ak5+eHoi8dPfnvyxZeGJAsp5pIuyXStQZH7TlklSq9zeNBdGaqLZa7jo3/5zFtum+PGxlGi",
+ "lCksadEdylqErUxoXyPmvS7WmmjGVVcADuKIYK42i3ZinR0GtBdMGZFzOd3LZvQhLKtnyYiDJIOtxLTr",
+ "8upp1uES5VqW+9DtQUoho1dXIYUWqciTc5CKiYh76Y17g7g3vLxftH+30JILqoiZG23hJUcJK0JZesWH",
+ "83079OmK17jZyPnteiOrc/MO2Zcm8r1pVZECZKJXnGQwLecN1XAmxZJQkuGHeEd/D9rKLWwJJ5oui59m",
+ "s/3ozgIHiuiwbAnKzETsG0ZqUJAKbkNDtqirbtQh6GkjxtssdT8ADiMna56i4XUfx7Zfk18yjl4gteZp",
+ "oNYbGHPI5g2yvLr63ocOO9U9FQHHoOMlPkbLzwvINf1OyNNa7PteirLYu5DXnnPocqhbjLMtZeZbb1Rg",
+ "fJ43w5HmBvZJbI23sqDn/vi6NSD0SJEv2XyhAz3rjRRitn8YY7PEAMUHVkvNzTddXfW1yAwz0aXagwhW",
+ "D1ZzOEO3IV+jU1FqQgkXGeDmlyounPUEsKDnHB3+OpT39MIqnlMw1JXS0qy2LAi6szv3Rf1hQlN7QhNE",
+ "jepx5lVeWPuWnc4GR+QSaLYmUwBOxNR5zJwvDxdJ0RevvXjjRMMIv2jAVUiRglKQJc5StxU0/569OvQG",
+ "PCHgCHA1C1GCzKi8MrBn51vhPIN1gpEjitz/8Rf14Bbg1ULTfAti8Z0Yeiu7h3OLdqEeNv0mgmtPHpId",
+ "lUD8vUK0QGk2Bw19KNwJJ73714aos4tXR8s5SHRQXivF+0muRkAVqNdM71eFtix64iGdemskPLNhnHLh",
+ "BavYYDlVOtnGls1LDR3crCDghDFOjAP3CF4vqdLWqc54hrZAe53gPFYIM1P0A9yrhpiRf/EaSHfs1NyD",
+ "XJWqUkdUWRRCashia+Cw2jDXa1hVc4lZMHal82hBSgXbRu7DUjC+Q5ZdiUUQ1ZXvyUWddBeHHhpzz6+j",
+ "qGwAUSNiEyAn/q0Au2FMWA8gTNWItoTDVItyqkC08UhpURSGW+ik5NV3fWg6sW8f6Z/rd7vERXV9b2cC",
+ "FIaiufcd5BcWszYacEEVcXCQJT0zsgeaQaz3vwuzOYyJYjyFZBPlo4pn3gqPwNZDWhZzSTNIMsjpujvo",
+ "z/YxsY83DYA7Xqu7QkNiw7rim15Tso+i2TC0wPFUTHgk+ISk5ggaVaAmEPf1lpEzwLFjzMnR0b1qKJwr",
+ "ukV+PFy23erIiHgbngttdtzRA4LsOPoQgHvwUA19eVTgx0mte7an+AcoN0ElR+w+yRpU3xLq8XdaQI8N",
+ "1UXMB+elxd5bHDjKNnvZ2BY+0ndkewy6b6jULGUF6jo/wnrvql97gqjflWSgKcshI8EDqwYW4ffEBiS1",
+ "x7ycKjjI9tYFv2N8iywnZwpFnibwZ7BGnfuNjXQNTB370GUjo5r7iXKCgPr4OSOCh6/AiqY6XxtBTS9g",
+ "TS5AAlHldMm0thHsTVVXiyIJB4j6NTbM6LyaUZ/iRjfrCQ4VLK+7FeOR1Qk2w3faUgwa6HC6QCFEPsBC",
+ "1kFGFIJBATCkEGbXmQum9+HUnpIaQDqmjS7t6vq/pxpoxhWQf4iSpJSjylVqqGQaIVFQQAHSzGBEsGpO",
+ "F+pSYwhyWILVJPHJw4fthT986PacKTKDC5+BYl5so+PhQ7TjvBFKNw7XHuyh5rgdR64PdPiYi89pIW2e",
+ "sj3Uwo08ZCfftAavvETmTCnlCNcs/8oMoHUyV0PWHtLIsDATHHeQL6fhsu+uG/f9hC3LnOp9eK3gnOaJ",
+ "OAcpWQZbObmbmAn+7TnNf6o+w+waSA2NppCkmBMycCw4Nd/YNJJtumEdXseWS8gY1ZCvSSEhBZv2YEQ+",
+ "VcE4ITYgMl1QPkdJX4py7iLy7DjIqUtlbSqy5J0hotKQXvEErdMxzu2isH3mi5GDgBpdrG3atprHBa3m",
+ "c8lOQ67UAHltU3/UuzUe9aqqBqnntapqkdNM3xnAxRuCWoCfeuKBPhBEnRFauvgKt8WcArO512Nrr4eO",
+ "QdmdOIgRrB/2hQkaPTlf70FasQMRCYUEhXdLaF9S9qmYhal67vJRa6Vh2TXB209/6zl+b3sVPcFzxiFZ",
+ "Cg7raHY64/AKH0aPE95vPR+jpNH3bVt5aMDfAqs5zxBqvCp+cbfbJ7TtalLfCbkvX6YdcLBcPsB1uNVP",
+ "7qa8rIOT5nnEJ+gSedoMQI2rwgFMEqqUSBkKW8eZGtuD5tyILuunif43VXjyHs5ee9yW8yvMEUXjLuQF",
+ "oSTNGZp+BVdalql+xykal4KlRqKWvBbdb2587l+J2zcj5kc31DtOMWKtMjlFIy1mELGvfAfgrY6qnM9B",
+ "6ZaSMgN4x91bjJOSM41zLc1xSex5KUBi6NDEvrmkazIzNKEF+QOkINNSN8V2zFNTmuW588SZaYiYveNU",
+ "kxyo0uQV46crHM576/2R5aAvhDyrsBC/3efAQTGVxKOrvrdPMRLYLX/hooKxroB97KMs68TZkVlmI1f+",
+ "/9z/r8Nfj5L/pckfj5Kv/uPg/YdnHx887Pz45OPXX//f5k9PP3794L/+PbZTHvZYFpWD/PiFU2mPX6De",
+ "UjtvOrDfmOF+yXgSJbIwDKNFW+Q+Zgw7AnrQtGrpBbzjesUNIZ3TnGWGt1yGHNo3TOcs2tPRoprGRrSs",
+ "WH6tO2oDV+AyJMJkWqzx0lJUNyAxnq+I3kSXgojnZVZyu5Ve+rbpOD4wTMzGVU6qLVdzSDBhcUF9VKP7",
+ "88kXX47GdaJh9Xw0Hrmn7yOUzLJVLJ00g1VMyXMHBA/GPUUKulag49wDYY/GwNmgjHDYJSynINWCFTfP",
+ "KZRm0ziH80kOzli04sfcRrSb84O+ybVzeYjZzcOtJUAGhV7Eylg0BDV8q95NgFa8SCHFOfAxYROYtI01",
+ "mdEXXTReDnSG5RRQ+xRDtKHqHFhC81QRYD1cyCCLSIx+WvH87vJXe1eH3MAxuNpzVo5I/7cW5N73356S",
+ "A8cw1T2b2WyHDnJRI6q0S7dqRBIZbmaL91gh7x1/x1/AjHFmnh++4xnV9GBKFUvVQalAfkNzylOYzAU5",
+ "9BlcL6im73hH0uqtrxXkzpGinOYsJWehQlKTp62Z0h3h3btfaT4X79697wRVdNUHN1WUv9gJEiMIi1In",
+ "ruJDIuGCypjTSlUZ/ziyLemyaVYrZIvSWjZ9RQk3fpzn0aJQ7czf7vKLIjfLD8hQubxWs2VEaSG9LGIE",
+ "FAsN7u9r4S4GSS+8XaVUoMjvS1r8yrh+T5J35aNHT4E0UmF/d1e+ocl1AYOtK72ZyW2jCi7cqpWw0pIm",
+ "BZ3HfGPv3v2qgRa4+ygvL9HGkecEP2uk4PqIehyqXoDHR/8GWDh2TifExZ3Yr3x1r/gS8BFuIb5jxI3a",
+ "Y3/Z/QqSci+9Xa3E3s4ulXqRmLMdXZUyJO53pir6MzdClg+jUGyO2qqrjzQFki4gPXOFa2BZ6PW48bmP",
+ "1HGCpmcdTNmSRjalDotqoGdhCqQsMupEccrX7eoGCrT28cBv4QzWp6KuybFLOYNmdr3qO6hIqYF0aYg1",
+ "PLZujPbmu3AwVOyLwiepY7aiJ4vDii78N/0H2Yq8ezjEMaJoZH/3IYLKCCIs8feg4BILNeNdifRjyzNa",
+ "xtTefJHyRp73E/dKrTy5yK1wNWh1t8+XgPXRxIUiU2rkduFKe9kM8oCLlYrOoUdCDp07A/O0Gw4hHGTb",
+ "vRe96cSsfaF17psoyPblxKw5SilgnhhSQWWmFa/nZ7L+Q+eZwIqdDmHTHMWkKrDRMh0qG042W4KwD7Q4",
+ "AYPktcDhwWhiJJRsFlT5qmNYnM2f5UEywDVWRNhUB+c4CDULKrBVVW48z22f04526arh+BI4vu5NqFoO",
+ "qGFjJHyMbo9th+AoAGWQw9wu3L7sCaWuzlBvkIHjp9ksZxxIEotaC8ygwTXj5gAjHz8kxFrgyeARYmQc",
+ "gI1+cRyYvBbh2eTzXYDkrroE9WOjRz34G+J5XzaO24g8ojAsnPV4tVLPAagLdazur1bALQ5DGB8Tw+bO",
+ "aW7YnNP46kE65VhQbG0VX3GRGQ/6xNkNDhB7sey0JnsVXWY1oczkgY4LdBsgnopVYhM/oxLvdDU19B4N",
+ "bcc01NjBtIVv7ikyFSuM9sGrxYZSb4GlHw4PRqDhr5hCesXv+m5zC8ymaTdLUzEqVEgyzpxXkUufODFk",
+ "6h4Jpo9c7ge1bC4FQMvYUReGdsrvViW1KZ50L/P6VhvXNdp81lDs+Pcdoegu9eCva4Wpqs+8aUssUTtF",
+ "M2ilWXgnECFjRG/YRNdJ03UFKcgBlYKkIUQlZzHPqdFtAG+cE/9ZYLzA8j6Urx8EkVAS5kxpqI3oPk7i",
+ "NsyTFKsKCjHrX50u5Mys760Q1TVl3Yj4YWOZN74CDCWeMal0gh6I6BLMS98pVKq/M6/GZaVmrJWtwcuy",
+ "OG/Aac9gnWQsL+P06ub98YWZ9nXFElU5RX7LuA1YmWLN6GgE5oapbZDuxgW/tAt+Sfe23mGnwbxqJpaG",
+ "XJpzfCbnosV5N7GDCAHGiKO7a70o3cAgg8zZLncM5KbAxz/ZZH3tHKbMj701asfn7/bdUXak6FoCg8HG",
+ "VTB0ExmxhOmg5HI3pbXnDNCiYNmqZQu1o/ZqzHQng4cvVNfCAu6uG2wLBlCkfQszkBA1IVSPbHR0JS6F",
+ "hQoxs7tRCiey6b3G/6YpzV+UVeeIYKJLGMFcacn+Pa5jLxulF5tLifQu6M5aMq6/fNalyMrGb2AZshsn",
+ "cdP6iVE0mogP1C1bynzLJrAexT0kz4A9h1Mx5RtxdMm2yoHcRrmnQPMfYf2LeReXM/o4Hl3NkB2jfDfi",
+ "Fly/qQ5bFM8YKGENmw2/1I4op0UhxTnNE2fu72MUUpw7RoGve+/ADV88cco+/fbo5RsH/sfxKM2ByqQS",
+ "3HpXhe8Vn82qbDHKngPiC/0bDdxrUFawDza/qqAXugguFuAqpge6Qae0a+3+CY6icxnM4vFaW3mf81TZ",
+ "JW7wWEFROaxqY6r1VzV9VPScstxbMT20PbFVuLhh9YGjXCEc4Mq+rsBlmeyV3XROd/x01NS1hSeFc22o",
+ "6b60bQsUEbwd0IAR6OvCxUAsKRZmtTaqLnPi5RLtOonKWRq3ePOpMsTBrSfTvEzw5R7VwIxYsh7HOC9Z",
+ "MJZ5bUiloRaQwRxRZKposaMad1PhBIuSs3+VQFgGXJtHEk9l66B60QZH7VynRpLrzuUGtv6SevirSHxh",
+ "UeL2jYdAbBb3Qr9pB9wXlQHDL7SyD9YS367hF+GMnStxQ+iEow9HzTaUdNH0fw6Twoa0r/KSn6uO3DNH",
+ "tB0VU8lMij8grnWjsSKSPubLMDOMOfoDQuEybMLSYDGVra3uqlXPvm27h0v2fRt/ZUneL7qq/HwZMT5+",
+ "qnfbyMuI7Cpe5MwhuU+EDA2vzbicHtaCxyvwRGPRXe+UodyeJ5s71QjvjJ/KMJD6wI5fn0oHcyf4PKcX",
+ "UxqrSGwkOQNTsL0N95EWxH/sN0BVCUZ2dhKET1TvMlt/oQBZp892azldUiqz0w6Wx2rxCykqFLzG1uWd",
+ "KxEZpuQXlNtOTuY7y6/c1wqsvdd8dSEkVk9RcU9XBilb0jwunmVp16uRsTmzTYpKBUEXHDeQbQBnqch1",
+ "EqrS5hxqjmfk0ThoxeV2I2PnTLFpDvjGY/vGlCq8Livba/WJWR5wvVD4+pMBry9KnknI9EJZxCpBKskZ",
+ "dcjKXzsFfQHAySN87/FX5D56qhU7hwcGi04IGh0+/gr9DPaPR7Fb1jWZ2sSyM+TZf3c8O07H6Kq3Yxgm",
+ "6UadRAtN2C6T/bfDhtNkPx1ylvBNd6FsP0tLyukc4sFRyy0w2W9xN9F23MILz2yLNKWlWBOm4/ODpoY/",
+ "9SRcGPZnwSCpWC6ZXjp/phJLQ091ixs7qR/O9ltz1ck9XP4hhgUU3iva0tRv1k9ghYjYqjF44zVdQhOt",
+ "Y0JtyZyc1QE7vmcCOfYVubBce1Wl3eLGzGWWjrIkxu/MSCEZ16i9lXqW/I2kCyppatjfpA/cZPrls0jZ",
+ "82ZlYL4b4DeOdwkK5Hkc9bKH7L3M4r4l97ngydJwlOxBneAUnMre+IW4p7rPXb556KGSrxkl6SW3skFu",
+ "NODUVyI8vmHAK5JitZ6d6HHnld04ZZYyTh60NDv089uXTspYChkrs1kfdydxSNCSwTmGq8Y3yYx5xb2Q",
+ "+aBduAr0t+ts8yJnIJb5sxxVBM6Xv3jbd2+aihHhf3nlWqp2ZO+e0BobO1N9c8PpN9EoPCuhYeQqwVWT",
+ "3x//TqTRJFEaffgQgX74cOyEud+fNB9bJvXwYbz4VNRwZH6tsXAVvQ6/je3hNyJixvGdHioHoEuxiZjR",
+ "+liteWCO8tQNNSbNqvo3fxfuJ3gz7qCPn4J3737FJx4P+EcbEbd85HED6xAku5IeQgm6ikRJJqueB6FB",
+ "lHwjVkMJp8VJPfF8AijqQclAIxOupNM1Jeoy2+qzDWjUjDqFXBhVKSwIHVqlPx88m8WPN2C7ZHn2S10e",
+ "oHWRSMrTRTSwYmo+/K3ublot0bLKaI3ZBeUc8uhwVkP7zWtyEV3zn2LoPEvGB77b7tpjl9taXA14E0wP",
+ "lJ/QoJfp3EwQYrWZeV1l9uRzkRGcpy5oWjPHbvuroCfHv0pQOnY08IGNLkaXjWG+tiUEAZ6hDWdCvscc",
+ "SANLo1od2k58OaFmaY2yyAXNxljm6PTbo5fEzmq/sT36bEuKOZoOmquI2nqHlxqp2u3Fc+iGj7M5qces",
+ "Wumk6iARq1Jg3qh7XLCW+xKNCiF2JuRF0IrcFjQwQxCsciWXkAUNK6xGgTRh/qM1TRdoKGlcZP0kP7yX",
+ "iqdKFTR0rhozVgWM8dwZuF07FdtNZUyEXoC8YMr2rYdzaBZGqKqEOEOdL5TQXJ4sObeUMtlBpqjKFe+K",
+ "dg+cFUi8hzMKWQvxO6rJthXRrq1lTvCraD3Fdp+aTidnm2ZfNdx75XtxUy44S7GaYUwgcg3uh/hMBhR+",
+ "jDs71Mid0MjhinbHqeK1HRZ7++V4RugQ1/U/Bk/NplrqsH9q7KS+oJrMQSvH2SAb+yZPzjrPuAJXkNoQ",
+ "UcgnhWyEVFRxZN2OxpU3d0cywvzMHnPLd+bZa2eMw8SlM8ZR7XZoc2K2tZ9j/21tdHWmyVyAcutpFqlQ",
+ "v5pvJlivIYPV+4nv141j2IgEs2wbftMd6sgH47jgF/Puc/Ouq6JX/dxIhbGTHhWFm7S/BVi87+GK9yI4",
+ "IgIl3qsdILcaPxxtA7ltjKLD+9QQGpxjDA4UeA93CKNqh9XqPWlUBEtR+AaxscTRUjqMR8B4yTjU3eQj",
+ "F0QavRJwY/C89nynUkm1FQEH8bRToLk1X0QYmtLOIXjVodo1BA1KcI1+jv5trDt59TCO6oVacKN8XTWx",
+ "N9QdCBPPaV5FoUX6cqFU5YSoDFPbWp26YozDMG7fC7B5AWxp/zmuP8eCmrveRH3VCqZlNged0CyL1Qf/",
+ "Bp8SfEqyEiUHWEFaVnWki4KkWJyrWa2sS21uolRwVS43zOVfuOJ0Qeu7CDWE7ff8DmM25HSN/+7SmLWK",
+ "P9s5Ht0Hm2W7lejrxtfHpF5D04li82Q4JvBOuTo66qkvR+j193ul9FzMm4DchpG0h8uFexTjb9+aiyMs",
+ "4dOpDG6vlqrCDsYbC9/BGdXGqjZEkyvhVdYpFY4u2Koh6mYzRH9r0zFefj05IKHJ296v1gzclwmS9iYu",
+ "Ue1SqDUlG1lQb1qqDVxsGdG7/oy+YEUbq7g/47Nb60aE+ijYLkA/+hB7UlDmAlZqZtHFrEuN6iarDQnT",
+ "rze4vQiXcNRrH/3xvC85yFfsxOft1odn4OqqFBLOmSh9KIgPyPQqof210UiwSs+Krr9r5sapbtf43Gsq",
+ "P3UtaOwynU7+4y82fJcA13L9CRjOO5veaarYlXateap+hVTdCwZ1M2jcikOq2cYKpzrZsNHWcUtTyg5Z",
+ "vRgiDnSbTI5Hx9lOF2as+O7IjhI7dvGWkf21Cet6hHjECqFY3UQk1ktyYOTzKbaDDGordsfyEXHnkGrs",
+ "HFNH+kiAXSotmsmC7tR3NQp71OkqQNyVJtxUj7DbLmbLHd9JGQ7S3m2rjcnw6ntHVTwn8mksmT8H7hpE",
+ "N9PPBifBzGaQana+JUX77wvgQfrv2NtlEJZZkLHNqqQKrPC1u9WxBmhTBvVGeIJKu1cGpy8l8AzW9xRp",
+ "UEO098fYX7WXKe6EGEDukBgSESoWL2UNyS6EhamKMhALPj7Rfg51mczetoFBwYFLzuVJ0lwcdRGCDVPG",
+ "+5YNmst8ulNpDswP6Mvi7rY96tc/XmCXKVW19PXFoUItnRx3S+heuOJSmFBf+U58mSlQ/jdfPcPOkrMz",
+ "CBsboqfqgsrMvxE1vXirTrLhPuqkXvuWPW2gZ9XMrI4m7/qqI0UZMTEjzYURI5K+7JZmAHcV/XRP2TA1",
+ "2yMEQ9MNXDOQrgEsyr+5UJBo4aPPN8GxCRU2Fu9SSFC9hZAtcL3lyd7W9dewIDzFcmTUheCFCyQSltRA",
+ "J4Mqaf1zbkL2c/vc5zP6guBbLUwVvW7vTOPzCJjqIDGk+hlxt+X2PMnLGJsY5yAT73lql0zjIJvekEKK",
+ "rEztBR0ejMogN7gg4QZWErXTpN1VtnSEINn8DNYHVgnyLX38DoZAW8nJgh6U2mlt8l7NbyoG93wv4N2m",
+ "5Wo8KoTIkx5nx3G3zlub4s9YegYZMTeFj7ftabNG7qONvfJmXyzWvq5ZUQCH7MGEkCNuMxy8Y7vZaKA1",
+ "Ob+nN82/wlmz0pZedEa1yTseDxXHoojyitzMD7OZhykwrO6KU9lBtlQRW/XUmJP0ItJ0cDJUK++6mtuN",
+ "4GqislDEZJIT67F6jgc9Zji6kEyDC2ywl7jZSOI8XUTlIhaSCRfDSlJU4btmR3LRc3GHkyFAGviQ1OUK",
+ "Cjd4FAFVk7ctgUJVjFDdH6uOE+qKR3kuLhI8RklVJTOmdJn3VPOa8IXB6+8MvU0hiDiiyokQa7KgGUmF",
+ "lJCGX8TToixUSyEhyQUGIMV8ozNtJMIl5kJwkos5EYVR9G21We9FinZv68xVck7xQocg3iOKApqmqH0K",
+ "4r4h1TdDp9xXczxbusEuOrFetp6QSFCuVIPDkH25C++G/nS79747XUSMZYg5TyA7N7hzRL5zX6oAzAGH",
+ "a7uh8CjWv6+5rnYnyb6+rlosWRpH9+cVItQb2BOj3hgqXGl4m6eLryFPCflY5RHG09NFM3A6zaP3gzt+",
+ "zjOGdG7+i2JDe1wyA8fPenhopBG9Zf1J2ntBtQBASG3ymC6lrScfXh9Vl0oxt8mm6NdrAzqQ4WD4xNVg",
+ "MyPsE6iPmwkl1sYychCq3XFdNn22fM+higZmbI6DsK2Np0OjIar2GQP5ZwBAf3xEA4ZBURK7gjHDVuEJ",
+ "jSD5uNJNx4GE7SLr202RmHLMMKXWNrUAYsYuJbjsbdvTuNVEsaB64WVV83rXgsQzWIHC1GrbCY4qa+/0",
+ "dlfXULmtBIgiyeEcGmEjLqW8xIucnUPYjNl+TDKAAr0Qbd04Fg8RXocthcmtPQk86kOwG9WgLGLtTpEt",
+ "6lFUmVvxxB4TNfQoGYjOWVbSBv7UFdrS9nek7UhgiZW07IEYMs3PdoS3foAj/31MGvCYeD+MD+3MguKo",
+ "28SAtsZH4YmKnnoeD48K6yVUhlWcLascMJbEa76hCnrB+w0RXZKvhdnh7aIDxH67ghQFg2b8z9VxQnAw",
+ "olq1UHqlWFnt8OUNWrdCwxtJuHe8mLSuABlsrc/U5ma/joouwp7V2AaHG8nRCJ5Yet7xf8f/xti50w5k",
+ "tChbCT9szf0CvOcAi0tWRlMnE7LqQvNxTmNXnautgrEgwnNJ10RI/IcLTf5V0pzN1nhCLfj+M6IW1JCQ",
+ "c1VYH5qLmzITbxZMxh4wrwUKP5VdNxs6ZjDc2owSAG2uQCKks3ov6RmE24DuQct5Um1YTt0hftzezi4W",
+ "3OJ9hvWSZhCkY2Cdp2YLIt/c1Hz9/9XZI+FUvjxLkdO0bimq6LJlmLO9TTxx6QUsN6cXdTVMTwJVv5Sa",
+ "aKVPK8xs9Q+LvyrVHyUR/M+UaUnlekOw41YPcixmF+3Z28Du9JFA4/belrFLY7M6Q3NDYtagpex7F4b6",
+ "qTtAo7PL18jZAr6tbebr6dwE/qMl2PqWMQT8TwXvPe03Qnhtp40bwHIj9TgCq7WiTcUqkTBT21yy1ow2",
+ "FasaYFX54RlPJVBlfdTHPzmVra4wxrhRIW0UVeUFqEbJYMZ4zSwZL5rtrh27xkJjfB0gLDRGIlp7jM59",
+ "UoIRw85p/tM5SMmyvo0zp8OW/w/r03oDrPs2ovxXd2p3AKZq7QczmqDOmAleMxd4xmYzkDbASWnKMyqz",
+ "8HXGSQrS3Pvkgq7V5S3dBlpZGvlii62bBtJMM882sHojaVtA8rVzo1zRDl0BSPdokB5gSMZIuogR2RpF",
+ "tOixG3dhiKd301WSiznmufQQoCvlhpZ+q6wIjjZPKw/tNo9if8DmabCKrTv4WuCsQ6bYfM5+QtShwvMz",
+ "Z3rjSbPWtHbikY0MswfB0z+f1+GpdnO69B/LFTu13bXDfLF2s0q/19ZNbeeDnuYbTSNozy6io84lGoYW",
+ "TzXcGdDwBcYy0qwOm6BuqzYEoIIK2nunLoCga/TpKMUWKWOXz7ejTcgaY/090AOe7XDlzlZz2sqpa8YZ",
+ "LmsEHsw4RIUoknRIVFIGORg2Z23CDtImjAO8nkW6SXHtMxL0cKWmAVrMkD/gsbCmEYzfrgwC43ZmQdMI",
+ "Uh08QomEtJRoJLyg6+11+3uKFp78cOTb1GO3+4zNQdWFL1t17+toEMbbtoubjf/oLE/HN8HnnFrEeQeO",
+ "D6WvNsXRr+VgVhri0ar/u1gXI0w11t+1W2/9UnuF49QBnZ/WdsUWufcdi6HgevbMRa3FF3DEnU4gZmQz",
+ "z6idDf64R/iFEagjjN9v7SUW2Gfj7M95vAw91kbOT4YKI0mce6O9arnXQXFRye1yrawGgdZN6IuQBwLQ",
+ "k6nTyLEIO93VteiktZeiZdU7odqX2KvaObU1pBQh8R9sAS9Mvanfq6IgHTi3XNTtVYWUYCnv+yihsfxt",
+ "2TxugbU3L9gipz5qDbbvqC1N09yXIFVLPa8yoHrkxU6iFLa1MzpDnkcSrKxGi2cqJBwjrMlzmt8818B+",
+ "h0eID8je9odVh1k2IZItKtXlavy8pIPmDjJq9jc1f4NJXX8Hs0fRe84N5Rx5ndsM7RE0twFwM5cga4Yk",
+ "FzimDdJ4/CWZuqrBhYSUqbaD0HpxXIoQJpWAZDOXoQUrvSWLZds6fxH6CmQ889588jow9As0qNQQ1kf0",
+ "lplKz8mNUnmM+jpkEcFfjEeFPZK2XBdnjVTxWhYPbjQhYc8p40Hxlx1Txrvdn4Yuz6ZFm0unVNBd5+Db",
+ "uoHbyEVdr21ovYPBJX6xa/WQMgXxcrzmc6yTsJe6vDtV5b2GCgkWR24MN2+MYn7pq5ln68L1lGds7UfJ",
+ "8q2u+0axzY/j0Rw4KKawnORvrgj2zd6lHgKbtdk9qhbWq6SaW8RE1tqYPJgqKKM5oIKm+yxSLxMzItJS",
+ "Mr3GBmjeDMN+i9Zy+L7KC3Z55ZVXwd19WpxB1UKvziIulb9dvxc0x/vIOju4uYVEPiHfruiyyJ2hjnx9",
+ "b/qf8PRvz7JHTx//5/Rvj754lMKzL7569Ih+9Yw+/urpY3jyty+ePYLHsy+/mj7Jnjx7Mn325NmXX3yV",
+ "Pn32ePrsy6/+857hQwZkC6iv7no4+p/kKJ+L5OjNcXJqgK1xQgv2I5i9QV15JrBBj0FqiicRlpTlo0P/",
+ "0//vT9gkFct6eP/ryBWaHy20LtThwcHFxcUk/ORgjmmDiRZlujjw82DblIa88ua4CpW1EQm4o1VihvVN",
+ "OVI4wmdvvz05JUdvjic1wYwOR48mjyaPzfiiAE4LNjocPcWf8PQscN8PHLGNDj98HI8OFkBzzLI3fyxB",
+ "S5b6RxJotnb/Vxd0Pgc5wWho+9P5kwMvVhx8cOmTH80MUU+ILbYaVNj0DSHqvtEuFRvNiTaKVoXtrhSx",
+ "DezHxLW99wF9PMOgC5uRaNhchbjjrO4tf1wzLd/TzbYcPvw1UtLCB1L7VmNhGE0QYPPfJz+9JkISp968",
+ "oelZFUROjme2dYwU5wxLK2ZBPU7z5cTT779KkOuavhznCxu4Ai+Xhom4aPSlmhfN6m61VBWz+nRw7Wc2",
+ "ZBEQdpXsXDMu9JsFkNRs2LDWR8lX7z988bePowGAYOa9Auw88zvN89/JBctzAiuMsmvFEoz7ojzGdfIs",
+ "flDv5BgtUtXT4PP6nWZR1N+54PB73zY4wKL7QPPcvCg4xPbgPfZGQWLBM/fk0SPPaJwYH0B34M7U0Ha9",
+ "vg6wtTVXo3iSuMRAXYZkH72t6mNJWtiz6J7YjCln7bcvTQzfebbHhTareF15ue3hOov+hmZEukwxXMrj",
+ "z3Ypx9xGt5mLxV6AH8ejLz7jvTnmhufQnOCbQeOx7kXzMz/j4oL7N43wUy6XVK5RtNEVL2zXGKdzhS42",
+ "ZJH2bAclWPh89P5j7613EIZxHXxo1E/IrnQn2siVRoX+LdfkPdXHObu9ke8fFUXdGB2fHxWF7WOInlpg",
+ "ePvBiimtHkzI9+HXyL2xC47tMVNKjMSpzSnm1qva+vlmgTVs91TYICh6aQfm4rv7+7bv76OmsaPRfzcG",
+ "TOMUbISp4/a+6gXaTRgI6iTsGuJZ1ch0okXi2mgMHMN3F95bj5gBgQJ2pvcxVXAro77DXQ/u+sSkAN5K",
+ "Yqob1NwMa/bl9qqbpHFlXCPj/syFvlc0N3QSLLdV1t42pb4TBv8ywmBVlmtupbOi2IN4iHHmBx98o/E9",
+ "iISuP/cAYTBUq4Nvg1jh+y128mBiG1qH71yOZ7g6XFvFPGz/fifgfQICni1ktk20qxvm355QF6ap7JI1",
+ "0pBGfPf7rR9/5lLcXxhZvWKbgXS7wHYJ9tkRxhyzvja2+qcUwhzS7sSvv7T4VVXHvJIAFgaoHris6cCN",
+ "dSXrXds6x3QliTUrpAacDQsLYP6wPcLjOqTbsBgbLuwChdXYa4boTrVKo92scUdv7IpY30OooH6zPn6x",
+ "Tbr6jOw8gxsdRm6B+N5cNy+Nuh3e3ozbYRhvevbo2c1BEO7Ca6HJd3iLXzOHvFaWFierXVnYJo50MLVN",
+ "tTdxJd5iS8go6mbZAY+qSkOPg+fmbRulcR8zFJutMR5MiG/hXVctcBm4c2EYlc8KonJuPzK8ziCD3PN/",
+ "HuL49ybkO8wf02qMwWZYnQhfZFwfPn7y9Jl7RdILG8vVfm/65bPDo6+/dq/VTfetntN5XWl5uIA8F+4D",
+ "d0d0xzUPDv/nH/87mUzubWWrYvXN+rXtpfep8NZxrGZZRQB9u/WZb1JMW/c9yLeh7kbc99+IVfQWEKu7",
+ "W+jWbiGD/T/F7TNtkpFTRCtLZqPa/h5vI3tMdrmPxr5dtuE71WUyIa+Fa3xS5lTaehZYb1KReUkl5Rog",
+ "m3hKxVJJyjZ6SHOGqdeSKJDnIBPFMqhLYlZFFwoJ5xgjX5VpbEKwndFjJO0ny+Rf0VWQdjytrmkt3JLR",
+ "7LmkK4KVvDVRoMe24tOKfP01eTSutZc8NwMkFWJizHVJV6MbtPpVxDa0jMkLhx0htwfo4thDLEi19FNV",
+ "kgt7qv+1OfdnK7lbcncbuyfOubPjp3bshHYE115kowXBCnYa656qsijydV3x0kh5XoSKszgzw1DjwCfs",
+ "I9hqmo4qoW303h3iOyPAlVhJm6B2ZBuYdaoOPqBeHvKMzrnFrLm/lrs08B1JsfTOI0FmoNOFS9htoT7C",
+ "nqRLGuznTUvG2dJA+Wh87VIN7mK3XmvY3TGjNk1+SAORIJcSHXggI0T8k+93bB6zmS3i7Kvj++pr6Jpy",
+ "dXCrlmpW+bZNFl08v8/rLWijRdx2KJ/Xk3cFMkTLPvyfdwjeDcEd5vitq0lgj5dbxJ8h4t+rkgl5Leq0",
+ "catB/Sldj9d5s1/3gl4LDtbHbiRfS4t37tRK7DCMwyLF1wux+kvVyfvSIsiBr7OzUQ75wby0RRYZcntj",
+ "zZ7P8Qr/IVqNqHHLmLVNthZDqEcbwpzNi7Z+e7O39C1qMbfCTz9B1eY2ONbNsBg8pJ7POLGA75fpYAke",
+ "S8wHVVvhPg4U79Q+mBtpUYWhRZurTyEXfK4+TVa0sWd+FC8RKql62Mcb1f/1zu5z16PBt+t19Z4U4ykQ",
+ "JZaAKoOR0bFvgA2WfPbobzcHoWZL35uTh7mrt8xdvnj09OamPwF5zlIgp7AshKSS5WvyM696MVyF22Eb",
+ "/qr+mrcGR5gD4+htatYFS8MiRpdngo3QtQ96xbKP25lhUEhxRz7IeMAHw8LUtCiAysszwO2uq3bvw+MX",
+ "YXRwozt8VVErAopB0Y4B8v8xGmh3wrR3MXOXX8ktoL76l2MTLnRXzMZVcIyRAsTskLzjD4laUF+c0v35",
+ "5IsveyxnZh5XtKdrO6sHMo/tMEMMaJ+1OXC/UnuF38Ob3u3dNnE8Ytkq2j8aVkE57mZjOSeW3VOkoOve",
+ "JvNFvBBlJQ2Ewy7BiPFqwYqbL3aoNJvGq7169afq8XnMv6m0YFuRzwjfxW0UuRuPtATIoNCLrbUv8a16",
+ "N8FVwWTKVZK3FQrHhE1gYgv41R02MmzlbjRqSnKgs6pVhhBDkicCPmMIzVNFgPVwIUN00ij9YMEQJMqb",
+ "V07rJAN70Xnkydadc6uCrr4tJTVBHRW4F2yaaLk9mRJ7nI8Dd3chhRapyG3sSlkUQurqdKvJIHEP+tx2",
+ "DWmvj3CvJMytWKa22tFO8a09GNKalK0+GzvaqUdTzJAWW9QlK/LVcw1haaeiIJ3GqAaEW+Vrd0a3GD9r",
+ "2dw+d5Ob7iW9PVvgUqrTRVkcfMD/YEXCj3WiFNZqVwd6xQ+wT9HBh40hTchScyObSFvmvaFHR9ssd816",
+ "+HldUv47ITut5reFLLWQNm5f+rbnEsY+Rdjj9WiTf2klbKO9srXhV3fBRUbsnNcqDzjoclPRbtCowKf2",
+ "2r5RERK+cxl/WguqjbgzxjNCg21s2Zqq3q5eB/jbZ7vo27AL37yf/IvP+Jy9FpocLwvbRB+yq0UbkjaH",
+ "87fHxut2N8HAXf3dkMTunR/e+D6QupJFtl7wO+g9QekI8NNRibUczF19PerO3U3+ad/kz32J9AYZ3t3L",
+ "n8+9LH34990V/OlfwU8/29Vco+N44JXsb6JLX8O1Jr7jhdwRBpwNq2U42ORXRtW7vUr1nZC+Hc/dLf6Z",
+ "OkXtTg5OshxiodlmiXVT7iPU/5OCfpidIc8jloa+gzq2vcn0AhgWyRIpw34Hx5ka20PsjBPuFN8JPp+0",
+ "4BPs9Z3cc2d6+MxMDz1SjtP683yIoLGrAHS+FBl4x6qYzVxRyj7pp9kry5Cn0nRZEPtlVMqxTli2hBPz",
+ "5k92ir1esTXYLbGoBZ5BloJU8EwNiOJwo172HkJHUz8AN+7ZrHbAw+LKVUwuTbJvg5pXHUogbeQr7HHm",
+ "i3M6ZGRwTpa+W/8Vyfbgg/0XzWmFUJHVnHgC7mzMfbctttqoHbcBIHmDQqjr6O++EjPyyBYdLTlmFtbN",
+ "TCnPiJZrI6j6GksSaE7SRkZRBUf35Jz0npytqkBndT1riusCoj6h+4xgaGVz/njjB+A55Y7kuwjSglDC",
+ "YU41Owfv8p/cVQC59G3m6m9sYIBjQrPMnsZ6E+Ac5JqocqqMrMObgeH3VPO87MAwYFWAZOaKpnntgLdq",
+ "woEt77EpjujEvnHFS6vFi2xREdmMWvQ3qys5ImbkFUulOMrnQvk4VLVWGpadVqHu0996ikR7Q0I3ZlXw",
+ "nHFIloLHGlj+hE9f4cPY11gipe/jU/Ow79vWfduEvwVWc54hd/JV8fuJnP4rBbq0ViuhENJot1PbVNvS",
+ "/45HyR+aNU+7J2nN08Cp5R4GA4XtLhs/H3xo/OmK+7g31aLUmbgIvkXN3gYpDqnrETTWv4QlrdWgXl2v",
+ "Le06fUgBHmInpnoaaVVYP+zvVvgXzWdzLpeQSDDUPBXnIFVLPbtLavtTJbUN3vedeKxtzbuNo5VqvxLJ",
+ "a5GBHbfZGTtWT56LDFwH4a4gUgU7xhOB/K1Uv9dKzUhpOV9oUhZEi1gSSP1hQlPLZBOr3sQnDCo4WiUI",
+ "p1vQcyA0x77MZArAiZiaRdf3Iy6SKqyh6TNJXEhnVBQK4CqkSEEpyBJfP38baFVfZgxA1xvwhIAjwNUs",
+ "RAkyo/LKwJ6db4XzDNYJqriK3P/xF6Mw3zi8VhTcjFhbuS+C3qo6kJP2ulAPm34TwbUnD8mOSiBeNMDE",
+ "N7EscnCpbxEU7oST3v1rQ9TZxaujBXPD2DVTvJ/kagRUgXrN9H5VaMsiMfd3F8Tn9ukpW6IkxikX3q4Y",
+ "GyynSifb2LJ5KVyLMisIOGGME+PAPQrnS6r0W5cFnWHFLHud4DxWxjZT9ANcdeKPjfyLfRgbOzX3IVel",
+ "Im4En9kEWWwNHFYb5noNq2ouTEP3Y1epU9bCt23kPiwF4ztkBU0ECNWBN98MF1kc2h+pM1B0UdkAokbE",
+ "JkBO/FsBdkM3fg8gTNWItoSDRZFDypkKkQPlNgNVFIXhFjopefVdH5pO7NtH+uf63S5xUV3f25kAFaa1",
+ "OcgvLGYVGmgXVBEHB1nSM5f5NndN4bowm8OYYMWKZBPlo8nWvBUega2HtCzmkmaQZJDTiCnlZ/uY2Meb",
+ "BsAd9+SZnAsNyRRmQkJ802tKlr0mompogeOpmPBI8AlJzRE0ynNNIO7rLSNngGPHmJOjo3vVUDhXdIv8",
+ "eLhsu9U9ZikzhtlxRw8IsuPoQwDuwUM19OVRgR8ntfmgPcU/QLkJKjli90nWoPqWUI+/0wLa5rzwAmvc",
+ "FC323uLAUbbZy8a28JG+IxszIH6Wxv527NI1ps41DaiBAji5jHJ7cEGZTmZCWkE6oTMNcmtA/N8p8+5w",
+ "n5QrXC0VgiO4e9ONg0w+bM3juIgFgbjrwpDIhJwuQIK5wyh5TJaMl9o+EaUe20qiEmi6MEJ7aFm1I2Fz",
+ "RdduUMKcyizHxnuz6t4UEi8jplsXPAIdyTJsavxm3d8JOag+cbMKF2WalFyzPOjRUOntn5718s4icWeR",
+ "uLNI3Fkk7iwSdxaJO4vEnUXiziJxZ5G4s0jcWST+uhaJ2yp+lHiJw9dh5IIn7RDJuwjJP1WB3uqq8gYS",
+ "tE5cUKZdx2Ffe6DfbrGDIUgDzREHLIf+mG0bSnr67dFLokQpUyCpgZBxUuTUqAaw0lX/y2ZnZd/z3TbR",
+ "tU2bqYKnT8jJD0e+jujC1btsvnv/yDZ4I0qvc3jgOswAz6wk6lvNADdId51mqL8SfJ9M1zWU5Rjvrsi3",
+ "+PYLOIdcFCBtiUKiZRlpNH8KNH/ucLPF4PN3M7kLoP3djPb7uGH0cmhb0sKL+X6tVBFq8yjJiyCz8vcZ",
+ "zRX83pdcacdb0iLWqrK6+KwpCJnJNyJbt06I2bUD3MDm2airiTJO5TpS+6mb2NAmDS0Mu3KE1bVlfdx7",
+ "zdsu0XbJbBuFxaR1CSp6jjdRebTYa7VhnaFs+u2sRSejWOZou8LpqAJwULk/TH6we0Le2u9ut7gfQuSO",
+ "WM3MP5koxuabFdPAd40S4VjP55oh4BEfPb149seGsLMyBcK0Ir5s7vbrZTxaJWakOfDEMaBkKrJ10mBf",
+ "o8YtlDFFlYLldPtNFPJP15zdXT7myeZ76naukRfB4jbx5JBoVoljwD3cea1hMG+usIUjOvYcYPy6WXQf",
+ "Gw1BII4/xYxKLd63K9Orp1nfMb47xhecxpZEwLgrM95mIpNrZHxyLUvez/O+XUFaGuDCk3wfrfPokoOV",
+ "bjhZM5iW8zk2me/46MzSAMdjgt8SK7TLHcoFd6MgO3jVePiqqeft4brcJcgGv+/rLT7A7aB8jc6MZUH5",
+ "2rt8IVFsWeYWh7Y/534Zra0EHiscXdv++qzab7zJL7Dduqu2+btFC7mgitj9hYyUPHN5TJ2K1Ss+vHqJ",
+ "Hfp0xWs2vbFSiV1vZHVu3iFXhN/lZgK5IgXIRK+4PVCNw+T6EtiTO7lrrv3XuDZs+jn0MNhujf2aIezp",
+ "9pABX8PrI+ikVCfmNfor0WaSYOMZWjT6U1zClkv2zb0GlnSGb8aX1OYW5z+FvCCUpDlD76rgSssy1e84",
+ "Rf9NsLBJN/bEG6r7ed9z/0rchRjx8Lmh3nGKQUaVVyfKA2cQcWF8B+BZrCrnc1CGj4YENAN4x91bjJOS",
+ "Gy1MzMiSpVIkNmHWnC8ju0zsm0u6JjOsUyLIHyAFmZpbP9h1a0tWmuW5C3Yx0xAxe8epJjlQpckrZjiw",
+ "Gc4XSahCzkBfCHlWYSHegWcOHBRTSdww8719ik1u3PK9ARCNmfZx3ZziZrvbeNhZ1gv58QuMUcMayzlT",
+ "uo6P6MB+Y77xJeNJlMhOF0BcuFibtsh9rOzmCOhB03GkF/COm9tPC4Icn+rLkUPbA9Q5i/Z0tKimsREt",
+ "R5Ff6yD1by9chkSYzJ3b5U+UQhrQgfds4sbbqvmtvd/RxdK4coFn5mnPhWyfuqaIPS85BaJhJGuVrXFv",
+ "nDZA3ui/+PyLRe5fl/Ro3Js22R2wy66abe8Qb37Dx4Tmgs9ttUSjXQrcJ8aLUmMA+HUa8OCc5ok4BylZ",
+ "BmrgSpng357T/Kfqs4/jEawgTbSkKSTWojAUa6fmG0un2y7SoPnncgkZoxryNSkkpJDZumBMkVoRn9jK",
+ "CiRdUD7HO1eKcr6wr9lxLkBC1SfR6L7tIeJ1WVY8sTXiujAeEWvEDMvoAk0XkT4ueDMZZdtTQtZoETUQ",
+ "eY0KoH3a9XjUKyEbpJ7XMW8WOU3+MOD6b1zkAX7qifdRMvWOWu+o9daoNVaaEFE3a9kHLL7CbblmQ9J1",
+ "F+K8QbvUrVTpvSt1/2cvde85kCKUSNqQ+uM91qgiTJMLLEQ0BWIunhLt4a5xndOQMbctOOquYqVybe7S",
+ "BWXcVbGpMgkQDu26rmvf5vVaTImWmaEN0aAD0lIyvUY9gRbstzMw/39vBG0F8tyrEKXMR4ejhdbF4cFB",
+ "LlKaL4TSB6OP4/CZaj18X8H/wUv/hWTnRqP5+P7j/wsAAP//QChtBpaZAQA=",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/participating/private/routes.go b/daemon/algod/api/server/v2/generated/participating/private/routes.go
index 46da1c3e3d..64c46f9db0 100644
--- a/daemon/algod/api/server/v2/generated/participating/private/routes.go
+++ b/daemon/algod/api/server/v2/generated/participating/private/routes.go
@@ -158,203 +158,204 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
- "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",
- "3zXk8b65RzyZfHj34f8HAAD//w2Fuvhe8gAA",
+ "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",
+ "fNuQx7vmHvFk8v7t+/8fAAD//wbADiDz9AAA",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/participating/public/routes.go b/daemon/algod/api/server/v2/generated/participating/public/routes.go
index 1be6755019..4bee9c4983 100644
--- a/daemon/algod/api/server/v2/generated/participating/public/routes.go
+++ b/daemon/algod/api/server/v2/generated/participating/public/routes.go
@@ -177,212 +177,212 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
- "AA==",
+ "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",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/utils.go b/daemon/algod/api/server/v2/utils.go
index d1da2895d1..94f612045f 100644
--- a/daemon/algod/api/server/v2/utils.go
+++ b/daemon/algod/api/server/v2/utils.go
@@ -29,6 +29,7 @@ import (
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"
+ "github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/model"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
@@ -101,6 +102,14 @@ func addrOrNil(addr basics.Address) *string {
return &ret
}
+func digestOrNil(digest crypto.Digest) *[]byte {
+ if digest.IsZero() {
+ return nil
+ }
+ ret := digest.ToSlice()
+ return &ret
+}
+
// omitEmpty defines a handy impl for all comparable types to convert from default value to nil ptr
func omitEmpty[T comparable](val T) *T {
var defaultVal T
@@ -437,8 +446,11 @@ func convertTxnTrace(txnTrace *simulation.TransactionTrace) *model.SimulationTra
execTraceModel := model.SimulationTransactionExecTrace{
ApprovalProgramTrace: convertProgramTrace(txnTrace.ApprovalProgramTrace),
+ ApprovalProgramHash: digestOrNil(txnTrace.ApprovalProgramHash),
ClearStateProgramTrace: convertProgramTrace(txnTrace.ClearStateProgramTrace),
+ ClearStateProgramHash: digestOrNil(txnTrace.ClearStateProgramHash),
LogicSigTrace: convertProgramTrace(txnTrace.LogicSigTrace),
+ LogicSigHash: digestOrNil(txnTrace.LogicSigHash),
}
if len(txnTrace.InnerTraces) > 0 {
diff --git a/ledger/simulation/simulation_eval_test.go b/ledger/simulation/simulation_eval_test.go
index f888d0fad2..8445f264fd 100644
--- a/ledger/simulation/simulation_eval_test.go
+++ b/ledger/simulation/simulation_eval_test.go
@@ -1029,6 +1029,9 @@ func TestAppCallWithExtraBudgetReturningPC(t *testing.T) {
ApprovalProgram: expensiveAppSource,
ClearStateProgram: "#pragma version 6\nint 1",
})
+ op, err := logic.AssembleString(createTxn.ApprovalProgram.(string))
+ require.NoError(t, err)
+ approvalHash := crypto.Hash(op.Program)
// Expensive 700 repetition of int 1 and pop total cost 1404
expensiveTxn := env.TxnInfo.NewTxn(txntest.Txn{
Type: protocol.ApplicationCallTx,
@@ -1084,12 +1087,14 @@ func TestAppCallWithExtraBudgetReturningPC(t *testing.T) {
AppBudgetConsumed: 4,
Trace: &simulation.TransactionTrace{
ApprovalProgramTrace: firstTrace,
+ ApprovalProgramHash: approvalHash,
},
},
{
AppBudgetConsumed: 1404,
Trace: &simulation.TransactionTrace{
ApprovalProgramTrace: secondTrace,
+ ApprovalProgramHash: approvalHash,
},
},
},
@@ -1796,6 +1801,16 @@ func TestMaxDepthAppWithPCTrace(t *testing.T) {
ClearStateProgram: "#pragma version 8\nint 1",
})
+ op, err := logic.AssembleString(maxDepthTealApproval)
+ require.NoError(t, err)
+ approvalProgramBytes := op.Program
+ approvalDigest := crypto.Hash(approvalProgramBytes)
+
+ op, err = logic.AssembleString("#pragma version 8\nint 1")
+ require.NoError(t, err)
+ clearStateProgramBytes := op.Program
+ clearStateDigest := crypto.Hash(clearStateProgramBytes)
+
MaxDepth := 2
MinBalance := env.TxnInfo.CurrentProtocolParams().MinBalance
MinFee := env.TxnInfo.CurrentProtocolParams().MinTxnFee
@@ -2024,6 +2039,7 @@ func TestMaxDepthAppWithPCTrace(t *testing.T) {
AppBudgetConsumed: 7,
Trace: &simulation.TransactionTrace{
ApprovalProgramTrace: creationOpcodeTrace,
+ ApprovalProgramHash: approvalDigest,
},
},
{
@@ -2071,32 +2087,41 @@ func TestMaxDepthAppWithPCTrace(t *testing.T) {
AppBudgetConsumed: 378,
Trace: &simulation.TransactionTrace{
ApprovalProgramTrace: recursiveLongOpcodeTrace,
+ ApprovalProgramHash: approvalDigest,
InnerTraces: []simulation.TransactionTrace{
{
ApprovalProgramTrace: creationOpcodeTrace,
+ ApprovalProgramHash: approvalDigest,
},
{},
{
ApprovalProgramTrace: optInTrace,
+ ApprovalProgramHash: approvalDigest,
},
{
ClearStateProgramTrace: clearStateOpcodeTrace,
+ ClearStateProgramHash: clearStateDigest,
},
{
ApprovalProgramTrace: recursiveLongOpcodeTrace,
+ ApprovalProgramHash: approvalDigest,
InnerTraces: []simulation.TransactionTrace{
{
ApprovalProgramTrace: creationOpcodeTrace,
+ ApprovalProgramHash: approvalDigest,
},
{},
{
ApprovalProgramTrace: optInTrace,
+ ApprovalProgramHash: approvalDigest,
},
{
ClearStateProgramTrace: clearStateOpcodeTrace,
+ ClearStateProgramHash: clearStateDigest,
},
{
ApprovalProgramTrace: finalDepthTrace,
+ ApprovalProgramHash: approvalDigest,
},
},
},
@@ -2177,6 +2202,7 @@ func TestLogicSigPCandStackExposure(t *testing.T) {
`, 2) + `int 1`)
require.NoError(t, err)
program := logic.Program(op.Program)
+ logicHash := crypto.Hash(program)
lsigAddr := basics.Address(crypto.HashObj(&program))
simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
@@ -2196,6 +2222,10 @@ byte "hello"; log; int 1`,
ClearStateProgram: "#pragma version 8\n int 1",
})
+ op, err = logic.AssembleString(appCallTxn.ApprovalProgram.(string))
+ require.NoError(t, err)
+ approvalHash := crypto.Hash(op.Program)
+
txntest.Group(&payTxn, &appCallTxn)
signedPayTxn := payTxn.Txn().Sign(sender.Sk)
@@ -2252,6 +2282,7 @@ byte "hello"; log; int 1`,
StackAdded: goValuesToTealValues(1),
},
},
+ ApprovalProgramHash: approvalHash,
LogicSigTrace: []simulation.OpcodeTraceUnit{
{
PC: 1,
@@ -2287,6 +2318,7 @@ byte "hello"; log; int 1`,
StackAdded: goValuesToTealValues(1),
},
},
+ LogicSigHash: logicHash,
},
},
},
@@ -2307,8 +2339,9 @@ func TestFailingLogicSigPCandStack(t *testing.T) {
` + strings.Repeat(`byte "a"; keccak256; pop
`, 2) + `int 0; int 1; -`)
require.NoError(t, err)
- program := logic.Program(op.Program)
- lsigAddr := basics.Address(crypto.HashObj(&program))
+ logicSigProg := logic.Program(op.Program)
+ logicSigHash := crypto.Hash(logicSigProg)
+ lsigAddr := basics.Address(crypto.HashObj(&logicSigProg))
simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
sender := env.Accounts[0]
@@ -2331,7 +2364,7 @@ byte "hello"; log; int 1`,
signedPayTxn := payTxn.Txn().Sign(sender.Sk)
signedAppCallTxn := appCallTxn.SignedTxn()
- signedAppCallTxn.Lsig = transactions.LogicSig{Logic: program}
+ signedAppCallTxn.Lsig = transactions.LogicSig{Logic: logicSigProg}
keccakBytes := ":\xc2%\x16\x8d\xf5B\x12\xa2\\\x1c\x01\xfd5\xbe\xbf\xea@\x8f\xda\xc2\xe3\x1d\xddo\x80\xa4\xbb\xf9\xa5\xf1\xcb"
@@ -2408,6 +2441,7 @@ byte "hello"; log; int 1`,
StackPopCount: 2,
},
},
+ LogicSigHash: logicSigHash,
},
},
},
@@ -2426,8 +2460,9 @@ func TestFailingApp(t *testing.T) {
` + strings.Repeat(`byte "a"; keccak256; pop
`, 2) + `int 1`)
require.NoError(t, err)
- program := logic.Program(op.Program)
- lsigAddr := basics.Address(crypto.HashObj(&program))
+ logicSigProg := logic.Program(op.Program)
+ logicSigHash := crypto.Hash(logicSigProg)
+ lsigAddr := basics.Address(crypto.HashObj(&logicSigProg))
simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
sender := env.Accounts[0]
@@ -2446,11 +2481,15 @@ byte "hello"; log; int 0`,
ClearStateProgram: "#pragma version 8\n int 1",
})
+ approvalOp, err := logic.AssembleString(appCallTxn.ApprovalProgram.(string))
+ require.NoError(t, err)
+ approvalHash := crypto.Hash(approvalOp.Program)
+
txntest.Group(&payTxn, &appCallTxn)
signedPayTxn := payTxn.Txn().Sign(sender.Sk)
signedAppCallTxn := appCallTxn.SignedTxn()
- signedAppCallTxn.Lsig = transactions.LogicSig{Logic: program}
+ signedAppCallTxn.Lsig = transactions.LogicSig{Logic: logicSigProg}
return simulationTestCase{
input: simulation.Request{
@@ -2491,6 +2530,7 @@ byte "hello"; log; int 0`,
{PC: 8},
{PC: 9},
},
+ ApprovalProgramHash: approvalHash,
LogicSigTrace: []simulation.OpcodeTraceUnit{
{PC: 1},
{PC: 5},
@@ -2501,6 +2541,7 @@ byte "hello"; log; int 0`,
{PC: 10},
{PC: 11},
},
+ LogicSigHash: logicSigHash,
},
},
},
@@ -2564,6 +2605,10 @@ func TestFrameBuryDigStackTrace(t *testing.T) {
partitiontest.PartitionTest(t)
t.Parallel()
+ op, err := logic.AssembleString(FrameBuryDigProgram)
+ require.NoError(t, err)
+ hash := crypto.Hash(op.Program)
+
simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
sender := env.Accounts[0]
@@ -2650,6 +2695,7 @@ int 1`,
StackPopCount: 1,
},
},
+ ApprovalProgramHash: hash,
},
},
{
@@ -2886,6 +2932,7 @@ int 1`,
StackPopCount: 1,
},
},
+ ApprovalProgramHash: hash,
},
},
},
diff --git a/ledger/simulation/trace.go b/ledger/simulation/trace.go
index ab3ba732fa..c8d206736c 100644
--- a/ledger/simulation/trace.go
+++ b/ledger/simulation/trace.go
@@ -20,6 +20,7 @@ import (
"fmt"
"github.com/algorand/go-algorand/config"
+ "github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
@@ -241,10 +242,16 @@ type OpcodeTraceUnit struct {
type TransactionTrace struct {
// ApprovalProgramTrace stands for a slice of OpcodeTraceUnit over application call on approval program
ApprovalProgramTrace []OpcodeTraceUnit
+ // ApprovalProgramHash stands for the hash digest of approval program bytecode executed during simulation
+ ApprovalProgramHash crypto.Digest
// ClearStateProgramTrace stands for a slice of OpcodeTraceUnit over application call on clear-state program
ClearStateProgramTrace []OpcodeTraceUnit
+ // ClearStateProgramHash stands for the hash digest of clear state program bytecode executed during simulation
+ ClearStateProgramHash crypto.Digest
// LogicSigTrace contains the trace for a logicsig evaluation, if the transaction is approved by a logicsig.
LogicSigTrace []OpcodeTraceUnit
+ // LogicSigHash stands for the hash digest of logic sig bytecode executed during simulation
+ LogicSigHash crypto.Digest
// programTraceRef points to one of ApprovalProgramTrace, ClearStateProgramTrace, and LogicSigTrace during simulation.
programTraceRef *[]OpcodeTraceUnit
// InnerTraces contains the traces for inner transactions, if this transaction spawned any. This
diff --git a/ledger/simulation/tracer.go b/ledger/simulation/tracer.go
index 22406fed1e..e3fedcb47a 100644
--- a/ledger/simulation/tracer.go
+++ b/ledger/simulation/tracer.go
@@ -19,6 +19,7 @@ package simulation
import (
"fmt"
+ "github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/data/transactions"
"github.com/algorand/go-algorand/data/transactions/logic"
@@ -403,6 +404,20 @@ func (tracer *evalTracer) BeforeProgram(cx *logic.EvalContext) {
tracer.result.TxnGroups[0].Txns[groupIndex].Trace = &TransactionTrace{}
traceRef := tracer.result.TxnGroups[0].Txns[groupIndex].Trace
traceRef.programTraceRef = &traceRef.LogicSigTrace
+ traceRef.LogicSigHash = crypto.Hash(cx.GetProgram())
+ }
+ }
+
+ if cx.RunMode() == logic.ModeApp && tracer.result.ReturnTrace() {
+ txnTraceStackElem := tracer.execTraceStack[len(tracer.execTraceStack)-1]
+ currentTxn := cx.EvalParams.TxnGroup[groupIndex]
+ programHash := crypto.Hash(cx.GetProgram())
+
+ switch currentTxn.Txn.ApplicationCallTxnFields.OnCompletion {
+ case transactions.ClearStateOC:
+ txnTraceStackElem.ClearStateProgramHash = programHash
+ default:
+ txnTraceStackElem.ApprovalProgramHash = programHash
}
}
diff --git a/test/e2e-go/restAPI/restClient_test.go b/test/e2e-go/restAPI/restClient_test.go
index bc8218120f..4ca9b8d611 100644
--- a/test/e2e-go/restAPI/restClient_test.go
+++ b/test/e2e-go/restAPI/restClient_test.go
@@ -2242,6 +2242,7 @@ func TestMaxDepthAppWithPCandStackTrace(t *testing.T) {
ops, err := logic.AssembleString(maxDepthTealApproval)
a.NoError(err)
approval := ops.Program
+ approvalHash := crypto.Hash(approval)
ops, err = logic.AssembleString("#pragma version 8\nint 1")
a.NoError(err)
clearState := ops.Program
@@ -3019,15 +3020,26 @@ func TestMaxDepthAppWithPCandStackTrace(t *testing.T) {
expectedTraceSecondTxn := &model.SimulationTransactionExecTrace{
ApprovalProgramTrace: recursiveLongOpcodeTrace(futureAppID, 0),
+ ApprovalProgramHash: toPtr(approvalHash.ToSlice()),
InnerTrace: &[]model.SimulationTransactionExecTrace{
- {ApprovalProgramTrace: &creationOpcodeTrace},
+ {
+ ApprovalProgramTrace: &creationOpcodeTrace,
+ ApprovalProgramHash: toPtr(approvalHash.ToSlice()),
+ },
{},
{
ApprovalProgramTrace: recursiveLongOpcodeTrace(futureAppID+3, 1),
+ ApprovalProgramHash: toPtr(approvalHash.ToSlice()),
InnerTrace: &[]model.SimulationTransactionExecTrace{
- {ApprovalProgramTrace: &creationOpcodeTrace},
+ {
+ ApprovalProgramTrace: &creationOpcodeTrace,
+ ApprovalProgramHash: toPtr(approvalHash.ToSlice()),
+ },
{},
- {ApprovalProgramTrace: finalDepthTrace(futureAppID+6, 2)},
+ {
+ ApprovalProgramTrace: finalDepthTrace(futureAppID+6, 2),
+ ApprovalProgramHash: toPtr(approvalHash.ToSlice()),
+ },
},
},
},
@@ -3079,6 +3091,7 @@ func TestSimulateScratchSlotChange(t *testing.T) {
int 1`)
a.NoError(err)
approval := ops.Program
+ approvalHash := crypto.Hash(approval)
ops, err = logic.AssembleString("#pragma version 8\nint 1")
a.NoError(err)
clearState := ops.Program
@@ -3204,6 +3217,7 @@ func TestSimulateScratchSlotChange(t *testing.T) {
},
{Pc: 16},
},
+ ApprovalProgramHash: toPtr(approvalHash.ToSlice()),
}
a.Equal(expectedTraceSecondTxn, resp.TxnGroups[0].Txns[1].TransactionTrace)
}
From 2b323c3b5451b3bf3c7c3e8dd3fee1728936834e Mon Sep 17 00:00:00 2001
From: Hang Su <87964331+ahangsu@users.noreply.github.com>
Date: Fri, 18 Aug 2023 09:55:52 -0400
Subject: [PATCH 2/8] Simulate: Add State Change to Exec Trace (#5659)
---
cmd/goal/clerk.go | 4 +
daemon/algod/api/algod.oas2.json | 42 +
daemon/algod/api/algod.oas3.yml | 44 +
daemon/algod/api/server/v2/account.go | 6 +-
.../api/server/v2/generated/data/routes.go | 393 ++---
.../v2/generated/experimental/routes.go | 394 ++---
.../api/server/v2/generated/model/types.go | 24 +
.../nonparticipating/private/routes.go | 395 ++---
.../nonparticipating/public/routes.go | 546 +++----
.../generated/participating/private/routes.go | 400 ++---
.../generated/participating/public/routes.go | 416 ++---
daemon/algod/api/server/v2/utils.go | 134 +-
data/transactions/logic/opcodeExplain.go | 274 ++++
data/transactions/logic/opcodes.go | 146 +-
ledger/simulation/simulation_eval_test.go | 1413 +++++++++++++++++
ledger/simulation/trace.go | 37 +
ledger/simulation/tracer.go | 90 +-
test/e2e-go/restAPI/restClient_test.go | 310 +++-
18 files changed, 3557 insertions(+), 1511 deletions(-)
create mode 100644 data/transactions/logic/opcodeExplain.go
diff --git a/cmd/goal/clerk.go b/cmd/goal/clerk.go
index b7e2a0f414..5efecfcfb6 100644
--- a/cmd/goal/clerk.go
+++ b/cmd/goal/clerk.go
@@ -78,6 +78,7 @@ var (
simulateEnableRequestTrace bool
simulateStackChange bool
simulateScratchChange bool
+ simulateAppStateChange bool
simulateAllowUnnamedResources bool
)
@@ -172,6 +173,7 @@ func init() {
simulateCmd.Flags().BoolVar(&simulateEnableRequestTrace, "trace", false, "Enable simulation time execution trace of app calls")
simulateCmd.Flags().BoolVar(&simulateStackChange, "stack", false, "Report stack change during simulation time")
simulateCmd.Flags().BoolVar(&simulateScratchChange, "scratch", false, "Report scratch change during simulation time")
+ simulateCmd.Flags().BoolVar(&simulateAppStateChange, "state", false, "Report application state changes during simulation time")
simulateCmd.Flags().BoolVar(&simulateAllowUnnamedResources, "allow-unnamed-resources", false, "Allow access to unnamed resources during simulation")
}
@@ -1380,11 +1382,13 @@ func traceCmdOptionToSimulateTraceConfigModel() simulation.ExecTraceConfig {
Enable: true,
Stack: true,
Scratch: true,
+ State: true,
}
}
traceConfig.Enable = traceConfig.Enable || simulateEnableRequestTrace
traceConfig.Stack = traceConfig.Stack || simulateStackChange
traceConfig.Scratch = traceConfig.Scratch || simulateScratchChange
+ traceConfig.State = traceConfig.State || simulateAppStateChange
return traceConfig
}
diff --git a/daemon/algod/api/algod.oas2.json b/daemon/algod/api/algod.oas2.json
index 4bb1c798a1..7337b2a98a 100644
--- a/daemon/algod/api/algod.oas2.json
+++ b/daemon/algod/api/algod.oas2.json
@@ -3684,6 +3684,10 @@
"scratch-change": {
"description": "A boolean option enabling returning scratch slot changes together with execution trace during simulation.",
"type": "boolean"
+ },
+ "state-change": {
+ "description": "A boolean option enabling returning application state changes (global, local, and box changes) with the execution trace during simulation.",
+ "type": "boolean"
}
}
},
@@ -4092,6 +4096,37 @@
}
}
},
+ "ApplicationStateOperation": {
+ "description": "An operation against an application's global/local/box state.",
+ "required": [
+ "operation",
+ "app-state-type",
+ "key"
+ ],
+ "properties": {
+ "operation": {
+ "description": "Operation type. Value `w` is **write**, `d` is **delete**.",
+ "type": "string"
+ },
+ "app-state-type": {
+ "description": "Type of application state. Value `g` is **global state**, `l` is **local state**, `b` is **boxes**.",
+ "type": "string"
+ },
+ "key": {
+ "description": "The key (name) of the global/local/box state.",
+ "type": "string",
+ "format": "byte"
+ },
+ "new-value": {
+ "$ref": "#/definitions/AvmValue"
+ },
+ "account": {
+ "description": "For local state changes, the address of the account associated with the local state.",
+ "type": "string",
+ "x-algorand-format": "Address"
+ }
+ }
+ },
"SimulationOpcodeTraceUnit": {
"description": "The set of trace information and effect from evaluating a single opcode.",
"type": "object",
@@ -4110,6 +4145,13 @@
"$ref": "#/definitions/ScratchChange"
}
},
+ "state-changes": {
+ "description": "The operations against the current application's states.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/ApplicationStateOperation"
+ }
+ },
"spawned-inners": {
"description": "The indexes of the traces for inner transactions spawned by this opcode, if any.",
"type": "array",
diff --git a/daemon/algod/api/algod.oas3.yml b/daemon/algod/api/algod.oas3.yml
index 74145aeda6..ebe8cdc0df 100644
--- a/daemon/algod/api/algod.oas3.yml
+++ b/daemon/algod/api/algod.oas3.yml
@@ -1300,6 +1300,39 @@
],
"type": "object"
},
+ "ApplicationStateOperation": {
+ "description": "An operation against an application's global/local/box state.",
+ "properties": {
+ "account": {
+ "description": "For local state changes, the address of the account associated with the local state.",
+ "type": "string",
+ "x-algorand-format": "Address"
+ },
+ "app-state-type": {
+ "description": "Type of application state. Value `g` is **global state**, `l` is **local state**, `b` is **boxes**.",
+ "type": "string"
+ },
+ "key": {
+ "description": "The key (name) of the global/local/box state.",
+ "format": "byte",
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
+ "type": "string"
+ },
+ "new-value": {
+ "$ref": "#/components/schemas/AvmValue"
+ },
+ "operation": {
+ "description": "Operation type. Value `w` is **write**, `d` is **delete**.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "app-state-type",
+ "key",
+ "operation"
+ ],
+ "type": "object"
+ },
"ApplicationStateSchema": {
"description": "Specifies maximums on the number of each type that may be stored.",
"properties": {
@@ -2101,6 +2134,10 @@
"stack-change": {
"description": "A boolean option enabling returning stack changes together with execution trace during simulation.",
"type": "boolean"
+ },
+ "state-change": {
+ "description": "A boolean option enabling returning application state changes (global, local, and box changes) with the execution trace during simulation.",
+ "type": "boolean"
}
},
"type": "object"
@@ -2281,6 +2318,13 @@
"stack-pop-count": {
"description": "The number of deleted stack values by this opcode.",
"type": "integer"
+ },
+ "state-changes": {
+ "description": "The operations against the current application's states.",
+ "items": {
+ "$ref": "#/components/schemas/ApplicationStateOperation"
+ },
+ "type": "array"
}
},
"required": [
diff --git a/daemon/algod/api/server/v2/account.go b/daemon/algod/api/server/v2/account.go
index 41a32b6c8a..31483d63b9 100644
--- a/daemon/algod/api/server/v2/account.go
+++ b/daemon/algod/api/server/v2/account.go
@@ -467,11 +467,11 @@ func AssetParamsToAsset(creator string, idx basics.AssetIndex, params *basics.As
Decimals: uint64(params.Decimals),
DefaultFrozen: &frozen,
Name: omitEmpty(printableUTF8OrEmpty(params.AssetName)),
- NameB64: byteOrNil([]byte(params.AssetName)),
+ NameB64: sliceOrNil([]byte(params.AssetName)),
UnitName: omitEmpty(printableUTF8OrEmpty(params.UnitName)),
- UnitNameB64: byteOrNil([]byte(params.UnitName)),
+ UnitNameB64: sliceOrNil([]byte(params.UnitName)),
Url: omitEmpty(printableUTF8OrEmpty(params.URL)),
- UrlB64: byteOrNil([]byte(params.URL)),
+ UrlB64: sliceOrNil([]byte(params.URL)),
Clawback: addrOrNil(params.Clawback),
Freeze: addrOrNil(params.Freeze),
Manager: addrOrNil(params.Manager),
diff --git a/daemon/algod/api/server/v2/generated/data/routes.go b/daemon/algod/api/server/v2/generated/data/routes.go
index 7f45e0d838..3af90c3d66 100644
--- a/daemon/algod/api/server/v2/generated/data/routes.go
+++ b/daemon/algod/api/server/v2/generated/data/routes.go
@@ -114,201 +114,204 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
- "/zcAAP//AIj0XV/qAAA=",
+ "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",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/experimental/routes.go b/daemon/algod/api/server/v2/generated/experimental/routes.go
index 633d380def..2448cb966d 100644
--- a/daemon/algod/api/server/v2/generated/experimental/routes.go
+++ b/daemon/algod/api/server/v2/generated/experimental/routes.go
@@ -90,201 +90,205 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
+ "AAAA///Cen75tekAAA==",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/model/types.go b/daemon/algod/api/server/v2/generated/model/types.go
index 97cfcc79a6..6fab39c06e 100644
--- a/daemon/algod/api/server/v2/generated/model/types.go
+++ b/daemon/algod/api/server/v2/generated/model/types.go
@@ -325,6 +325,24 @@ type ApplicationParams struct {
LocalStateSchema *ApplicationStateSchema `json:"local-state-schema,omitempty"`
}
+// ApplicationStateOperation An operation against an application's global/local/box state.
+type ApplicationStateOperation struct {
+ // Account For local state changes, the address of the account associated with the local state.
+ Account *string `json:"account,omitempty"`
+
+ // AppStateType Type of application state. Value `g` is **global state**, `l` is **local state**, `b` is **boxes**.
+ AppStateType string `json:"app-state-type"`
+
+ // Key The key (name) of the global/local/box state.
+ Key []byte `json:"key"`
+
+ // NewValue Represents an AVM value.
+ NewValue *AvmValue `json:"new-value,omitempty"`
+
+ // Operation Operation type. Value `w` is **write**, `d` is **delete**.
+ Operation string `json:"operation"`
+}
+
// ApplicationStateSchema Specifies maximums on the number of each type that may be stored.
type ApplicationStateSchema struct {
// NumByteSlice \[nbs\] num of byte slices.
@@ -715,6 +733,9 @@ type SimulateTraceConfig struct {
// StackChange A boolean option enabling returning stack changes together with execution trace during simulation.
StackChange *bool `json:"stack-change,omitempty"`
+
+ // StateChange A boolean option enabling returning application state changes (global, local, and box changes) with the execution trace during simulation.
+ StateChange *bool `json:"state-change,omitempty"`
}
// SimulateTransactionGroupResult Simulation result for an atomic transaction group
@@ -814,6 +835,9 @@ type SimulationOpcodeTraceUnit struct {
// StackPopCount The number of deleted stack values by this opcode.
StackPopCount *uint64 `json:"stack-pop-count,omitempty"`
+
+ // StateChanges The operations against the current application's states.
+ StateChanges *[]ApplicationStateOperation `json:"state-changes,omitempty"`
}
// SimulationTransactionExecTrace The execution trace of calling an app or a logic sig, containing the inner app call trace in a recursive way.
diff --git a/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go b/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
index 1ae7e9043f..91b3b3617f 100644
--- a/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
+++ b/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
@@ -130,202 +130,205 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
- "r0xVb/jt+9v/HwAA//9bWhkhW+sAAA==",
+ "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",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go b/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
index db5e8206e5..d5c1c489b6 100644
--- a/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
+++ b/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
@@ -724,277 +724,281 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
+ "nRuL5tP7T/83AAD//2UrnPtBngEA",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/participating/private/routes.go b/daemon/algod/api/server/v2/generated/participating/private/routes.go
index 64c46f9db0..37433a761d 100644
--- a/daemon/algod/api/server/v2/generated/participating/private/routes.go
+++ b/daemon/algod/api/server/v2/generated/participating/private/routes.go
@@ -158,204 +158,208 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
- "fNuQx7vmHvFk8v7t+/8fAAD//wbADiDz9AAA",
+ "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",
+ "AA==",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/participating/public/routes.go b/daemon/algod/api/server/v2/generated/participating/public/routes.go
index 4bee9c4983..207ec3f291 100644
--- a/daemon/algod/api/server/v2/generated/participating/public/routes.go
+++ b/daemon/algod/api/server/v2/generated/participating/public/routes.go
@@ -177,212 +177,216 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/utils.go b/daemon/algod/api/server/v2/utils.go
index 94f612045f..85b44c1668 100644
--- a/daemon/algod/api/server/v2/utils.go
+++ b/daemon/algod/api/server/v2/utils.go
@@ -119,18 +119,12 @@ func omitEmpty[T comparable](val T) *T {
return &val
}
-func byteOrNil(data []byte) *[]byte {
- if len(data) == 0 {
- return nil
- }
- return &data
-}
-
-func nilToZero(numPtr *uint64) uint64 {
- if numPtr == nil {
- return 0
+func nilToZero[T any](valPtr *T) T {
+ if valPtr == nil {
+ var defaultV T
+ return defaultV
}
- return *numPtr
+ return *valPtr
}
func computeCreatableIndexInPayset(tx node.TxnWithStatus, txnCounter uint64, payset []transactions.SignedTxnWithAD) (cidx *uint64) {
@@ -381,87 +375,83 @@ func ConvertInnerTxn(txn *transactions.SignedTxnWithAD) PreEncodedTxInfo {
return response
}
-func convertScratchChanges(scratchChanges []simulation.ScratchChange) *[]model.ScratchChange {
- if len(scratchChanges) == 0 {
- return nil
+func convertToAVMValue(tv basics.TealValue) model.AvmValue {
+ return model.AvmValue{
+ Type: uint64(tv.Type),
+ Uint: omitEmpty(tv.Uint),
+ Bytes: sliceOrNil([]byte(tv.Bytes)),
}
- modelSC := make([]model.ScratchChange, len(scratchChanges))
- for i, scratchChange := range scratchChanges {
- modelSC[i] = model.ScratchChange{
- Slot: scratchChange.Slot,
- NewValue: model.AvmValue{
- Type: uint64(scratchChange.NewValue.Type),
- Uint: omitEmpty(scratchChange.NewValue.Uint),
- Bytes: byteOrNil([]byte(scratchChange.NewValue.Bytes)),
- },
- }
+}
+
+func convertScratchChange(scratchChange simulation.ScratchChange) model.ScratchChange {
+ return model.ScratchChange{
+ Slot: scratchChange.Slot,
+ NewValue: convertToAVMValue(scratchChange.NewValue),
}
- return &modelSC
}
-func convertTealValueSliceToModel(tvs []basics.TealValue) *[]model.AvmValue {
- if len(tvs) == 0 {
- return nil
+func convertApplicationState(stateEnum logic.AppStateEnum) string {
+ switch stateEnum {
+ case logic.LocalState:
+ return "l"
+ case logic.GlobalState:
+ return "g"
+ case logic.BoxState:
+ return "b"
+ default:
+ return ""
}
- modelTvs := make([]model.AvmValue, len(tvs))
- for i := range tvs {
- modelTvs[i] = model.AvmValue{
- Type: uint64(tvs[i].Type),
- Uint: omitEmpty(tvs[i].Uint),
- Bytes: byteOrNil([]byte(tvs[i].Bytes)),
- }
+}
+
+func convertApplicationStateOperation(opEnum logic.AppStateOpEnum) string {
+ switch opEnum {
+ case logic.AppStateWrite:
+ return "w"
+ case logic.AppStateDelete:
+ return "d"
+ default:
+ return ""
}
- return &modelTvs
}
-func convertProgramTrace(programTrace []simulation.OpcodeTraceUnit) *[]model.SimulationOpcodeTraceUnit {
- if len(programTrace) == 0 {
- return nil
+func convertApplicationStateChange(stateChange simulation.StateOperation) model.ApplicationStateOperation {
+ return model.ApplicationStateOperation{
+ Key: []byte(stateChange.Key),
+ NewValue: omitEmpty(convertToAVMValue(stateChange.NewValue)),
+ Operation: convertApplicationStateOperation(stateChange.AppStateOp),
+ AppStateType: convertApplicationState(stateChange.AppState),
+ Account: addrOrNil(stateChange.Account),
}
- modelProgramTrace := make([]model.SimulationOpcodeTraceUnit, len(programTrace))
- for i := range programTrace {
- var spawnedInnersPtr *[]uint64
- if len(programTrace[i].SpawnedInners) > 0 {
- spawnedInners := make([]uint64, len(programTrace[i].SpawnedInners))
- for j, innerIndex := range programTrace[i].SpawnedInners {
- spawnedInners[j] = uint64(innerIndex)
- }
- spawnedInnersPtr = &spawnedInners
- }
- modelProgramTrace[i] = model.SimulationOpcodeTraceUnit{
- Pc: programTrace[i].PC,
- SpawnedInners: spawnedInnersPtr,
- StackAdditions: convertTealValueSliceToModel(programTrace[i].StackAdded),
- StackPopCount: omitEmpty(programTrace[i].StackPopCount),
- ScratchChanges: convertScratchChanges(programTrace[i].ScratchSlotChanges),
- }
+}
+
+func convertOpcodeTraceUnit(opcodeTraceUnit simulation.OpcodeTraceUnit) model.SimulationOpcodeTraceUnit {
+ return model.SimulationOpcodeTraceUnit{
+ Pc: opcodeTraceUnit.PC,
+ SpawnedInners: sliceOrNil(convertSlice(opcodeTraceUnit.SpawnedInners, func(v int) uint64 { return uint64(v) })),
+ StackAdditions: sliceOrNil(convertSlice(opcodeTraceUnit.StackAdded, convertToAVMValue)),
+ StackPopCount: omitEmpty(opcodeTraceUnit.StackPopCount),
+ ScratchChanges: sliceOrNil(convertSlice(opcodeTraceUnit.ScratchSlotChanges, convertScratchChange)),
+ StateChanges: sliceOrNil(convertSlice(opcodeTraceUnit.StateChanges, convertApplicationStateChange)),
}
- return &modelProgramTrace
}
func convertTxnTrace(txnTrace *simulation.TransactionTrace) *model.SimulationTransactionExecTrace {
if txnTrace == nil {
return nil
}
-
- execTraceModel := model.SimulationTransactionExecTrace{
- ApprovalProgramTrace: convertProgramTrace(txnTrace.ApprovalProgramTrace),
+ return &model.SimulationTransactionExecTrace{
+ ApprovalProgramTrace: sliceOrNil(convertSlice(txnTrace.ApprovalProgramTrace, convertOpcodeTraceUnit)),
ApprovalProgramHash: digestOrNil(txnTrace.ApprovalProgramHash),
- ClearStateProgramTrace: convertProgramTrace(txnTrace.ClearStateProgramTrace),
+ ClearStateProgramTrace: sliceOrNil(convertSlice(txnTrace.ClearStateProgramTrace, convertOpcodeTraceUnit)),
ClearStateProgramHash: digestOrNil(txnTrace.ClearStateProgramHash),
- LogicSigTrace: convertProgramTrace(txnTrace.LogicSigTrace),
+ LogicSigTrace: sliceOrNil(convertSlice(txnTrace.LogicSigTrace, convertOpcodeTraceUnit)),
LogicSigHash: digestOrNil(txnTrace.LogicSigHash),
+ InnerTrace: sliceOrNil(convertSlice(txnTrace.InnerTraces,
+ func(trace simulation.TransactionTrace) model.SimulationTransactionExecTrace {
+ return *convertTxnTrace(&trace)
+ }),
+ ),
}
-
- if len(txnTrace.InnerTraces) > 0 {
- innerTraces := make([]model.SimulationTransactionExecTrace, len(txnTrace.InnerTraces))
- for i := range txnTrace.InnerTraces {
- innerTraces[i] = *convertTxnTrace(&txnTrace.InnerTraces[i])
- }
- execTraceModel.InnerTrace = &innerTraces
- }
-
- return &execTraceModel
}
func convertTxnResult(txnResult simulation.TxnResult) PreEncodedSimulateTxnResult {
diff --git a/data/transactions/logic/opcodeExplain.go b/data/transactions/logic/opcodeExplain.go
new file mode 100644
index 0000000000..ec95d97d1b
--- /dev/null
+++ b/data/transactions/logic/opcodeExplain.go
@@ -0,0 +1,274 @@
+// Copyright (C) 2019-2023 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see .
+
+package logic
+
+import "github.com/algorand/go-algorand/data/basics"
+
+// debugStackExplain explains the effect of an opcode over the stack
+// with 2 integers: deletions and additions, representing pops and inserts.
+// An opcode may delete a few variables from stack, then add a few to stack.
+type debugStackExplain func(*EvalContext) (int, int)
+
+// AppStateOpEnum stands for the operation enum to app state, should be one of create, write, read, delete.
+type AppStateOpEnum uint64
+
+const (
+ // AppStateWrite stands for writing to an app state.
+ AppStateWrite AppStateOpEnum = iota + 1
+
+ // AppStateDelete stands for deleting an app state.
+ AppStateDelete
+)
+
+// AppStateEnum stands for the enum of app state type, should be one of global/local/box.
+type AppStateEnum uint64
+
+const (
+ // GlobalState stands for global state of an app.
+ GlobalState AppStateEnum = iota + 1
+
+ // LocalState stands for local state of an app.
+ LocalState
+
+ // BoxState stands for box storage of an app.
+ BoxState
+)
+
+// stateChangeExplain explains how an opcode change the app's state with a quadruple:
+// AppStateEnum stands for which app state: local/global/box,
+// AppStateOpEnum stands for read/write/create/delete/check-existence,
+// together with key for touched state
+type stateChangeExplain func(ctx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string)
+
+func opPushIntsStackChange(cx *EvalContext) (deletions, additions int) {
+ // NOTE: WE ARE SWALLOWING THE ERROR HERE!
+ // FOR EVENTUALLY IT WOULD ERROR IN ASSEMBLY
+ intc, _, _ := parseIntImmArgs(cx.program, cx.pc+1)
+
+ additions = len(intc)
+ return
+}
+
+func opPushBytessStackChange(cx *EvalContext) (deletions, additions int) {
+ // NOTE: WE ARE SWALLOWING THE ERROR HERE!
+ // FOR EVENTUALLY IT WOULD ERROR IN ASSEMBLY
+ cbytess, _, _ := parseByteImmArgs(cx.program, cx.pc+1)
+
+ additions = len(cbytess)
+ return
+}
+
+func opReturnStackChange(cx *EvalContext) (deletions, additions int) {
+ deletions = len(cx.Stack)
+ additions = 1
+ return
+}
+
+func opBuryStackChange(cx *EvalContext) (deletions, additions int) {
+ depth := int(cx.program[cx.pc+1])
+
+ deletions = depth + 1
+ additions = depth
+ return
+}
+
+func opPopNStackChange(cx *EvalContext) (deletions, additions int) {
+ n := int(cx.program[cx.pc+1])
+
+ deletions = n
+ return
+}
+
+func opDupNStackChange(cx *EvalContext) (deletions, additions int) {
+ n := int(cx.program[cx.pc+1])
+
+ deletions = 1
+ additions = n + 1
+ return
+}
+
+func opDigStackChange(cx *EvalContext) (deletions, additions int) {
+ additions = 1
+ return
+}
+
+func opFrameDigStackChange(cx *EvalContext) (deletions, additions int) {
+ additions = 1
+ return
+}
+
+func opCoverStackChange(cx *EvalContext) (deletions, additions int) {
+ depth := int(cx.program[cx.pc+1])
+
+ deletions = depth + 1
+ additions = depth + 1
+ return
+}
+
+func opUncoverStackChange(cx *EvalContext) (deletions, additions int) {
+ depth := int(cx.program[cx.pc+1])
+
+ deletions = depth + 1
+ additions = depth + 1
+ return
+}
+
+func opRetSubStackChange(cx *EvalContext) (deletions, additions int) {
+ topFrame := cx.callstack[len(cx.callstack)-1]
+ // fast path, no proto case
+ if !topFrame.clear {
+ return
+ }
+
+ argStart := topFrame.height - topFrame.args
+ topStackIdx := len(cx.Stack) - 1
+
+ diff := topStackIdx - argStart + 1
+
+ deletions = diff
+ additions = topFrame.returns
+ return
+}
+
+func opFrameBuryStackChange(cx *EvalContext) (deletions, additions int) {
+ topFrame := cx.callstack[len(cx.callstack)-1]
+
+ immIndex := int8(cx.program[cx.pc+1])
+ idx := topFrame.height + int(immIndex)
+ topStackIdx := len(cx.Stack) - 1
+
+ diff := topStackIdx - idx + 1
+
+ deletions = diff
+ additions = diff - 1
+ return
+}
+
+func opMatchStackChange(cx *EvalContext) (deletions, additions int) {
+ labelNum := int(cx.program[cx.pc+1])
+
+ deletions = labelNum + 1
+ return
+}
+
+func opBoxCreateStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // size
+ prev := last - 1 // name
+
+ return BoxState, AppStateWrite, cx.appID, basics.Address{}, string(cx.Stack[prev].Bytes)
+}
+
+func opBoxReplaceStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // replacement
+ prev := last - 1 // start
+ pprev := prev - 1 // name
+
+ return BoxState, AppStateWrite, cx.appID, basics.Address{}, string(cx.Stack[pprev].Bytes)
+}
+
+func opBoxDelStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // name
+
+ return BoxState, AppStateDelete, cx.appID, basics.Address{}, string(cx.Stack[last].Bytes)
+}
+
+func opBoxPutStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // name
+
+ return BoxState, AppStateWrite, cx.appID, basics.Address{}, string(cx.Stack[last].Bytes)
+}
+
+func opAppLocalPutStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // value
+ prev := last - 1 // state key
+ pprev := prev - 1 // account
+
+ // NOTE: we swallow the error of finding account ref, for eventually it would error in execution time,
+ // and we don't have to complain here.
+ var addr basics.Address
+ addr, _, _ = cx.mutableAccountReference(cx.Stack[pprev])
+
+ return LocalState, AppStateWrite, cx.appID, addr, string(cx.Stack[prev].Bytes)
+}
+
+func opAppGlobalPutStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // value
+ prev := last - 1 // state key
+
+ return GlobalState, AppStateWrite, cx.appID, basics.Address{}, string(cx.Stack[prev].Bytes)
+}
+
+func opAppLocalDelStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // key
+ prev := last - 1 // account
+
+ // NOTE: we swallow the error of finding account ref, for eventually it would error in execution time,
+ // and we don't have to complain here.
+ var addr basics.Address
+ addr, _, _ = cx.mutableAccountReference(cx.Stack[prev])
+
+ return LocalState, AppStateDelete, cx.appID, addr, string(cx.Stack[last].Bytes)
+}
+
+func opAppGlobalDelStateChange(cx *EvalContext) (AppStateEnum, AppStateOpEnum, basics.AppIndex, basics.Address, string) {
+ last := len(cx.Stack) - 1 // key
+
+ return GlobalState, AppStateDelete, cx.appID, basics.Address{}, string(cx.Stack[last].Bytes)
+}
+
+// AppNewStateQuerying is used only for simulation endpoint exec trace export:
+// it reads *new* app state after opcode that writes to app-state.
+// Since it is collecting new/updated app state, we don't have to error again here,
+// and thus we omit the error or non-existence case, just returning empty TealValue.
+// Otherwise, we find the updated new state value, and wrap up with new TealValue.
+func AppNewStateQuerying(
+ cx *EvalContext,
+ appState AppStateEnum, stateOp AppStateOpEnum,
+ appID basics.AppIndex, account basics.Address, key string) basics.TealValue {
+ if stateOp != AppStateWrite {
+ return basics.TealValue{}
+ }
+ switch appState {
+ case BoxState:
+ boxBytes, exists, err := cx.Ledger.GetBox(appID, key)
+ if !exists || err != nil {
+ return basics.TealValue{}
+ }
+ return basics.TealValue{
+ Type: basics.TealBytesType,
+ Bytes: string(boxBytes),
+ }
+ case GlobalState:
+ globalValue, exists, err := cx.Ledger.GetGlobal(appID, key)
+ if !exists || err != nil {
+ return basics.TealValue{}
+ }
+ return globalValue
+ case LocalState:
+ addr, acctID, err := cx.mutableAccountReference(stackValue{Bytes: account[:]})
+ if err != nil {
+ return basics.TealValue{}
+ }
+ localValue, exists, err := cx.Ledger.GetLocal(addr, appID, key, acctID)
+ if !exists || err != nil {
+ return basics.TealValue{}
+ }
+ return localValue
+ default:
+ return basics.TealValue{}
+ }
+}
diff --git a/data/transactions/logic/opcodes.go b/data/transactions/logic/opcodes.go
index 0dd9bf8dfa..295b8ed512 100644
--- a/data/transactions/logic/opcodes.go
+++ b/data/transactions/logic/opcodes.go
@@ -356,11 +356,6 @@ type typedList struct {
Effects string
}
-// debugStackExplain explains the effect of an opcode over the stack
-// with 2 integers: deletions and additions, representing pops and inserts.
-// An opcode may delete a few variables from stack, then add a few to stack.
-type debugStackExplain func(*EvalContext) (int, int)
-
// Proto describes the "stack behavior" of an opcode, what it pops as arguments
// and pushes onto the stack as return values.
type Proto struct {
@@ -371,6 +366,11 @@ type Proto struct {
// - on default construction, Explain relies on Arg and Return count.
// - otherwise, we need to explicitly infer from EvalContext, by registering through explain function
Explain debugStackExplain
+
+ // StateExplain is the pointer to the function used for debugging in simulation:
+ // - for an opcode not touching app's local/global/box state, this pointer is nil.
+ // - otherwise, we call this method and check the operation of an opcode on app's state.
+ StateExplain stateChangeExplain
}
func (p Proto) stackExplain(e debugStackExplain) Proto {
@@ -378,6 +378,11 @@ func (p Proto) stackExplain(e debugStackExplain) Proto {
return p
}
+func (p Proto) stateExplain(s stateChangeExplain) Proto {
+ p.StateExplain = s
+ return p
+}
+
func defaultDebugExplain(argCount, retCount int) debugStackExplain {
return func(_ *EvalContext) (deletions, additions int) {
deletions = argCount
@@ -386,117 +391,6 @@ func defaultDebugExplain(argCount, retCount int) debugStackExplain {
}
}
-func opPushIntsStackChange(cx *EvalContext) (deletions, additions int) {
- // NOTE: WE ARE SWALLOWING THE ERROR HERE!
- // FOR EVENTUALLY IT WOULD ERROR IN ASSEMBLY
- intc, _, _ := parseIntImmArgs(cx.program, cx.pc+1)
-
- additions = len(intc)
- return
-}
-
-func opPushBytessStackChange(cx *EvalContext) (deletions, additions int) {
- // NOTE: WE ARE SWALLOWING THE ERROR HERE!
- // FOR EVENTUALLY IT WOULD ERROR IN ASSEMBLY
- cbytess, _, _ := parseByteImmArgs(cx.program, cx.pc+1)
-
- additions = len(cbytess)
- return
-}
-
-func opReturnStackChange(cx *EvalContext) (deletions, additions int) {
- deletions = len(cx.Stack)
- additions = 1
- return
-}
-
-func opBuryStackChange(cx *EvalContext) (deletions, additions int) {
- depth := int(cx.program[cx.pc+1])
-
- deletions = depth + 1
- additions = depth
- return
-}
-
-func opPopNStackChange(cx *EvalContext) (deletions, additions int) {
- n := int(cx.program[cx.pc+1])
-
- deletions = n
- return
-}
-
-func opDupNStackChange(cx *EvalContext) (deletions, additions int) {
- n := int(cx.program[cx.pc+1])
-
- deletions = 1
- additions = n + 1
- return
-}
-
-func opDigStackChange(cx *EvalContext) (deletions, additions int) {
- additions = 1
- return
-}
-
-func opFrameDigStackChange(cx *EvalContext) (deletions, additions int) {
- additions = 1
- return
-}
-
-func opCoverStackChange(cx *EvalContext) (deletions, additions int) {
- depth := int(cx.program[cx.pc+1])
-
- deletions = depth + 1
- additions = depth + 1
- return
-}
-
-func opUncoverStackChange(cx *EvalContext) (deletions, additions int) {
- depth := int(cx.program[cx.pc+1])
-
- deletions = depth + 1
- additions = depth + 1
- return
-}
-
-func opRetSubStackChange(cx *EvalContext) (deletions, additions int) {
- topFrame := cx.callstack[len(cx.callstack)-1]
- // fast path, no proto case
- if !topFrame.clear {
- return
- }
-
- argStart := topFrame.height - topFrame.args
- topStackIdx := len(cx.Stack) - 1
-
- diff := topStackIdx - argStart + 1
-
- deletions = diff
- additions = topFrame.returns
- return
-}
-
-func opFrameBuryStackChange(cx *EvalContext) (deletions, additions int) {
- topFrame := cx.callstack[len(cx.callstack)-1]
-
- immIndex := int8(cx.program[cx.pc+1])
- idx := topFrame.height + int(immIndex)
- topStackIdx := len(cx.Stack) - 1
-
- diff := topStackIdx - idx + 1
-
- deletions = diff
- additions = diff - 1
- return
-}
-
-func opMatchStackChange(cx *EvalContext) (deletions, additions int) {
- labelNum := int(cx.program[cx.pc+1])
-
- deletions = labelNum + 1
- return
-}
-
func proto(signature string, effects ...string) Proto {
parts := strings.Split(signature, ":")
if len(parts) != 2 {
@@ -695,12 +589,12 @@ var OpSpecs = []OpSpec{
{0x63, "app_local_get_ex", opAppLocalGetEx, proto("aib:aT"), directRefEnabledVersion, only(ModeApp)},
{0x64, "app_global_get", opAppGlobalGet, proto("b:a"), 2, only(ModeApp)},
{0x65, "app_global_get_ex", opAppGlobalGetEx, proto("ib:aT"), 2, only(ModeApp)},
- {0x66, "app_local_put", opAppLocalPut, proto("iba:"), 2, only(ModeApp)},
- {0x66, "app_local_put", opAppLocalPut, proto("aba:"), directRefEnabledVersion, only(ModeApp)},
- {0x67, "app_global_put", opAppGlobalPut, proto("ba:"), 2, only(ModeApp)},
- {0x68, "app_local_del", opAppLocalDel, proto("ib:"), 2, only(ModeApp)},
- {0x68, "app_local_del", opAppLocalDel, proto("ab:"), directRefEnabledVersion, only(ModeApp)},
- {0x69, "app_global_del", opAppGlobalDel, proto("b:"), 2, only(ModeApp)},
+ {0x66, "app_local_put", opAppLocalPut, proto("iba:").stateExplain(opAppLocalPutStateChange), 2, only(ModeApp)},
+ {0x66, "app_local_put", opAppLocalPut, proto("aba:").stateExplain(opAppLocalPutStateChange), directRefEnabledVersion, only(ModeApp)},
+ {0x67, "app_global_put", opAppGlobalPut, proto("ba:").stateExplain(opAppGlobalPutStateChange), 2, only(ModeApp)},
+ {0x68, "app_local_del", opAppLocalDel, proto("ib:").stateExplain(opAppLocalDelStateChange), 2, only(ModeApp)},
+ {0x68, "app_local_del", opAppLocalDel, proto("ab:").stateExplain(opAppLocalDelStateChange), directRefEnabledVersion, only(ModeApp)},
+ {0x69, "app_global_del", opAppGlobalDel, proto("b:").stateExplain(opAppGlobalDelStateChange), 2, only(ModeApp)},
{0x70, "asset_holding_get", opAssetHoldingGet, proto("ii:aT"), 2, field("f", &AssetHoldingFields).only(ModeApp)},
{0x70, "asset_holding_get", opAssetHoldingGet, proto("ai:aT"), directRefEnabledVersion, field("f", &AssetHoldingFields).only(ModeApp)},
{0x71, "asset_params_get", opAssetParamsGet, proto("i:aT"), 2, field("f", &AssetParamsFields).only(ModeApp)},
@@ -776,13 +670,13 @@ var OpSpecs = []OpSpec{
{0xb8, "gitxna", opGitxna, proto(":a"), 6, immediates("t", "f", "i").field("f", &TxnArrayFields).only(ModeApp)},
// Unlimited Global Storage - Boxes
- {0xb9, "box_create", opBoxCreate, proto("Ni:T"), boxVersion, only(ModeApp)},
+ {0xb9, "box_create", opBoxCreate, proto("Ni:T").stateExplain(opBoxCreateStateChange), boxVersion, only(ModeApp)},
{0xba, "box_extract", opBoxExtract, proto("Nii:b"), boxVersion, only(ModeApp)},
- {0xbb, "box_replace", opBoxReplace, proto("Nib:"), boxVersion, only(ModeApp)},
- {0xbc, "box_del", opBoxDel, proto("N:T"), boxVersion, only(ModeApp)},
+ {0xbb, "box_replace", opBoxReplace, proto("Nib:").stateExplain(opBoxReplaceStateChange), boxVersion, only(ModeApp)},
+ {0xbc, "box_del", opBoxDel, proto("N:T").stateExplain(opBoxDelStateChange), boxVersion, only(ModeApp)},
{0xbd, "box_len", opBoxLen, proto("N:iT"), boxVersion, only(ModeApp)},
{0xbe, "box_get", opBoxGet, proto("N:bT"), boxVersion, only(ModeApp)},
- {0xbf, "box_put", opBoxPut, proto("Nb:"), boxVersion, only(ModeApp)},
+ {0xbf, "box_put", opBoxPut, proto("Nb:").stateExplain(opBoxPutStateChange), boxVersion, only(ModeApp)},
// Dynamic indexing
{0xc0, "txnas", opTxnas, proto("i:a"), 5, field("f", &TxnArrayFields)},
diff --git a/ledger/simulation/simulation_eval_test.go b/ledger/simulation/simulation_eval_test.go
index 8445f264fd..747494ea80 100644
--- a/ledger/simulation/simulation_eval_test.go
+++ b/ledger/simulation/simulation_eval_test.go
@@ -2945,6 +2945,1419 @@ int 1`,
})
}
+func TestBoxChangeExecTrace(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
+ sender := env.Accounts[0]
+
+ futureAppID := basics.AppIndex(1001)
+ boxContent := []byte("boxWriteContent")
+
+ boxStateChangeTraceTemplate := func(opName string, units ...simulation.OpcodeTraceUnit) []simulation.OpcodeTraceUnit {
+ begin := []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: uint64(futureAppID),
+ },
+ },
+ },
+ {
+ PC: 3,
+ StackPopCount: 1,
+ },
+ {
+ PC: 6,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "create",
+ },
+ },
+ },
+ {
+ PC: 14,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "delete",
+ },
+ },
+ },
+ {
+ PC: 22,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "read",
+ },
+ },
+ },
+ {
+ PC: 28,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "write",
+ },
+ },
+ },
+ {
+ PC: 35,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: opName,
+ },
+ },
+ },
+ {
+ PC: 38,
+ StackPopCount: 5,
+ },
+ }
+ end := []simulation.OpcodeTraceUnit{
+ {
+ PC: 87,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ }
+ result := append(begin, units...)
+ result = append(result, end...)
+ return result
+ }
+
+ createTxn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: 0,
+ ApprovalProgram: fmt.Sprintf(boxTestProgram, 8),
+ ClearStateProgram: `#pragma version 8
+int 1`,
+ })
+
+ op, err := logic.AssembleString(createTxn.ApprovalProgram.(string))
+ require.NoError(t, err)
+ progHash := crypto.Hash(op.Program)
+
+ payment := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.PaymentTx,
+ Sender: sender.Addr,
+ Receiver: futureAppID.Address(),
+ Amount: env.TxnInfo.CurrentProtocolParams().MinBalance * 2,
+ })
+ createBoxTxn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ ApplicationArgs: boxOperation{
+ op: logic.BoxCreateOperation,
+ name: "A",
+ createSize: uint64(len(boxContent)),
+ }.appArgs(),
+ Boxes: []transactions.BoxRef{
+ {Name: []byte("A")},
+ },
+ })
+ writeBoxTxn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ ApplicationArgs: boxOperation{
+ op: logic.BoxWriteOperation,
+ name: "A",
+ contents: boxContent,
+ }.appArgs(),
+ Boxes: []transactions.BoxRef{
+ {Name: []byte("A")},
+ },
+ })
+ delBoxTxn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ ApplicationArgs: boxOperation{
+ op: logic.BoxDeleteOperation,
+ name: "A",
+ }.appArgs(),
+ Boxes: []transactions.BoxRef{
+ {Name: []byte("A")},
+ },
+ })
+ txntest.Group(&createTxn, &payment, &createBoxTxn, &writeBoxTxn, &delBoxTxn)
+
+ signedCreate := createTxn.Txn().Sign(sender.Sk)
+ signedPay := payment.Txn().Sign(sender.Sk)
+ signedCreateBox := createBoxTxn.Txn().Sign(sender.Sk)
+ signedWriteBox := writeBoxTxn.Txn().Sign(sender.Sk)
+ signedDelBox := delBoxTxn.Txn().Sign(sender.Sk)
+
+ return simulationTestCase{
+ input: simulation.Request{
+ TxnGroups: [][]transactions.SignedTxn{
+ {signedCreate, signedPay, signedCreateBox, signedWriteBox, signedDelBox},
+ },
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ },
+ developerAPI: true,
+ expected: simulation.Result{
+ Version: simulation.ResultLatestVersion,
+ LastRound: env.TxnInfo.LatestRound(),
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ TxnGroups: []simulation.TxnGroupResult{
+ {
+ Txns: []simulation.TxnResult{
+ // App creation
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ ApplicationID: futureAppID,
+ },
+ },
+ AppBudgetConsumed: 3,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ {
+ PC: 3,
+ StackPopCount: 1,
+ },
+ {
+ PC: 87,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // Payment
+ {
+ Trace: &simulation.TransactionTrace{},
+ },
+ // BoxCreation
+ {
+ AppBudgetConsumed: 15,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: boxStateChangeTraceTemplate("create",
+ simulation.OpcodeTraceUnit{
+ PC: 49,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "A",
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 52,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: string(uint64ToBytes(uint64(len(boxContent)))),
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 55,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: uint64(len(boxContent)),
+ },
+ },
+ StackPopCount: 1,
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 56,
+ StackPopCount: 2,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.BoxState,
+ AppID: futureAppID,
+ Key: "A",
+ NewValue: basics.TealValue{
+ Type: basics.TealBytesType,
+ Bytes: string(make([]byte, len(boxContent))),
+ },
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 57,
+ StackPopCount: 1,
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 58,
+ },
+ ),
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // BoxWrite
+ {
+ AppBudgetConsumed: 13,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: boxStateChangeTraceTemplate("write",
+ simulation.OpcodeTraceUnit{
+ PC: 78,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "A",
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 81,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 83,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: string(boxContent),
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 86,
+ StackPopCount: 3,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.BoxState,
+ AppID: futureAppID,
+ Key: "A",
+ NewValue: basics.TealValue{
+ Type: basics.TealBytesType,
+ Bytes: string(boxContent),
+ },
+ },
+ },
+ },
+ ),
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // BoxDelete
+ {
+ AppBudgetConsumed: 13,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: boxStateChangeTraceTemplate("delete",
+ simulation.OpcodeTraceUnit{
+ PC: 61,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "A",
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 64,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ StackPopCount: 1,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateDelete,
+ AppState: logic.BoxState,
+ AppID: futureAppID,
+ Key: "A",
+ },
+ },
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 65,
+ StackPopCount: 1,
+ },
+ simulation.OpcodeTraceUnit{
+ PC: 66,
+ },
+ ),
+ ApprovalProgramHash: progHash,
+ },
+ },
+ },
+ AppBudgetAdded: 2800,
+ AppBudgetConsumed: 44,
+ },
+ },
+ },
+ }
+ })
+}
+
+func TestAppLocalGlobalStateChange(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
+ sender := env.Accounts[0]
+
+ futureAppID := basics.AppIndex(1001)
+
+ createTxn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: 0,
+ GlobalStateSchema: basics.StateSchema{NumUint: 1, NumByteSlice: 1},
+ LocalStateSchema: basics.StateSchema{NumUint: 1, NumByteSlice: 1},
+ ApprovalProgram: `#pragma version 8
+txn ApplicationID
+bz end // Do nothing during create
+
+txn OnCompletion
+int OptIn
+==
+bnz end // Always allow optin
+
+byte "local"
+byte "global"
+txn ApplicationArgs 0
+match local global
+err // Unknown command
+
+local:
+ txn Sender
+ byte "local-int-key"
+ int 0xcafeb0ba
+ app_local_put
+ int 0
+ byte "local-bytes-key"
+ byte "xqcL"
+ app_local_put
+ b end
+
+global:
+ byte "global-int-key"
+ int 0xdeadbeef
+ app_global_put
+ byte "global-bytes-key"
+ byte "welt am draht"
+ app_global_put
+ b end
+
+end:
+ int 1
+`,
+ ClearStateProgram: `#pragma version 8
+int 1`,
+ })
+
+ op, err := logic.AssembleString(createTxn.ApprovalProgram.(string))
+ require.NoError(t, err)
+ progHash := crypto.Hash(op.Program)
+
+ optIn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ OnCompletion: transactions.OptInOC,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ })
+
+ globalStateCall := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ ApplicationArgs: [][]byte{[]byte("global")},
+ })
+
+ localStateCall := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ ApplicationArgs: [][]byte{[]byte("local")},
+ })
+
+ txntest.Group(&createTxn, &optIn, &globalStateCall, &localStateCall)
+
+ signedCreate := createTxn.Txn().Sign(sender.Sk)
+ signedOptin := optIn.Txn().Sign(sender.Sk)
+ signedGlobalStateCall := globalStateCall.Txn().Sign(sender.Sk)
+ signedLocalStateCall := localStateCall.Txn().Sign(sender.Sk)
+
+ return simulationTestCase{
+ input: simulation.Request{
+ TxnGroups: [][]transactions.SignedTxn{
+ {signedCreate, signedOptin, signedGlobalStateCall, signedLocalStateCall},
+ },
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ },
+ developerAPI: true,
+ expected: simulation.Result{
+ Version: simulation.ResultLatestVersion,
+ LastRound: env.TxnInfo.LatestRound(),
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ TxnGroups: []simulation.TxnGroupResult{
+ {
+ Txns: []simulation.TxnResult{
+ // App creation
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ ApplicationID: futureAppID,
+ },
+ },
+ AppBudgetConsumed: 4,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ },
+ {
+ PC: 4,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ {
+ PC: 6,
+ StackPopCount: 1,
+ },
+ {
+ PC: 154,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // Optin
+ {
+ AppBudgetConsumed: 8,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ },
+ {
+ PC: 4,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: uint64(futureAppID),
+ },
+ },
+ },
+ {
+ PC: 6,
+ StackPopCount: 1,
+ },
+ {
+ PC: 9,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ {
+ PC: 11,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ {
+ PC: 12,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ StackPopCount: 2,
+ },
+ {
+ PC: 13,
+ StackPopCount: 1,
+ },
+ {
+ PC: 154,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // Global
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ EvalDelta: transactions.EvalDelta{
+ GlobalDelta: basics.StateDelta{
+ "global-bytes-key": basics.ValueDelta{
+ Bytes: "welt am draht",
+ Action: basics.SetBytesAction,
+ },
+ "global-int-key": basics.ValueDelta{
+ Uint: 0xdeadbeef,
+ Action: basics.SetUintAction,
+ },
+ },
+ },
+ },
+ },
+ AppBudgetConsumed: 19,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ },
+ {
+ PC: 4,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: uint64(futureAppID),
+ },
+ },
+ },
+ {
+ PC: 6,
+ StackPopCount: 1,
+ },
+ {
+ PC: 9,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ {
+ PC: 11,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ {
+ PC: 12,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ StackPopCount: 2,
+ },
+ {
+ PC: 13,
+ StackPopCount: 1,
+ },
+ {
+ PC: 16,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "local",
+ },
+ },
+ },
+ {
+ PC: 23,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global",
+ },
+ },
+ },
+ {
+ PC: 31,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global",
+ },
+ },
+ },
+ {
+ PC: 34,
+ StackPopCount: 3,
+ },
+ {
+ PC: 94,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global-int-key",
+ },
+ },
+ },
+ {
+ PC: 110,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 0xdeadbeef,
+ },
+ },
+ },
+ {
+ PC: 116,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.GlobalState,
+ AppID: futureAppID,
+ Key: "global-int-key",
+ NewValue: basics.TealValue{
+ Type: basics.TealUintType,
+ Uint: 0xdeadbeef,
+ },
+ },
+ },
+ StackPopCount: 2,
+ },
+ {
+ PC: 117,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global-bytes-key",
+ },
+ },
+ },
+ {
+ PC: 135,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "welt am draht",
+ },
+ },
+ },
+ {
+ PC: 150,
+ StackPopCount: 2,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.GlobalState,
+ AppID: futureAppID,
+ Key: "global-bytes-key",
+ NewValue: basics.TealValue{
+ Type: basics.TealBytesType,
+ Bytes: "welt am draht",
+ },
+ },
+ },
+ },
+ {PC: 151},
+ {
+ PC: 154,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // Local
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ EvalDelta: transactions.EvalDelta{
+ LocalDeltas: map[uint64]basics.StateDelta{
+ 0: {
+ "local-bytes-key": basics.ValueDelta{
+ Bytes: "xqcL",
+ Action: basics.SetBytesAction,
+ },
+ "local-int-key": basics.ValueDelta{
+ Uint: 0xcafeb0ba,
+ Action: basics.SetUintAction,
+ },
+ },
+ },
+ },
+ },
+ },
+ AppBudgetConsumed: 21,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ },
+ {
+ PC: 4,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: uint64(futureAppID),
+ },
+ },
+ },
+ {
+ PC: 6,
+ StackPopCount: 1,
+ },
+ {
+ PC: 9,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ {
+ PC: 11,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ {
+ PC: 12,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ StackPopCount: 2,
+ },
+ {
+ PC: 13,
+ StackPopCount: 1,
+ },
+ {
+ PC: 16,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "local",
+ },
+ },
+ },
+ {
+ PC: 23,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global",
+ },
+ },
+ },
+ {
+ PC: 31,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "local",
+ },
+ },
+ },
+ {
+ PC: 34,
+ StackPopCount: 3,
+ },
+ {
+ PC: 41,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: string(sender.Addr[:]),
+ },
+ },
+ },
+ {
+ PC: 43,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "local-int-key",
+ },
+ },
+ },
+ {
+ PC: 58,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 0xcafeb0ba,
+ },
+ },
+ },
+ {
+ PC: 64,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.LocalState,
+ AppID: futureAppID,
+ Key: "local-int-key",
+ NewValue: basics.TealValue{
+ Type: basics.TealUintType,
+ Uint: 0xcafeb0ba,
+ },
+ Account: sender.Addr,
+ },
+ },
+ StackPopCount: 3,
+ },
+ {
+ PC: 65,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ {
+ PC: 67,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "local-bytes-key",
+ },
+ },
+ },
+ {
+ PC: 84,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "xqcL",
+ },
+ },
+ },
+ {
+ PC: 90,
+ StackPopCount: 3,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.LocalState,
+ AppID: futureAppID,
+ Key: "local-bytes-key",
+ NewValue: basics.TealValue{
+ Type: basics.TealBytesType,
+ Bytes: "xqcL",
+ },
+ Account: sender.Addr,
+ },
+ },
+ },
+ {PC: 91},
+ {
+ PC: 154,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ },
+ AppBudgetAdded: 2800,
+ AppBudgetConsumed: 52,
+ },
+ },
+ },
+ }
+ })
+}
+
+func TestGlobalStateTypeChange(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
+ sender := env.Accounts[0]
+
+ futureAppID := basics.AppIndex(1001)
+
+ createTxn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: 0,
+ GlobalStateSchema: basics.StateSchema{NumUint: 1, NumByteSlice: 1},
+ ApprovalProgram: `#pragma version 8
+txn ApplicationID
+bz end // Do nothing during create
+
+byte "global-key"
+int 0xdecaf
+app_global_put
+byte "global-key"
+byte "welt am draht"
+app_global_put
+
+end:
+ int 1
+`,
+ ClearStateProgram: `#pragma version 8
+int 1`,
+ })
+
+ op, err := logic.AssembleString(createTxn.ApprovalProgram.(string))
+ require.NoError(t, err)
+ progHash := crypto.Hash(op.Program)
+
+ globalStateCall := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ })
+
+ txntest.Group(&createTxn, &globalStateCall)
+
+ signedCreate := createTxn.Txn().Sign(sender.Sk)
+ signedGlobalStateCall := globalStateCall.Txn().Sign(sender.Sk)
+
+ return simulationTestCase{
+ input: simulation.Request{
+ TxnGroups: [][]transactions.SignedTxn{
+ {signedCreate, signedGlobalStateCall},
+ },
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ },
+ developerAPI: true,
+ expected: simulation.Result{
+ Version: simulation.ResultLatestVersion,
+ LastRound: env.TxnInfo.LatestRound(),
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ TxnGroups: []simulation.TxnGroupResult{
+ {
+ Txns: []simulation.TxnResult{
+ // App creation
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ ApplicationID: futureAppID,
+ },
+ },
+ AppBudgetConsumed: 4,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ },
+ {
+ PC: 14,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ {
+ PC: 16,
+ StackPopCount: 1,
+ },
+ {
+ PC: 42,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // Global
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ EvalDelta: transactions.EvalDelta{
+ GlobalDelta: basics.StateDelta{
+ "global-key": basics.ValueDelta{
+ Bytes: "welt am draht",
+ Action: basics.SetBytesAction,
+ },
+ },
+ },
+ },
+ },
+ AppBudgetConsumed: 10,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ },
+ {
+ PC: 14,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: uint64(futureAppID),
+ },
+ },
+ },
+ {
+ PC: 16,
+ StackPopCount: 1,
+ },
+ {
+ PC: 19,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global-key",
+ },
+ },
+ },
+ {
+ PC: 20,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 0xdecaf,
+ },
+ },
+ },
+ {
+ PC: 24,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.GlobalState,
+ AppID: futureAppID,
+ Key: "global-key",
+ NewValue: basics.TealValue{
+ Type: basics.TealUintType,
+ Uint: 0xdecaf,
+ },
+ },
+ },
+ StackPopCount: 2,
+ },
+ {
+ PC: 25,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global-key",
+ },
+ },
+ },
+ {
+ PC: 26,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "welt am draht",
+ },
+ },
+ },
+ {
+ PC: 41,
+ StackPopCount: 2,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.GlobalState,
+ AppID: futureAppID,
+ Key: "global-key",
+ NewValue: basics.TealValue{
+ Type: basics.TealBytesType,
+ Bytes: "welt am draht",
+ },
+ },
+ },
+ },
+ {
+ PC: 42,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ },
+ AppBudgetAdded: 1400,
+ AppBudgetConsumed: 14,
+ },
+ },
+ },
+ }
+ })
+}
+
+func TestGlobalStateTypeChangeFailure(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ simulationTest(t, func(env simulationtesting.Environment) simulationTestCase {
+ sender := env.Accounts[0]
+
+ futureAppID := basics.AppIndex(1001)
+
+ createTxn := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: 0,
+ GlobalStateSchema: basics.StateSchema{NumUint: 1},
+ ApprovalProgram: `#pragma version 8
+txn ApplicationID
+bz end // Do nothing during create
+
+byte "global-key"
+byte "I pretend myself as an uint"
+app_global_put
+
+end:
+ int 1
+`,
+ ClearStateProgram: `#pragma version 8
+int 1`,
+ })
+
+ op, err := logic.AssembleString(createTxn.ApprovalProgram.(string))
+ require.NoError(t, err)
+ progHash := crypto.Hash(op.Program)
+
+ globalStateCall := env.TxnInfo.NewTxn(txntest.Txn{
+ Type: protocol.ApplicationCallTx,
+ Sender: sender.Addr,
+ ApplicationID: futureAppID,
+ })
+
+ txntest.Group(&createTxn, &globalStateCall)
+
+ signedCreate := createTxn.Txn().Sign(sender.Sk)
+ signedGlobalStateCall := globalStateCall.Txn().Sign(sender.Sk)
+
+ return simulationTestCase{
+ input: simulation.Request{
+ TxnGroups: [][]transactions.SignedTxn{
+ {signedCreate, signedGlobalStateCall},
+ },
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ },
+ developerAPI: true,
+ expectedError: "store bytes count 1 exceeds schema bytes count 0.",
+ expected: simulation.Result{
+ Version: simulation.ResultLatestVersion,
+ LastRound: env.TxnInfo.LatestRound(),
+ TraceConfig: simulation.ExecTraceConfig{
+ Enable: true,
+ Stack: true,
+ Scratch: true,
+ State: true,
+ },
+ TxnGroups: []simulation.TxnGroupResult{
+ {
+ FailedAt: simulation.TxnPath{1},
+ Txns: []simulation.TxnResult{
+ // App creation
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ ApplicationID: futureAppID,
+ },
+ },
+ AppBudgetConsumed: 3,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ },
+ },
+ },
+ {
+ PC: 3,
+ StackPopCount: 1,
+ },
+ {
+ PC: 48,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: 1,
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ // Global
+ {
+ Txn: transactions.SignedTxnWithAD{
+ ApplyData: transactions.ApplyData{
+ EvalDelta: transactions.EvalDelta{
+ GlobalDelta: basics.StateDelta{
+ "global-key": basics.ValueDelta{
+ Bytes: "I pretend myself as an uint",
+ Action: basics.SetBytesAction,
+ },
+ },
+ },
+ },
+ },
+ AppBudgetConsumed: 5,
+ Trace: &simulation.TransactionTrace{
+ ApprovalProgramTrace: []simulation.OpcodeTraceUnit{
+ {
+ PC: 1,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealUintType,
+ Uint: uint64(futureAppID),
+ },
+ },
+ },
+ {
+ PC: 3,
+ StackPopCount: 1,
+ },
+ {
+ PC: 6,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "global-key",
+ },
+ },
+ },
+ {
+ PC: 18,
+ StackAdded: []basics.TealValue{
+ {
+ Type: basics.TealBytesType,
+ Bytes: "I pretend myself as an uint",
+ },
+ },
+ },
+ {
+ PC: 47,
+ StackPopCount: 2,
+ StateChanges: []simulation.StateOperation{
+ {
+ AppStateOp: logic.AppStateWrite,
+ AppState: logic.GlobalState,
+ AppID: futureAppID,
+ Key: "global-key",
+ },
+ },
+ },
+ },
+ ApprovalProgramHash: progHash,
+ },
+ },
+ },
+ AppBudgetAdded: 1400,
+ AppBudgetConsumed: 8,
+ },
+ },
+ },
+ }
+ })
+}
+
// TestBalanceChangesWithApp sends a payment transaction to a new account and confirms its balance
// within a subsequent app call
func TestBalanceChangesWithApp(t *testing.T) {
diff --git a/ledger/simulation/trace.go b/ledger/simulation/trace.go
index c8d206736c..7861292830 100644
--- a/ledger/simulation/trace.go
+++ b/ledger/simulation/trace.go
@@ -130,6 +130,7 @@ type ExecTraceConfig struct {
Enable bool `codec:"enable"`
Stack bool `codec:"stack-change"`
Scratch bool `codec:"scratch-change"`
+ State bool `codec:"state-change"`
}
// Result contains the result from a call to Simulator.Simulate
@@ -153,6 +154,9 @@ func (r Result) ReturnStackChange() bool { return r.TraceConfig.Stack }
// ReturnScratchChange tells if the simulation runs with scratch-change enabled.
func (r Result) ReturnScratchChange() bool { return r.TraceConfig.Scratch }
+// ReturnStateChange tells if the simulation runs with state-change enabled.
+func (r Result) ReturnStateChange() bool { return r.TraceConfig.State }
+
// validateSimulateRequest first checks relation between request and config variables, including developerAPI:
// if `developerAPI` provided is turned off, this method would:
// - error on asking for exec trace
@@ -179,6 +183,13 @@ func validateSimulateRequest(request Request, developerAPI bool) error {
},
}
}
+ if request.TraceConfig.State {
+ return InvalidRequestError{
+ SimulatorError{
+ err: fmt.Errorf("basic trace must be enabled when enabling app state change tracing"),
+ },
+ }
+ }
}
return nil
}
@@ -218,6 +229,29 @@ type ScratchChange struct {
NewValue basics.TealValue
}
+// StateOperation represents an operation into an app local/global/box state
+type StateOperation struct {
+ // AppStateOp is one of logic.AppStateOpEnum, standing for either write or delete.
+ AppStateOp logic.AppStateOpEnum
+
+ // AppState is one of logic.AppStateEnum, standing for one of global/local/box.
+ AppState logic.AppStateEnum
+
+ // AppID is the current app's ID.
+ AppID basics.AppIndex
+
+ // Key is the app state kv-pair's key, directly casting byte slice to string.
+ Key string
+
+ // NewValue is the value write to the app's state.
+ // NOTE: if the current app state operation is del, then this value is basics.TealValue{}.
+ NewValue basics.TealValue
+
+ // Account is the account associated to the local state an app writes to.
+ // NOTE: if the current app state is not local, then this value is basics.Address{}.
+ Account basics.Address
+}
+
// OpcodeTraceUnit contains the trace effects of a single opcode evaluation.
type OpcodeTraceUnit struct {
// The PC of the opcode being evaluated
@@ -236,6 +270,9 @@ type OpcodeTraceUnit struct {
// ScratchSlotChanges stands for write operations into scratch slots
ScratchSlotChanges []ScratchChange
+
+ // StateChanges stands for the creation/reading/writing/deletion operations to app's state
+ StateChanges []StateOperation
}
// TransactionTrace contains the trace effects of a single transaction evaluation (including its inners)
diff --git a/ledger/simulation/tracer.go b/ledger/simulation/tracer.go
index e3fedcb47a..0d5f2eb5c1 100644
--- a/ledger/simulation/tracer.go
+++ b/ledger/simulation/tracer.go
@@ -307,6 +307,9 @@ func (tracer *evalTracer) BeforeOpcode(cx *logic.EvalContext) {
if tracer.result.ReturnScratchChange() {
tracer.recordChangedScratchSlots(cx)
}
+ if tracer.result.ReturnStateChange() {
+ latestOpcodeTraceUnit.appendStateOperations(cx)
+ }
}
}
@@ -321,6 +324,20 @@ func (o *OpcodeTraceUnit) appendAddedStackValue(cx *logic.EvalContext, tracer *e
}
}
+func (o *OpcodeTraceUnit) appendStateOperations(cx *logic.EvalContext) {
+ if cx.GetOpSpec().StateExplain == nil {
+ return
+ }
+ appState, stateOp, appID, acctAddr, stateKey := cx.GetOpSpec().StateExplain(cx)
+ o.StateChanges = append(o.StateChanges, StateOperation{
+ AppStateOp: stateOp,
+ AppState: appState,
+ AppID: appID,
+ Key: stateKey,
+ Account: acctAddr,
+ })
+}
+
func (tracer *evalTracer) recordChangedScratchSlots(cx *logic.EvalContext) {
currentOpcodeName := cx.GetOpSpec().Name
last := len(cx.Stack) - 1
@@ -357,11 +374,18 @@ func (tracer *evalTracer) recordUpdatedScratchVars(cx *logic.EvalContext) []Scra
return changes
}
+func (o *OpcodeTraceUnit) updateNewStateValues(cx *logic.EvalContext) {
+ for i, sc := range o.StateChanges {
+ o.StateChanges[i].NewValue = logic.AppNewStateQuerying(
+ cx, sc.AppState, sc.AppStateOp, sc.AppID, sc.Account, sc.Key)
+ }
+}
+
func (tracer *evalTracer) AfterOpcode(cx *logic.EvalContext, evalError error) {
groupIndex := cx.GroupIndex()
// NOTE: only when we have no evalError on current opcode,
- // we can proceed for recording stack chaange
+ // we can proceed for recording stack change
if evalError == nil && tracer.result.ReturnTrace() {
var txnTrace *TransactionTrace
if cx.RunMode() == logic.ModeSig {
@@ -377,6 +401,9 @@ func (tracer *evalTracer) AfterOpcode(cx *logic.EvalContext, evalError error) {
if tracer.result.ReturnScratchChange() {
latestOpcodeTraceUnit.ScratchSlotChanges = tracer.recordUpdatedScratchVars(cx)
}
+ if tracer.result.ReturnStateChange() {
+ latestOpcodeTraceUnit.updateNewStateValues(cx)
+ }
}
if cx.RunMode() == logic.ModeApp {
@@ -397,47 +424,48 @@ func (tracer *evalTracer) AfterOpcode(cx *logic.EvalContext, evalError error) {
func (tracer *evalTracer) BeforeProgram(cx *logic.EvalContext) {
groupIndex := cx.GroupIndex()
- // Before Program, activated for logic sig, happens before txn group execution
- // we should create trace object for this txn result
- if cx.RunMode() == logic.ModeSig {
+ switch cx.RunMode() {
+ case logic.ModeSig:
+ // Before Program, activated for logic sig, happens before txn group execution
+ // we should create trace object for this txn result
if tracer.result.ReturnTrace() {
tracer.result.TxnGroups[0].Txns[groupIndex].Trace = &TransactionTrace{}
traceRef := tracer.result.TxnGroups[0].Txns[groupIndex].Trace
traceRef.programTraceRef = &traceRef.LogicSigTrace
traceRef.LogicSigHash = crypto.Hash(cx.GetProgram())
}
- }
-
- if cx.RunMode() == logic.ModeApp && tracer.result.ReturnTrace() {
- txnTraceStackElem := tracer.execTraceStack[len(tracer.execTraceStack)-1]
- currentTxn := cx.EvalParams.TxnGroup[groupIndex]
- programHash := crypto.Hash(cx.GetProgram())
+ case logic.ModeApp:
+ if tracer.result.ReturnTrace() {
+ txnTraceStackElem := tracer.execTraceStack[len(tracer.execTraceStack)-1]
+ currentTxn := cx.EvalParams.TxnGroup[groupIndex]
+ programHash := crypto.Hash(cx.GetProgram())
- switch currentTxn.Txn.ApplicationCallTxnFields.OnCompletion {
- case transactions.ClearStateOC:
- txnTraceStackElem.ClearStateProgramHash = programHash
- default:
- txnTraceStackElem.ApprovalProgramHash = programHash
+ switch currentTxn.Txn.ApplicationCallTxnFields.OnCompletion {
+ case transactions.ClearStateOC:
+ txnTraceStackElem.ClearStateProgramHash = programHash
+ default:
+ txnTraceStackElem.ApprovalProgramHash = programHash
+ }
}
- }
- if cx.RunMode() == logic.ModeApp && tracer.unnamedResourcePolicy != nil {
- globalSharing := false
- for iter := cx; iter != nil; iter = iter.GetCaller() {
- if iter.ProgramVersion() >= 9 {
- // If some caller in the app callstack allows global sharing, global resources can
- // be accessed here. Otherwise the top-level txn must declare all resources locally.
- globalSharing = true
- break
+ if tracer.unnamedResourcePolicy != nil {
+ globalSharing := false
+ for iter := cx; iter != nil; iter = iter.GetCaller() {
+ if iter.ProgramVersion() >= 9 {
+ // If some caller in the app callstack allows global sharing, global resources can
+ // be accessed here. Otherwise the top-level txn must declare all resources locally.
+ globalSharing = true
+ break
+ }
}
+ tracer.unnamedResourcePolicy.globalSharing = globalSharing
+ tracer.unnamedResourcePolicy.programVersion = cx.ProgramVersion()
+ if tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget == nil {
+ s := cx.SurplusReadBudget
+ tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget = &s
+ }
+ cx.SetIOBudget(tracer.unnamedResourcePolicy.tracker.maxPossibleBoxIOBudget(cx.Proto.BytesPerBoxReference))
}
- tracer.unnamedResourcePolicy.globalSharing = globalSharing
- tracer.unnamedResourcePolicy.programVersion = cx.ProgramVersion()
- if tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget == nil {
- s := cx.SurplusReadBudget
- tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget = &s
- }
- cx.SetIOBudget(tracer.unnamedResourcePolicy.tracker.maxPossibleBoxIOBudget(cx.Proto.BytesPerBoxReference))
}
}
diff --git a/test/e2e-go/restAPI/restClient_test.go b/test/e2e-go/restAPI/restClient_test.go
index 4ca9b8d611..94441d92c6 100644
--- a/test/e2e-go/restAPI/restClient_test.go
+++ b/test/e2e-go/restAPI/restClient_test.go
@@ -2269,9 +2269,9 @@ func TestMaxDepthAppWithPCandStackTrace(t *testing.T) {
futureAppID := basics.AppIndex(*submittedAppCreateTxn.ApplicationIndex)
// fund app account
- appFundTxn, err := testClient.SendPaymentFromWallet(
- wh, nil, senderAddress, futureAppID.Address().String(),
- 0, MinBalance*uint64(MaxDepth+1), nil, "", 0, 0,
+ appFundTxn, err := testClient.ConstructPayment(
+ senderAddress, futureAppID.Address().String(),
+ 0, MinBalance*uint64(MaxDepth+1), nil, "", [32]byte{}, 0, 0,
)
a.NoError(err)
@@ -3117,7 +3117,7 @@ func TestSimulateScratchSlotChange(t *testing.T) {
futureAppID := basics.AppIndex(*submittedAppCreateTxn.ApplicationIndex)
// fund app account
- appFundTxn, err := testClient.SendPaymentFromWallet(
+ _, err = testClient.SendPaymentFromWallet(
wh, nil, senderAddress, futureAppID.Address().String(),
0, MinBalance, nil, "", 0, 0,
)
@@ -3131,14 +3131,6 @@ func TestSimulateScratchSlotChange(t *testing.T) {
appCallTxn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, MinFee, appCallTxn)
a.NoError(err)
- // Group the transactions
- gid, err := testClient.GroupID([]transactions.Transaction{appFundTxn, appCallTxn})
- a.NoError(err)
- appFundTxn.Group = gid
- appCallTxn.Group = gid
-
- appFundTxnSigned, err := testClient.SignTransactionWithWallet(wh, nil, appFundTxn)
- a.NoError(err)
appCallTxnSigned, err := testClient.SignTransactionWithWallet(wh, nil, appCallTxn)
a.NoError(err)
@@ -3149,7 +3141,7 @@ func TestSimulateScratchSlotChange(t *testing.T) {
}
simulateRequest := v2.PreEncodedSimulateRequest{
TxnGroups: []v2.PreEncodedSimulateRequestTransactionGroup{
- {Txns: []transactions.SignedTxn{appFundTxnSigned, appCallTxnSigned}},
+ {Txns: []transactions.SignedTxn{appCallTxnSigned}},
},
ExecTraceConfig: execTraceConfig,
}
@@ -3167,7 +3159,7 @@ func TestSimulateScratchSlotChange(t *testing.T) {
// simulate with wrong config (not enabled trace), see expected error
_, err = testClient.SimulateTransactions(v2.PreEncodedSimulateRequest{
TxnGroups: []v2.PreEncodedSimulateRequestTransactionGroup{
- {Txns: []transactions.SignedTxn{appFundTxnSigned, appCallTxnSigned}},
+ {Txns: []transactions.SignedTxn{appCallTxnSigned}},
},
ExecTraceConfig: simulation.ExecTraceConfig{Scratch: true},
})
@@ -3179,9 +3171,8 @@ func TestSimulateScratchSlotChange(t *testing.T) {
// check if resp match expected result
a.Equal(execTraceConfig, resp.ExecTraceConfig)
- a.Len(resp.TxnGroups[0].Txns, 2)
- a.Nil(resp.TxnGroups[0].Txns[0].TransactionTrace)
- a.NotNil(resp.TxnGroups[0].Txns[1].TransactionTrace)
+ a.Len(resp.TxnGroups[0].Txns, 1)
+ a.NotNil(resp.TxnGroups[0].Txns[0].TransactionTrace)
expectedTraceSecondTxn := &model.SimulationTransactionExecTrace{
ApprovalProgramTrace: &[]model.SimulationOpcodeTraceUnit{
@@ -3219,7 +3210,290 @@ func TestSimulateScratchSlotChange(t *testing.T) {
},
ApprovalProgramHash: toPtr(approvalHash.ToSlice()),
}
- a.Equal(expectedTraceSecondTxn, resp.TxnGroups[0].Txns[1].TransactionTrace)
+ a.Equal(expectedTraceSecondTxn, resp.TxnGroups[0].Txns[0].TransactionTrace)
+}
+
+func TestSimulateExecTraceStateChange(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ a := require.New(fixtures.SynchronizedTest(t))
+ var localFixture fixtures.RestClientFixture
+ localFixture.SetupNoStart(t, filepath.Join("nettemplates", "OneNodeFuture.json"))
+
+ // Get primary node
+ primaryNode, err := fixture.GetNodeController("Primary")
+ a.NoError(err)
+
+ fixture.Start()
+ defer primaryNode.FullStop()
+
+ // get lib goal client
+ testClient := fixture.LibGoalFixture.GetLibGoalClientFromNodeController(primaryNode)
+
+ _, err = testClient.WaitForRound(1)
+ a.NoError(err)
+
+ wh, err := testClient.GetUnencryptedWalletHandle()
+ a.NoError(err)
+ addresses, err := testClient.ListAddresses(wh)
+ a.NoError(err)
+ _, senderAddress := getMaxBalAddr(t, testClient, addresses)
+ a.NotEmpty(senderAddress, "no addr with funds")
+
+ addressDigest, err := basics.UnmarshalChecksumAddress(senderAddress)
+ a.NoError(err)
+
+ ops, err := logic.AssembleString(
+ `#pragma version 8
+txn ApplicationID
+bz end // Do nothing during create
+
+txn OnCompletion
+int OptIn
+==
+bnz end // Always allow optin
+
+byte "local"
+byte "global"
+txn ApplicationArgs 0
+match local global
+err // Unknown command
+
+local:
+ txn Sender
+ byte "local-int-key"
+ int 0xcafeb0ba
+ app_local_put
+ int 0
+ byte "local-bytes-key"
+ byte "xqcL"
+ app_local_put
+ b end
+
+global:
+ byte "global-int-key"
+ int 0xdeadbeef
+ app_global_put
+ byte "global-bytes-key"
+ byte "welt am draht"
+ app_global_put
+ b end
+
+end:
+ int 1`)
+ a.NoError(err)
+ approval := ops.Program
+ approvalHash := crypto.Hash(approval)
+
+ ops, err = logic.AssembleString("#pragma version 8\nint 1")
+ a.NoError(err)
+ clearState := ops.Program
+
+ gl := basics.StateSchema{NumByteSlice: 1, NumUint: 1}
+ lc := basics.StateSchema{NumByteSlice: 1, NumUint: 1}
+
+ MinFee := config.Consensus[protocol.ConsensusFuture].MinTxnFee
+ MinBalance := config.Consensus[protocol.ConsensusFuture].MinBalance
+
+ // create app and get the application ID
+ appCreateTxn, err := testClient.MakeUnsignedAppCreateTx(
+ transactions.NoOpOC, approval, clearState, gl,
+ lc, nil, nil, nil, nil, nil, 0)
+ a.NoError(err)
+ appCreateTxn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, 0, appCreateTxn)
+ a.NoError(err)
+
+ appCreateTxID, err := testClient.SignAndBroadcastTransaction(wh, nil, appCreateTxn)
+ a.NoError(err)
+ submittedAppCreateTxn, err := waitForTransaction(t, testClient, senderAddress, appCreateTxID, 30*time.Second)
+ a.NoError(err)
+ futureAppID := basics.AppIndex(*submittedAppCreateTxn.ApplicationIndex)
+
+ // fund app account
+ _, err = testClient.ConstructPayment(
+ senderAddress, futureAppID.Address().String(),
+ 0, MinBalance*2, nil, "", [32]byte{}, 0, 0,
+ )
+ a.NoError(err)
+
+ // construct app call "global"
+ appCallGlobalTxn, err := testClient.MakeUnsignedAppNoOpTx(
+ uint64(futureAppID), [][]byte{[]byte("global")}, nil, nil, nil, nil,
+ )
+ a.NoError(err)
+ appCallGlobalTxn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, MinFee, appCallGlobalTxn)
+ a.NoError(err)
+ // construct app optin
+ appOptInTxn, err := testClient.MakeUnsignedAppOptInTx(uint64(futureAppID), nil, nil, nil, nil, nil)
+ a.NoError(err)
+ appOptInTxn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, MinFee, appOptInTxn)
+ // construct app call "global"
+ appCallLocalTxn, err := testClient.MakeUnsignedAppNoOpTx(
+ uint64(futureAppID), [][]byte{[]byte("local")}, nil, nil, nil, nil,
+ )
+ a.NoError(err)
+ appCallLocalTxn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, MinFee, appCallLocalTxn)
+ a.NoError(err)
+
+ gid, err := testClient.GroupID([]transactions.Transaction{appCallGlobalTxn, appOptInTxn, appCallLocalTxn})
+ a.NoError(err)
+ appCallGlobalTxn.Group = gid
+ appOptInTxn.Group = gid
+ appCallLocalTxn.Group = gid
+
+ appCallTxnGlobalSigned, err := testClient.SignTransactionWithWallet(wh, nil, appCallGlobalTxn)
+ a.NoError(err)
+ appOptInSigned, err := testClient.SignTransactionWithWallet(wh, nil, appOptInTxn)
+ a.NoError(err)
+ appCallTxnLocalSigned, err := testClient.SignTransactionWithWallet(wh, nil, appCallLocalTxn)
+ a.NoError(err)
+
+ // construct simulation request, with state change enabled
+ execTraceConfig := simulation.ExecTraceConfig{
+ Enable: true,
+ State: true,
+ }
+ simulateRequest := v2.PreEncodedSimulateRequest{
+ TxnGroups: []v2.PreEncodedSimulateRequestTransactionGroup{
+ {Txns: []transactions.SignedTxn{appCallTxnGlobalSigned, appOptInSigned, appCallTxnLocalSigned}},
+ },
+ ExecTraceConfig: execTraceConfig,
+ }
+
+ // update the configuration file to enable EnableDeveloperAPI
+ err = primaryNode.FullStop()
+ a.NoError(err)
+ cfg, err := config.LoadConfigFromDisk(primaryNode.GetDataDir())
+ a.NoError(err)
+ cfg.EnableDeveloperAPI = true
+ err = cfg.SaveToDisk(primaryNode.GetDataDir())
+ require.NoError(t, err)
+ fixture.Start()
+
+ // start real simulating
+ resp, err := testClient.SimulateTransactions(simulateRequest)
+ a.NoError(err)
+
+ // assertions
+ a.Len(resp.TxnGroups, 1)
+ a.Nil(resp.TxnGroups[0].FailureMessage)
+ a.Len(resp.TxnGroups[0].Txns, 3)
+
+ for i := 0; i < 3; i++ {
+ a.NotNil(resp.TxnGroups[0].Txns[i].TransactionTrace.ApprovalProgramHash)
+ a.Equal(approvalHash.ToSlice(), *resp.TxnGroups[0].Txns[i].TransactionTrace.ApprovalProgramHash)
+ }
+
+ a.Equal([]model.SimulationOpcodeTraceUnit{
+ {Pc: 1},
+ {Pc: 4},
+ {Pc: 6},
+ {Pc: 9},
+ {Pc: 11},
+ {Pc: 12},
+ {Pc: 13},
+ {Pc: 16},
+ {Pc: 23},
+ {Pc: 31},
+ {Pc: 34},
+ {Pc: 94},
+ {Pc: 110},
+ {
+ Pc: 116,
+ StateChanges: &[]model.ApplicationStateOperation{
+ {
+ Operation: "w",
+ AppStateType: "g",
+ Key: []byte("global-int-key"),
+ NewValue: &model.AvmValue{
+ Type: uint64(basics.TealUintType),
+ Uint: toPtr[uint64](0xdeadbeef),
+ },
+ },
+ },
+ },
+ {Pc: 117},
+ {Pc: 135},
+ {
+ Pc: 150,
+ StateChanges: &[]model.ApplicationStateOperation{
+ {
+ Operation: "w",
+ AppStateType: "g",
+ Key: []byte("global-bytes-key"),
+ NewValue: &model.AvmValue{
+ Type: uint64(basics.TealBytesType),
+ Bytes: toPtr([]byte("welt am draht")),
+ },
+ },
+ },
+ },
+ {Pc: 151},
+ {Pc: 154},
+ }, *resp.TxnGroups[0].Txns[0].TransactionTrace.ApprovalProgramTrace)
+ a.NotNil(resp.TxnGroups[0].Txns[1].TransactionTrace.ApprovalProgramHash)
+ a.Equal([]model.SimulationOpcodeTraceUnit{
+ {Pc: 1},
+ {Pc: 4},
+ {Pc: 6},
+ {Pc: 9},
+ {Pc: 11},
+ {Pc: 12},
+ {Pc: 13},
+ {Pc: 154},
+ }, *resp.TxnGroups[0].Txns[1].TransactionTrace.ApprovalProgramTrace)
+ a.Equal([]model.SimulationOpcodeTraceUnit{
+ {Pc: 1},
+ {Pc: 4},
+ {Pc: 6},
+ {Pc: 9},
+ {Pc: 11},
+ {Pc: 12},
+ {Pc: 13},
+ {Pc: 16},
+ {Pc: 23},
+ {Pc: 31},
+ {Pc: 34},
+ {Pc: 41},
+ {Pc: 43},
+ {Pc: 58},
+ {
+ Pc: 64,
+ StateChanges: &[]model.ApplicationStateOperation{
+ {
+ Operation: "w",
+ AppStateType: "l",
+ Key: []byte("local-int-key"),
+ NewValue: &model.AvmValue{
+ Type: uint64(basics.TealUintType),
+ Uint: toPtr[uint64](0xcafeb0ba),
+ },
+ Account: toPtr(addressDigest.String()),
+ },
+ },
+ },
+ {Pc: 65},
+ {Pc: 67},
+ {Pc: 84},
+ {
+ Pc: 90,
+ StateChanges: &[]model.ApplicationStateOperation{
+ {
+ Operation: "w",
+ AppStateType: "l",
+ Key: []byte("local-bytes-key"),
+ NewValue: &model.AvmValue{
+ Type: uint64(basics.TealBytesType),
+ Bytes: toPtr([]byte("xqcL")),
+ },
+ Account: toPtr(addressDigest.String()),
+ },
+ },
+ },
+ {Pc: 91},
+ {Pc: 154},
+ }, *resp.TxnGroups[0].Txns[2].TransactionTrace.ApprovalProgramTrace)
}
func TestSimulateWithUnnamedResources(t *testing.T) {
From 93161f4c92e8973ab449d1f88042e81e41aaf75d Mon Sep 17 00:00:00 2001
From: Nickolai Zeldovich
Date: Fri, 18 Aug 2023 11:32:54 -0400
Subject: [PATCH 3/8] ledger: fix rare race in TestCommitRoundIOError (#5674)
Co-authored-by: AlgoAxel <113933518+AlgoAxel@users.noreply.github.com>
---
ledger/tracker_test.go | 7 ++++---
logging/log_test.go | 7 ++++---
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/ledger/tracker_test.go b/ledger/tracker_test.go
index 87646f24a6..709d123d9e 100644
--- a/ledger/tracker_test.go
+++ b/ledger/tracker_test.go
@@ -20,6 +20,7 @@ import (
"bytes"
"context"
"sync"
+ "sync/atomic"
"testing"
"time"
@@ -376,9 +377,9 @@ func TestCommitRoundIOError(t *testing.T) {
// flip the flag when the exit handler is called,
// which happens when Fatal logging is called
- flag := false
+ var flag atomic.Bool
logging.RegisterExitHandler(func() {
- flag = true
+ flag.Store(true)
})
io := &ioErrorTracker{}
@@ -404,7 +405,7 @@ func TestCommitRoundIOError(t *testing.T) {
// confirm that after 100 blocks, the scheduled commit generated an error
// which triggered Fatal logging (and would therefore call any registered exit handlers)
- a.True(flag)
+ a.True(flag.Load())
}
func TestAccountUpdatesLedgerEvaluatorNoBlockHdr(t *testing.T) {
diff --git a/logging/log_test.go b/logging/log_test.go
index bf6db060c7..e16d62d733 100644
--- a/logging/log_test.go
+++ b/logging/log_test.go
@@ -19,6 +19,7 @@ package logging
import (
"bytes"
"encoding/json"
+ "sync/atomic"
"testing"
"github.com/algorand/go-algorand/test/partitiontest"
@@ -129,13 +130,13 @@ func TestFatalExitHandler(t *testing.T) {
nl := TestingLogWithoutFatalExit(t)
// Make an exit handler that sets a flag to demonstrate it was called
- flag := false
+ var flag atomic.Bool
RegisterExitHandler(func() {
- flag = true
+ flag.Store(true)
})
nl.Fatal("OH NO")
// Check that the exit handler was called
- require.True(t, flag)
+ require.True(t, flag.Load())
}
From 9f74a55baea1f0676f4f39d8e14aec73e24c6eae Mon Sep 17 00:00:00 2001
From: yossigi
Date: Fri, 18 Aug 2023 13:11:23 -0400
Subject: [PATCH 4/8] clocks: tagged deadlines (#5649)
Co-authored-by: Nickolai Zeldovich
Co-authored-by: chris erway
Co-authored-by: cce <51567+cce@users.noreply.github.com>
Co-authored-by: Pavel Zbitskiy <65323360+algorandskiy@users.noreply.github.com>
---
agreement/agreementtest/simulate.go | 9 +-
agreement/demux.go | 7 +-
agreement/demux_test.go | 10 +-
agreement/fuzzer/fuzzer_test.go | 4 +-
agreement/fuzzer/networkFacade_test.go | 9 +-
agreement/msgp_gen.go | 286 ++++++++++++++++++++++---
agreement/msgp_gen_test.go | 60 ++++++
agreement/persistence.go | 14 +-
agreement/persistence_test.go | 44 ++--
agreement/player.go | 22 +-
agreement/player_test.go | 2 +-
agreement/service.go | 14 +-
agreement/service_test.go | 207 ++++++++++--------
agreement/types.go | 25 +++
node/node.go | 6 +-
util/timers/frozen.go | 22 +-
util/timers/interface.go | 13 +-
util/timers/monotonic.go | 54 +++--
util/timers/monotonic_test.go | 85 ++++++--
19 files changed, 650 insertions(+), 243 deletions(-)
diff --git a/agreement/agreementtest/simulate.go b/agreement/agreementtest/simulate.go
index 8d8b713c68..408b44a29a 100644
--- a/agreement/agreementtest/simulate.go
+++ b/agreement/agreementtest/simulate.go
@@ -31,7 +31,6 @@ import (
"github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/data/basics"
"github.com/algorand/go-algorand/logging"
- "github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/util/db"
"github.com/algorand/go-algorand/util/timers"
)
@@ -52,7 +51,7 @@ func makeInstant() *instant {
return i
}
-func (i *instant) Decode([]byte) (timers.Clock, error) {
+func (i *instant) Decode([]byte) (timers.Clock[agreement.TimeoutType], error) {
return i, nil
}
@@ -60,7 +59,7 @@ func (i *instant) Encode() []byte {
return nil
}
-func (i *instant) TimeoutAt(d time.Duration) <-chan time.Time {
+func (i *instant) TimeoutAt(d time.Duration, timeoutType agreement.TimeoutType) <-chan time.Time {
ta := make(chan time.Time)
select {
case <-i.timeoutAtCalled:
@@ -69,13 +68,13 @@ func (i *instant) TimeoutAt(d time.Duration) <-chan time.Time {
return ta
}
- if d == agreement.FilterTimeout(0, protocol.ConsensusCurrentVersion) && !i.HasPending("pseudonode") {
+ if timeoutType == agreement.TimeoutFilter && !i.HasPending("pseudonode") {
close(ta)
}
return ta
}
-func (i *instant) Zero() timers.Clock {
+func (i *instant) Zero() timers.Clock[agreement.TimeoutType] {
i.Z0 <- struct{}{}
// pause here until runRound is called
i.Z1 <- struct{}{}
diff --git a/agreement/demux.go b/agreement/demux.go
index f31c4d075d..c225396293 100644
--- a/agreement/demux.go
+++ b/agreement/demux.go
@@ -19,7 +19,6 @@ package agreement
import (
"context"
"fmt"
- "time"
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/logging"
@@ -190,7 +189,7 @@ func (d *demux) verifyBundle(ctx context.Context, m message, r round, p period,
// next blocks until it observes an external input event of interest for the state machine.
//
// If ok is false, there are no more events so the agreement service should quit.
-func (d *demux) next(s *Service, deadline time.Duration, fastDeadline time.Duration, currentRound round) (e externalEvent, ok bool) {
+func (d *demux) next(s *Service, deadline Deadline, fastDeadline Deadline, currentRound round) (e externalEvent, ok bool) {
defer func() {
if !ok {
return
@@ -250,8 +249,8 @@ func (d *demux) next(s *Service, deadline time.Duration, fastDeadline time.Durat
}
ledgerNextRoundCh := s.Ledger.Wait(nextRound)
- deadlineCh := s.Clock.TimeoutAt(deadline)
- fastDeadlineCh := s.Clock.TimeoutAt(fastDeadline)
+ deadlineCh := s.Clock.TimeoutAt(deadline.Duration, deadline.Type)
+ fastDeadlineCh := s.Clock.TimeoutAt(fastDeadline.Duration, fastDeadline.Type)
d.UpdateEventsQueue(eventQueueDemux, 0)
d.monitor.dec(demuxCoserviceType)
diff --git a/agreement/demux_test.go b/agreement/demux_test.go
index 027dbc9e13..c6aee6619c 100644
--- a/agreement/demux_test.go
+++ b/agreement/demux_test.go
@@ -422,14 +422,14 @@ func TestDemuxNext(t *testing.T) {
}
// implement timers.Clock
-func (t *demuxTester) Zero() timers.Clock {
+func (t *demuxTester) Zero() timers.Clock[TimeoutType] {
// we don't care about this function in this test.
return t
}
// implement timers.Clock
-func (t *demuxTester) TimeoutAt(delta time.Duration) <-chan time.Time {
- if delta == fastTimeoutChTime {
+func (t *demuxTester) TimeoutAt(delta time.Duration, timeoutType TimeoutType) <-chan time.Time {
+ if timeoutType == TimeoutFastRecovery {
return nil
}
@@ -450,7 +450,7 @@ func (t *demuxTester) Encode() []byte {
}
// implement timers.Clock
-func (t *demuxTester) Decode([]byte) (timers.Clock, error) {
+func (t *demuxTester) Decode([]byte) (timers.Clock[TimeoutType], error) {
// we don't care about this function in this test.
return t, nil
}
@@ -675,7 +675,7 @@ func (t *demuxTester) TestUsecase(testcase demuxTestUsecase) bool {
close(s.quit)
}
- e, ok := dmx.next(s, time.Second, fastTimeoutChTime, 300)
+ e, ok := dmx.next(s, Deadline{Duration: time.Second, Type: TimeoutDeadline}, Deadline{Duration: fastTimeoutChTime, Type: TimeoutFastRecovery}, 300)
if !assert.Equal(t, testcase.ok, ok) {
return false
diff --git a/agreement/fuzzer/fuzzer_test.go b/agreement/fuzzer/fuzzer_test.go
index 332b2fb87b..e505faa197 100644
--- a/agreement/fuzzer/fuzzer_test.go
+++ b/agreement/fuzzer/fuzzer_test.go
@@ -47,7 +47,7 @@ type Fuzzer struct {
wallClock int32
agreements []*agreement.Service
facades []*NetworkFacade
- clocks []timers.Clock
+ clocks []timers.Clock[agreement.TimeoutType]
disconnected [][]bool
crashAccessors []db.Accessor
router *Router
@@ -80,7 +80,7 @@ func MakeFuzzer(config FuzzerConfig) *Fuzzer {
networkName: config.FuzzerName,
agreements: make([]*agreement.Service, config.NodesCount),
facades: make([]*NetworkFacade, config.NodesCount),
- clocks: make([]timers.Clock, config.NodesCount),
+ clocks: make([]timers.Clock[agreement.TimeoutType], config.NodesCount),
disconnected: make([][]bool, config.NodesCount),
crashAccessors: make([]db.Accessor, config.NodesCount),
accounts: make([]account.Participation, config.NodesCount),
diff --git a/agreement/fuzzer/networkFacade_test.go b/agreement/fuzzer/networkFacade_test.go
index 6db2d88c2e..d18f8251dd 100644
--- a/agreement/fuzzer/networkFacade_test.go
+++ b/agreement/fuzzer/networkFacade_test.go
@@ -31,6 +31,7 @@ import (
"github.com/algorand/go-deadlock"
+ "github.com/algorand/go-algorand/agreement"
"github.com/algorand/go-algorand/network"
"github.com/algorand/go-algorand/protocol"
"github.com/algorand/go-algorand/util/timers"
@@ -48,7 +49,7 @@ type NetworkFacadeMessage struct {
type NetworkFacade struct {
network.GossipNode
NetworkFilter
- timers.Clock
+ timers.Clock[agreement.TimeoutType]
nodeID int
mux *network.Multiplexer
fuzzer *Fuzzer
@@ -345,7 +346,7 @@ func (n *NetworkFacade) Disconnect(sender network.Peer) {
n.fuzzer.Disconnect(n.nodeID, sourceNode)
}
-func (n *NetworkFacade) Zero() timers.Clock {
+func (n *NetworkFacade) Zero() timers.Clock[agreement.TimeoutType] {
n.clockSync.Lock()
defer n.clockSync.Unlock()
@@ -375,7 +376,7 @@ func (n *NetworkFacade) Rezero() {
// Since implements the Clock interface.
func (n *NetworkFacade) Since() time.Duration { return 0 }
-func (n *NetworkFacade) TimeoutAt(d time.Duration) <-chan time.Time {
+func (n *NetworkFacade) TimeoutAt(d time.Duration, timeoutType agreement.TimeoutType) <-chan time.Time {
defer n.timeoutAtInitOnce.Do(func() {
n.timeoutAtInitWait.Done()
})
@@ -414,7 +415,7 @@ func (n *NetworkFacade) Encode() []byte {
return buf.Bytes()
}
-func (n *NetworkFacade) Decode(in []byte) (timers.Clock, error) {
+func (n *NetworkFacade) Decode(in []byte) (timers.Clock[agreement.TimeoutType], error) {
n.clockSync.Lock()
defer n.clockSync.Unlock()
diff --git a/agreement/msgp_gen.go b/agreement/msgp_gen.go
index 19a803b759..d083edd8e8 100644
--- a/agreement/msgp_gen.go
+++ b/agreement/msgp_gen.go
@@ -34,6 +34,24 @@ import (
// |-----> (*) MsgIsZero
// |-----> ConsensusVersionViewMaxSize()
//
+// Deadline
+// |-----> (*) MarshalMsg
+// |-----> (*) CanMarshalMsg
+// |-----> (*) UnmarshalMsg
+// |-----> (*) CanUnmarshalMsg
+// |-----> (*) Msgsize
+// |-----> (*) MsgIsZero
+// |-----> DeadlineMaxSize()
+//
+// TimeoutType
+// |-----> MarshalMsg
+// |-----> CanMarshalMsg
+// |-----> (*) UnmarshalMsg
+// |-----> (*) CanUnmarshalMsg
+// |-----> Msgsize
+// |-----> MsgIsZero
+// |-----> TimeoutTypeMaxSize()
+//
// actionType
// |-----> MarshalMsg
// |-----> CanMarshalMsg
@@ -961,6 +979,183 @@ func ConsensusVersionViewMaxSize() (s int) {
return
}
+// MarshalMsg implements msgp.Marshaler
+func (z *Deadline) MarshalMsg(b []byte) (o []byte) {
+ o = msgp.Require(b, z.Msgsize())
+ // map header, size 2
+ // string "Duration"
+ o = append(o, 0x82, 0xa8, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e)
+ o = msgp.AppendDuration(o, (*z).Duration)
+ // string "Type"
+ o = append(o, 0xa4, 0x54, 0x79, 0x70, 0x65)
+ o = msgp.AppendInt8(o, int8((*z).Type))
+ return
+}
+
+func (_ *Deadline) CanMarshalMsg(z interface{}) bool {
+ _, ok := (z).(*Deadline)
+ return ok
+}
+
+// UnmarshalMsg implements msgp.Unmarshaler
+func (z *Deadline) UnmarshalMsg(bts []byte) (o []byte, err error) {
+ var field []byte
+ _ = field
+ var zb0001 int
+ var zb0002 bool
+ zb0001, zb0002, bts, err = msgp.ReadMapHeaderBytes(bts)
+ if _, ok := err.(msgp.TypeError); ok {
+ zb0001, zb0002, bts, err = msgp.ReadArrayHeaderBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ if zb0001 > 0 {
+ zb0001--
+ (*z).Duration, bts, err = msgp.ReadDurationBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "Duration")
+ return
+ }
+ }
+ if zb0001 > 0 {
+ zb0001--
+ {
+ var zb0003 int8
+ zb0003, bts, err = msgp.ReadInt8Bytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "Type")
+ return
+ }
+ (*z).Type = TimeoutType(zb0003)
+ }
+ }
+ if zb0001 > 0 {
+ err = msgp.ErrTooManyArrayFields(zb0001)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array")
+ return
+ }
+ }
+ } else {
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ if zb0002 {
+ (*z) = Deadline{}
+ }
+ for zb0001 > 0 {
+ zb0001--
+ field, bts, err = msgp.ReadMapKeyZC(bts)
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ switch string(field) {
+ case "Duration":
+ (*z).Duration, bts, err = msgp.ReadDurationBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "Duration")
+ return
+ }
+ case "Type":
+ {
+ var zb0004 int8
+ zb0004, bts, err = msgp.ReadInt8Bytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "Type")
+ return
+ }
+ (*z).Type = TimeoutType(zb0004)
+ }
+ default:
+ err = msgp.ErrNoField(string(field))
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ }
+ }
+ }
+ o = bts
+ return
+}
+
+func (_ *Deadline) CanUnmarshalMsg(z interface{}) bool {
+ _, ok := (z).(*Deadline)
+ return ok
+}
+
+// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
+func (z *Deadline) Msgsize() (s int) {
+ s = 1 + 9 + msgp.DurationSize + 5 + msgp.Int8Size
+ return
+}
+
+// MsgIsZero returns whether this is a zero value
+func (z *Deadline) MsgIsZero() bool {
+ return ((*z).Duration == 0) && ((*z).Type == 0)
+}
+
+// MaxSize returns a maximum valid message size for this message type
+func DeadlineMaxSize() (s int) {
+ s = 1 + 9 + msgp.DurationSize + 5 + msgp.Int8Size
+ return
+}
+
+// MarshalMsg implements msgp.Marshaler
+func (z TimeoutType) MarshalMsg(b []byte) (o []byte) {
+ o = msgp.Require(b, z.Msgsize())
+ o = msgp.AppendInt8(o, int8(z))
+ return
+}
+
+func (_ TimeoutType) CanMarshalMsg(z interface{}) bool {
+ _, ok := (z).(TimeoutType)
+ if !ok {
+ _, ok = (z).(*TimeoutType)
+ }
+ return ok
+}
+
+// UnmarshalMsg implements msgp.Unmarshaler
+func (z *TimeoutType) UnmarshalMsg(bts []byte) (o []byte, err error) {
+ {
+ var zb0001 int8
+ zb0001, bts, err = msgp.ReadInt8Bytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err)
+ return
+ }
+ (*z) = TimeoutType(zb0001)
+ }
+ o = bts
+ return
+}
+
+func (_ *TimeoutType) CanUnmarshalMsg(z interface{}) bool {
+ _, ok := (z).(*TimeoutType)
+ return ok
+}
+
+// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
+func (z TimeoutType) Msgsize() (s int) {
+ s = msgp.Int8Size
+ return
+}
+
+// MsgIsZero returns whether this is a zero value
+func (z TimeoutType) MsgIsZero() bool {
+ return z == 0
+}
+
+// MaxSize returns a maximum valid message size for this message type
+func TimeoutTypeMaxSize() (s int) {
+ s = msgp.Int8Size
+ return
+}
+
// MarshalMsg implements msgp.Marshaler
func (z actionType) MarshalMsg(b []byte) (o []byte) {
o = msgp.Require(b, z.Msgsize())
@@ -3753,31 +3948,46 @@ func PeriodRouterMaxSize() (s int) {
// MarshalMsg implements msgp.Marshaler
func (z *player) MarshalMsg(b []byte) (o []byte) {
o = msgp.Require(b, z.Msgsize())
- // map header, size 8
- // string "Deadline"
- o = append(o, 0x88, 0xa8, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65)
- o = msgp.AppendDuration(o, (*z).Deadline)
- // string "FastRecoveryDeadline"
- o = append(o, 0xb4, 0x46, 0x61, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65)
- o = msgp.AppendDuration(o, (*z).FastRecoveryDeadline)
- // string "LastConcluding"
- o = append(o, 0xae, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67)
- o = msgp.AppendUint64(o, uint64((*z).LastConcluding))
- // string "Napping"
- o = append(o, 0xa7, 0x4e, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67)
- o = msgp.AppendBool(o, (*z).Napping)
- // string "Pending"
- o = append(o, 0xa7, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67)
- o = (*z).Pending.MarshalMsg(o)
- // string "Period"
- o = append(o, 0xa6, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64)
- o = msgp.AppendUint64(o, uint64((*z).Period))
- // string "Round"
- o = append(o, 0xa5, 0x52, 0x6f, 0x75, 0x6e, 0x64)
- o = (*z).Round.MarshalMsg(o)
- // string "Step"
- o = append(o, 0xa4, 0x53, 0x74, 0x65, 0x70)
- o = msgp.AppendUint64(o, uint64((*z).Step))
+ // omitempty: check for empty values
+ zb0001Len := uint32(9)
+ var zb0001Mask uint16 /* 10 bits */
+ if (*z).OldDeadline == 0 {
+ zb0001Len--
+ zb0001Mask |= 0x1
+ }
+ // variable map header, size zb0001Len
+ o = append(o, 0x80|uint8(zb0001Len))
+ if zb0001Len != 0 {
+ if (zb0001Mask & 0x1) == 0 { // if not empty
+ // string "Deadline"
+ o = append(o, 0xa8, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65)
+ o = msgp.AppendDuration(o, (*z).OldDeadline)
+ }
+ // string "FastRecoveryDeadline"
+ o = append(o, 0xb4, 0x46, 0x61, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65)
+ o = msgp.AppendDuration(o, (*z).FastRecoveryDeadline)
+ // string "LastConcluding"
+ o = append(o, 0xae, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67)
+ o = msgp.AppendUint64(o, uint64((*z).LastConcluding))
+ // string "Napping"
+ o = append(o, 0xa7, 0x4e, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67)
+ o = msgp.AppendBool(o, (*z).Napping)
+ // string "Pending"
+ o = append(o, 0xa7, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67)
+ o = (*z).Pending.MarshalMsg(o)
+ // string "Period"
+ o = append(o, 0xa6, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64)
+ o = msgp.AppendUint64(o, uint64((*z).Period))
+ // string "Round"
+ o = append(o, 0xa5, 0x52, 0x6f, 0x75, 0x6e, 0x64)
+ o = (*z).Round.MarshalMsg(o)
+ // string "Step"
+ o = append(o, 0xa4, 0x53, 0x74, 0x65, 0x70)
+ o = msgp.AppendUint64(o, uint64((*z).Step))
+ // string "TimersDeadline"
+ o = append(o, 0xae, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x73, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65)
+ o = (*z).Deadline.MarshalMsg(o)
+ }
return
}
@@ -3845,12 +4055,20 @@ func (z *player) UnmarshalMsg(bts []byte) (o []byte, err error) {
}
if zb0001 > 0 {
zb0001--
- (*z).Deadline, bts, err = msgp.ReadDurationBytes(bts)
+ bts, err = (*z).Deadline.UnmarshalMsg(bts)
if err != nil {
err = msgp.WrapError(err, "struct-from-array", "Deadline")
return
}
}
+ if zb0001 > 0 {
+ zb0001--
+ (*z).OldDeadline, bts, err = msgp.ReadDurationBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "struct-from-array", "OldDeadline")
+ return
+ }
+ }
if zb0001 > 0 {
zb0001--
(*z).Napping, bts, err = msgp.ReadBoolBytes(bts)
@@ -3934,12 +4152,18 @@ func (z *player) UnmarshalMsg(bts []byte) (o []byte, err error) {
}
(*z).LastConcluding = step(zb0008)
}
- case "Deadline":
- (*z).Deadline, bts, err = msgp.ReadDurationBytes(bts)
+ case "TimersDeadline":
+ bts, err = (*z).Deadline.UnmarshalMsg(bts)
if err != nil {
err = msgp.WrapError(err, "Deadline")
return
}
+ case "Deadline":
+ (*z).OldDeadline, bts, err = msgp.ReadDurationBytes(bts)
+ if err != nil {
+ err = msgp.WrapError(err, "OldDeadline")
+ return
+ }
case "Napping":
(*z).Napping, bts, err = msgp.ReadBoolBytes(bts)
if err != nil {
@@ -3978,18 +4202,18 @@ func (_ *player) CanUnmarshalMsg(z interface{}) bool {
// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message
func (z *player) Msgsize() (s int) {
- s = 1 + 6 + (*z).Round.Msgsize() + 7 + msgp.Uint64Size + 5 + msgp.Uint64Size + 15 + msgp.Uint64Size + 9 + msgp.DurationSize + 8 + msgp.BoolSize + 21 + msgp.DurationSize + 8 + (*z).Pending.Msgsize()
+ s = 1 + 6 + (*z).Round.Msgsize() + 7 + msgp.Uint64Size + 5 + msgp.Uint64Size + 15 + msgp.Uint64Size + 15 + (*z).Deadline.Msgsize() + 9 + msgp.DurationSize + 8 + msgp.BoolSize + 21 + msgp.DurationSize + 8 + (*z).Pending.Msgsize()
return
}
// MsgIsZero returns whether this is a zero value
func (z *player) MsgIsZero() bool {
- return ((*z).Round.MsgIsZero()) && ((*z).Period == 0) && ((*z).Step == 0) && ((*z).LastConcluding == 0) && ((*z).Deadline == 0) && ((*z).Napping == false) && ((*z).FastRecoveryDeadline == 0) && ((*z).Pending.MsgIsZero())
+ return ((*z).Round.MsgIsZero()) && ((*z).Period == 0) && ((*z).Step == 0) && ((*z).LastConcluding == 0) && ((*z).Deadline.MsgIsZero()) && ((*z).OldDeadline == 0) && ((*z).Napping == false) && ((*z).FastRecoveryDeadline == 0) && ((*z).Pending.MsgIsZero())
}
// MaxSize returns a maximum valid message size for this message type
func PlayerMaxSize() (s int) {
- s = 1 + 6 + basics.RoundMaxSize() + 7 + msgp.Uint64Size + 5 + msgp.Uint64Size + 15 + msgp.Uint64Size + 9 + msgp.DurationSize + 8 + msgp.BoolSize + 21 + msgp.DurationSize + 8 + ProposalTableMaxSize()
+ s = 1 + 6 + basics.RoundMaxSize() + 7 + msgp.Uint64Size + 5 + msgp.Uint64Size + 15 + msgp.Uint64Size + 15 + DeadlineMaxSize() + 9 + msgp.DurationSize + 8 + msgp.BoolSize + 21 + msgp.DurationSize + 8 + ProposalTableMaxSize()
return
}
diff --git a/agreement/msgp_gen_test.go b/agreement/msgp_gen_test.go
index 99053ca4c3..2d3952add9 100644
--- a/agreement/msgp_gen_test.go
+++ b/agreement/msgp_gen_test.go
@@ -134,6 +134,66 @@ func BenchmarkUnmarshalConsensusVersionView(b *testing.B) {
}
}
+func TestMarshalUnmarshalDeadline(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ v := Deadline{}
+ bts := v.MarshalMsg(nil)
+ left, err := v.UnmarshalMsg(bts)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(left) > 0 {
+ t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left)
+ }
+
+ left, err = msgp.Skip(bts)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if len(left) > 0 {
+ t.Errorf("%d bytes left over after Skip(): %q", len(left), left)
+ }
+}
+
+func TestRandomizedEncodingDeadline(t *testing.T) {
+ protocol.RunEncodingTest(t, &Deadline{})
+}
+
+func BenchmarkMarshalMsgDeadline(b *testing.B) {
+ v := Deadline{}
+ b.ReportAllocs()
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ v.MarshalMsg(nil)
+ }
+}
+
+func BenchmarkAppendMsgDeadline(b *testing.B) {
+ v := Deadline{}
+ bts := make([]byte, 0, v.Msgsize())
+ bts = v.MarshalMsg(bts[0:0])
+ b.SetBytes(int64(len(bts)))
+ b.ReportAllocs()
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ bts = v.MarshalMsg(bts[0:0])
+ }
+}
+
+func BenchmarkUnmarshalDeadline(b *testing.B) {
+ v := Deadline{}
+ bts := v.MarshalMsg(nil)
+ b.ReportAllocs()
+ b.SetBytes(int64(len(bts)))
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ _, err := v.UnmarshalMsg(bts)
+ if err != nil {
+ b.Fatal(err)
+ }
+ }
+}
+
func TestMarshalUnmarshalblockAssembler(t *testing.T) {
partitiontest.PartitionTest(t)
v := blockAssembler{}
diff --git a/agreement/persistence.go b/agreement/persistence.go
index 5e85955b30..0e5e75915a 100644
--- a/agreement/persistence.go
+++ b/agreement/persistence.go
@@ -53,7 +53,7 @@ func persistent(as []action) bool {
}
// encode serializes the current state into a byte array.
-func encode(t timers.Clock, rr rootRouter, p player, a []action, reflect bool) (raw []byte) {
+func encode(t timers.Clock[TimeoutType], rr rootRouter, p player, a []action, reflect bool) (raw []byte) {
var s diskState
if reflect {
s.Router = protocol.EncodeReflect(rr)
@@ -194,8 +194,8 @@ func restore(log logging.Logger, crash db.Accessor) (raw []byte, err error) {
// decode process the incoming raw bytes array and attempt to reconstruct the agreement state objects.
//
// In all decoding errors, it returns the error code in err
-func decode(raw []byte, t0 timers.Clock, log serviceLogger, reflect bool) (t timers.Clock, rr rootRouter, p player, a []action, err error) {
- var t2 timers.Clock
+func decode(raw []byte, t0 timers.Clock[TimeoutType], log serviceLogger, reflect bool) (t timers.Clock[TimeoutType], rr rootRouter, p player, a []action, err error) {
+ var t2 timers.Clock[TimeoutType]
var rr2 rootRouter
var p2 player
a2 := []action{}
@@ -244,6 +244,10 @@ func decode(raw []byte, t0 timers.Clock, log serviceLogger, reflect bool) (t tim
return
}
}
+ if p2.OldDeadline != 0 {
+ p2.Deadline = Deadline{Duration: p2.OldDeadline, Type: TimeoutDeadline}
+ p2.OldDeadline = 0 // clear old value
+ }
rr2 = makeRootRouter(p2)
err = protocol.Decode(s.Router, &rr2)
if err != nil {
@@ -280,7 +284,7 @@ type persistentRequest struct {
step step
raw []byte
done chan error
- clock timers.Clock
+ clock timers.Clock[TimeoutType]
events chan<- externalEvent
}
@@ -302,7 +306,7 @@ func makeAsyncPersistenceLoop(log serviceLogger, crash db.Accessor, ledger Ledge
}
}
-func (p *asyncPersistenceLoop) Enqueue(clock timers.Clock, round basics.Round, period period, step step, raw []byte, done chan error) (events <-chan externalEvent) {
+func (p *asyncPersistenceLoop) Enqueue(clock timers.Clock[TimeoutType], round basics.Round, period period, step step, raw []byte, done chan error) (events <-chan externalEvent) {
eventsChannel := make(chan externalEvent, 1)
p.pending <- persistentRequest{
round: round,
diff --git a/agreement/persistence_test.go b/agreement/persistence_test.go
index fbd9323b09..ef738e86d6 100644
--- a/agreement/persistence_test.go
+++ b/agreement/persistence_test.go
@@ -37,14 +37,14 @@ func TestAgreementSerialization(t *testing.T) {
partitiontest.PartitionTest(t)
// todo : we need to deserialize some more meaningful state.
- clock := timers.MakeMonotonicClock(time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
- status := player{Round: 350, Step: soft, Deadline: time.Duration(23) * time.Second}
+ clock := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ status := player{Round: 350, Step: soft, Deadline: Deadline{Duration: time.Duration(23) * time.Second, Type: TimeoutDeadline}}
router := makeRootRouter(status)
a := []action{checkpointAction{}, disconnectAction(messageEvent{}, nil)}
encodedBytes := encode(clock, router, status, a, false)
- t0 := timers.MakeMonotonicClock(time.Date(2000, 0, 0, 0, 0, 0, 0, time.UTC))
+ t0 := timers.MakeMonotonicClock[TimeoutType](time.Date(2000, 0, 0, 0, 0, 0, 0, time.UTC))
log := makeServiceLogger(logging.Base())
clock2, router2, status2, a2, err := decode(encodedBytes, t0, log, false)
require.NoError(t, err)
@@ -52,14 +52,30 @@ func TestAgreementSerialization(t *testing.T) {
require.Equalf(t, router, router2, "Router wasn't serialized/deserialized correctly")
require.Equalf(t, status, status2, "Status wasn't serialized/deserialized correctly")
require.Equalf(t, a, a2, "Action wasn't serialized/deserialized correctly")
+
+ // also check if old version gets "upgraded" as side effect of decode
+ clock3 := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ status3 := player{Round: 350, Step: soft, OldDeadline: time.Duration(23) * time.Second}
+ router3 := makeRootRouter(status3)
+ a3 := []action{checkpointAction{}, disconnectAction(messageEvent{}, nil)}
+
+ encodedBytes2 := encode(clock3, router3, status3, a3, false)
+
+ t1 := timers.MakeMonotonicClock[TimeoutType](time.Date(2000, 0, 0, 0, 0, 0, 0, time.UTC))
+ clock4, router4, status4, a4, err := decode(encodedBytes2, t1, log, false)
+ require.NoError(t, err)
+ require.Equalf(t, clock, clock4, "Clock wasn't serialized/deserialized correctly")
+ require.Equalf(t, status, status4, "Status wasn't serialized/deserialized correctly")
+ require.Equalf(t, router, router4, "Router wasn't serialized/deserialized correctly")
+ require.Equalf(t, a, a4, "Action wasn't serialized/deserialized correctly")
}
func BenchmarkAgreementSerialization(b *testing.B) {
// todo : we need to deserialize some more meaningful state.
b.SkipNow()
- clock := timers.MakeMonotonicClock(time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
- status := player{Round: 350, Step: soft, Deadline: time.Duration(23) * time.Second}
+ clock := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ status := player{Round: 350, Step: soft, Deadline: Deadline{Duration: time.Duration(23) * time.Second, Type: TimeoutDeadline}}
router := makeRootRouter(status)
a := []action{}
@@ -73,13 +89,13 @@ func BenchmarkAgreementDeserialization(b *testing.B) {
// todo : we need to deserialize some more meaningful state.
b.SkipNow()
- clock := timers.MakeMonotonicClock(time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
- status := player{Round: 350, Step: soft, Deadline: time.Duration(23) * time.Second}
+ clock := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ status := player{Round: 350, Step: soft, Deadline: Deadline{Duration: time.Duration(23) * time.Second, Type: TimeoutDeadline}}
router := makeRootRouter(status)
a := []action{}
encodedBytes := encode(clock, router, status, a, false)
- t0 := timers.MakeMonotonicClock(time.Date(2000, 0, 0, 0, 0, 0, 0, time.UTC))
+ t0 := timers.MakeMonotonicClock[TimeoutType](time.Date(2000, 0, 0, 0, 0, 0, 0, time.UTC))
log := makeServiceLogger(logging.Base())
b.ResetTimer()
for n := 0; n < b.N; n++ {
@@ -171,11 +187,13 @@ func randomizeDiskState() (rr rootRouter, p player) {
if err != nil {
return
}
+
rr2, err := protocol.RandomizeObject(&rootRouter{})
if err != nil {
return
}
p = *(p2.(*player))
+ p.OldDeadline = 0
rr = *(rr2.(*rootRouter))
return
}
@@ -185,7 +203,7 @@ func TestRandomizedEncodingFullDiskState(t *testing.T) {
for i := 0; i < 5000; i++ {
router, player := randomizeDiskState()
a := []action{}
- clock := timers.MakeMonotonicClock(time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ clock := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
log := makeServiceLogger(logging.Base())
e1 := encode(clock, router, player, a, true)
e2 := encode(clock, router, player, a, false)
@@ -201,7 +219,7 @@ func TestRandomizedEncodingFullDiskState(t *testing.T) {
}
func BenchmarkRandomizedEncode(b *testing.B) {
- clock := timers.MakeMonotonicClock(time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ clock := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
router, player := randomizeDiskState()
a := []action{}
b.ResetTimer()
@@ -211,7 +229,7 @@ func BenchmarkRandomizedEncode(b *testing.B) {
}
func BenchmarkRandomizedDecode(b *testing.B) {
- clock := timers.MakeMonotonicClock(time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ clock := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
router, player := randomizeDiskState()
a := []action{}
ds := encode(clock, router, player, a, false)
@@ -241,10 +259,10 @@ func TestEmptyMapDeserialization(t *testing.T) {
func TestDecodeFailures(t *testing.T) {
partitiontest.PartitionTest(t)
- clock := timers.MakeMonotonicClock(time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
+ clock := timers.MakeMonotonicClock[TimeoutType](time.Date(2015, 1, 2, 5, 6, 7, 8, time.UTC))
ce := clock.Encode()
log := makeServiceLogger(logging.Base())
- player := player{Round: 350, Step: soft, Deadline: time.Duration(23) * time.Second}
+ player := player{Round: 350, Step: soft, Deadline: Deadline{Duration: time.Duration(23) * time.Second, Type: TimeoutDeadline}}
router := makeRootRouter(player)
pe := protocol.Encode(&player)
re := protocol.Encode(&router)
diff --git a/agreement/player.go b/agreement/player.go
index 1ae552b0b1..a3451ea0db 100644
--- a/agreement/player.go
+++ b/agreement/player.go
@@ -40,7 +40,13 @@ type player struct {
// Deadline contains the time of the next timeout expected by the player
// state machine (relevant to the start of the current period).
- Deadline time.Duration
+ Deadline Deadline `codec:"TimersDeadline"`
+
+ // OldDeadline contains the value of Deadline used from a previous version,
+ // for backwards compatibility when deserializing player.
+ // TODO: remove after consensus upgrade that introduces the Deadline struct.
+ OldDeadline time.Duration `codec:"Deadline,omitempty"`
+
// Napping is set when the player is expecting a random timeout (i.e.,
// to determine when the player chooses to send a next-vote).
Napping bool
@@ -111,7 +117,7 @@ func (p *player) handle(r routerHandle, e event) []action {
delta := time.Duration(e.RandomEntropy % uint64(upper-lower))
p.Napping = true
- p.Deadline = lower + delta
+ p.Deadline = Deadline{Duration: lower + delta, Type: TimeoutDeadline}
return actions
}
case roundInterruptionEvent:
@@ -145,7 +151,7 @@ func (p *player) handleFastTimeout(r routerHandle, e timeoutEvent) []action {
func (p *player) issueSoftVote(r routerHandle) (actions []action) {
defer func() {
- p.Deadline = deadlineTimeout
+ p.Deadline = Deadline{Duration: deadlineTimeout, Type: TimeoutDeadline}
}()
e := r.dispatch(*p, proposalFrozenEvent{}, proposalMachinePeriod, p.Round, p.Period, 0)
@@ -213,7 +219,7 @@ func (p *player) issueNextVote(r routerHandle) []action {
_, upper := p.Step.nextVoteRanges()
p.Napping = false
- p.Deadline = upper
+ p.Deadline = Deadline{Duration: upper, Type: TimeoutDeadline}
return actions
}
@@ -327,7 +333,7 @@ func (p *player) enterPeriod(r routerHandle, source thresholdEvent, target perio
p.Step = soft
p.Napping = false
p.FastRecoveryDeadline = 0 // set immediately
- p.Deadline = FilterTimeout(target, source.Proto)
+ p.Deadline = Deadline{Duration: FilterTimeout(target, source.Proto), Type: TimeoutFilter}
// update tracer state to match player
r.t.setMetadata(tracerMetadata{p.Round, p.Period, p.Step})
@@ -375,11 +381,11 @@ func (p *player) enterRound(r routerHandle, source event, target round) []action
switch source := source.(type) {
case roundInterruptionEvent:
- p.Deadline = FilterTimeout(0, source.Proto.Version)
+ p.Deadline = Deadline{Duration: FilterTimeout(0, source.Proto.Version), Type: TimeoutFilter}
case thresholdEvent:
- p.Deadline = FilterTimeout(0, source.Proto)
+ p.Deadline = Deadline{Duration: FilterTimeout(0, source.Proto), Type: TimeoutFilter}
case filterableMessageEvent:
- p.Deadline = FilterTimeout(0, source.Proto.Version)
+ p.Deadline = Deadline{Duration: FilterTimeout(0, source.Proto.Version), Type: TimeoutFilter}
}
// update tracer state to match player
diff --git a/agreement/player_test.go b/agreement/player_test.go
index 75987c2ed0..84aad574ba 100644
--- a/agreement/player_test.go
+++ b/agreement/player_test.go
@@ -500,7 +500,7 @@ func TestPlayerLateBlockProposalPeriod0(t *testing.T) {
func setupP(t *testing.T, r round, p period, s step) (plyr *player, pMachine ioAutomata, helper *voteMakerHelper) {
// Set up a composed test machine starting at specified rps
- rRouter := makeRootRouter(player{Round: r, Period: p, Step: s, Deadline: FilterTimeout(p, protocol.ConsensusCurrentVersion)})
+ rRouter := makeRootRouter(player{Round: r, Period: p, Step: s, Deadline: Deadline{Duration: FilterTimeout(p, protocol.ConsensusCurrentVersion), Type: TimeoutFilter}})
concreteMachine := ioAutomataConcretePlayer{rootRouter: &rRouter}
plyr = concreteMachine.underlying()
pMachine = &concreteMachine
diff --git a/agreement/service.go b/agreement/service.go
index 3cac126193..765f4270a9 100644
--- a/agreement/service.go
+++ b/agreement/service.go
@@ -19,7 +19,6 @@ package agreement
//go:generate dbgen -i agree.sql -p agreement -n agree -o agreeInstall.go -h ../scripts/LICENSE_HEADER
import (
"context"
- "time"
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/logging"
@@ -68,7 +67,7 @@ type Parameters struct {
BlockFactory
RandomSource
EventsProcessingMonitor
- timers.Clock
+ timers.Clock[TimeoutType]
db.Accessor
logging.Logger
config.Local
@@ -80,8 +79,8 @@ type parameters Parameters
// externalDemuxSignals used to syncronize the external signals that goes to the demux with the main loop.
type externalDemuxSignals struct {
- Deadline time.Duration
- FastRecoveryDeadline time.Duration
+ Deadline Deadline
+ FastRecoveryDeadline Deadline
CurrentRound round
}
@@ -188,7 +187,7 @@ func (s *Service) demuxLoop(ctx context.Context, input chan<- externalEvent, out
// 4. If necessary, persist state to disk.
func (s *Service) mainLoop(input <-chan externalEvent, output chan<- []action, ready chan<- externalDemuxSignals) {
// setup
- var clock timers.Clock
+ var clock timers.Clock[TimeoutType]
var router rootRouter
var status player
var a []action
@@ -212,7 +211,7 @@ func (s *Service) mainLoop(input <-chan externalEvent, output chan<- []action, r
s.log.Errorf("unable to retrieve consensus version for round %d, defaulting to binary consensus version", nextRound)
nextVersion = protocol.ConsensusCurrentVersion
}
- status = player{Round: nextRound, Step: soft, Deadline: FilterTimeout(0, nextVersion)}
+ status = player{Round: nextRound, Step: soft, Deadline: Deadline{Duration: FilterTimeout(0, nextVersion), Type: TimeoutFilter}}
router = makeRootRouter(status)
a1 := pseudonodeAction{T: assemble, Round: s.Ledger.NextRound()}
@@ -226,7 +225,8 @@ func (s *Service) mainLoop(input <-chan externalEvent, output chan<- []action, r
for {
output <- a
- ready <- externalDemuxSignals{Deadline: status.Deadline, FastRecoveryDeadline: status.FastRecoveryDeadline, CurrentRound: status.Round}
+ fastRecoveryDeadline := Deadline{Duration: status.FastRecoveryDeadline, Type: TimeoutFastRecovery}
+ ready <- externalDemuxSignals{Deadline: status.Deadline, FastRecoveryDeadline: fastRecoveryDeadline, CurrentRound: status.Round}
e, ok := <-input
if !ok {
break
diff --git a/agreement/service_test.go b/agreement/service_test.go
index e24f81890c..fc50c302d5 100644
--- a/agreement/service_test.go
+++ b/agreement/service_test.go
@@ -44,29 +44,34 @@ import (
"github.com/algorand/go-algorand/util/timers"
)
+type testingTimeout struct {
+ delta time.Duration
+ ch chan time.Time
+}
+
type testingClock struct {
mu deadlock.Mutex
zeroes uint
- TA map[time.Duration]chan time.Time // TimeoutAt
+ TA map[TimeoutType]testingTimeout // TimeoutAt
monitor *coserviceMonitor
}
func makeTestingClock(m *coserviceMonitor) *testingClock {
c := new(testingClock)
- c.TA = make(map[time.Duration]chan time.Time)
+ c.TA = make(map[TimeoutType]testingTimeout)
c.monitor = m
return c
}
-func (c *testingClock) Zero() timers.Clock {
+func (c *testingClock) Zero() timers.Clock[TimeoutType] {
c.mu.Lock()
defer c.mu.Unlock()
c.zeroes++
- c.TA = make(map[time.Duration]chan time.Time)
+ c.TA = make(map[TimeoutType]testingTimeout)
c.monitor.clearClock()
return c
}
@@ -75,23 +80,24 @@ func (c *testingClock) Since() time.Duration {
return 0
}
-func (c *testingClock) TimeoutAt(d time.Duration) <-chan time.Time {
+func (c *testingClock) TimeoutAt(d time.Duration, timeoutType TimeoutType) <-chan time.Time {
c.mu.Lock()
defer c.mu.Unlock()
- ta := c.TA[d]
- if ta == nil {
- c.TA[d] = make(chan time.Time)
- ta = c.TA[d]
+ ta, ok := c.TA[timeoutType]
+ if !ok || ta.delta != d {
+ c.TA[timeoutType] = testingTimeout{delta: d, ch: make(chan time.Time)}
+ ta = c.TA[timeoutType]
}
- return ta
+
+ return ta.ch
}
func (c *testingClock) Encode() []byte {
return nil
}
-func (c *testingClock) Decode([]byte) (timers.Clock, error) {
+func (c *testingClock) Decode([]byte) (timers.Clock[TimeoutType], error) {
return makeTestingClock(nil), nil // TODO
}
@@ -99,14 +105,14 @@ func (c *testingClock) prepareToFire() {
c.monitor.inc(clockCoserviceType)
}
-func (c *testingClock) fire(d time.Duration) {
+func (c *testingClock) fire(timeoutType TimeoutType) {
c.mu.Lock()
defer c.mu.Unlock()
- if c.TA[d] == nil {
- c.TA[d] = make(chan time.Time)
+ if _, ok := c.TA[timeoutType]; !ok {
+ panic(fmt.Errorf("no timeout of type %v", timeoutType))
}
- close(c.TA[d])
+ close(c.TA[timeoutType].ch)
}
type testingNetwork struct {
@@ -696,12 +702,12 @@ func (testingRand) Uint64() uint64 {
return maxuint64 / 2
}
-func setupAgreement(t *testing.T, numNodes int, traceLevel traceLevel, ledgerFactory func(map[basics.Address]basics.AccountData) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock, []Ledger, *activityMonitor) {
+func setupAgreement(t *testing.T, numNodes int, traceLevel traceLevel, ledgerFactory func(map[basics.Address]basics.AccountData) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock[TimeoutType], []Ledger, *activityMonitor) {
var validator testBlockValidator
return setupAgreementWithValidator(t, numNodes, traceLevel, validator, ledgerFactory)
}
-func setupAgreementWithValidator(t *testing.T, numNodes int, traceLevel traceLevel, validator BlockValidator, ledgerFactory func(map[basics.Address]basics.AccountData) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock, []Ledger, *activityMonitor) {
+func setupAgreementWithValidator(t *testing.T, numNodes int, traceLevel traceLevel, validator BlockValidator, ledgerFactory func(map[basics.Address]basics.AccountData) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock[TimeoutType], []Ledger, *activityMonitor) {
bufCap := 1000 // max number of buffered messages
// system state setup: keygen, stake initialization
@@ -716,7 +722,7 @@ func setupAgreementWithValidator(t *testing.T, numNodes int, traceLevel traceLev
log.SetLevel(logging.Debug)
// node setup
- clocks := make([]timers.Clock, numNodes)
+ clocks := make([]timers.Clock[TimeoutType], numNodes)
ledgers := make([]Ledger, numNodes)
dbAccessors := make([]db.Accessor, numNodes)
services := make([]*Service, numNodes)
@@ -809,7 +815,7 @@ func (m *coserviceMonitor) clearClock() {
}
}
-func expectNewPeriod(clocks []timers.Clock, zeroes uint) (newzeroes uint) {
+func expectNewPeriod(clocks []timers.Clock[TimeoutType], zeroes uint) (newzeroes uint) {
zeroes++
for i := range clocks {
if clocks[i].(*testingClock).zeroes != zeroes {
@@ -820,7 +826,7 @@ func expectNewPeriod(clocks []timers.Clock, zeroes uint) (newzeroes uint) {
return zeroes
}
-func expectNoNewPeriod(clocks []timers.Clock, zeroes uint) (newzeroes uint) {
+func expectNoNewPeriod(clocks []timers.Clock[TimeoutType], zeroes uint) (newzeroes uint) {
for i := range clocks {
if clocks[i].(*testingClock).zeroes != zeroes {
errstr := fmt.Sprintf("unexpected number of zeroes: %v != %v", clocks[i].(*testingClock).zeroes, zeroes)
@@ -830,19 +836,30 @@ func expectNoNewPeriod(clocks []timers.Clock, zeroes uint) (newzeroes uint) {
return zeroes
}
-func triggerGlobalTimeout(d time.Duration, clocks []timers.Clock, activityMonitor *activityMonitor) {
+func triggerGlobalTimeout(d time.Duration, timeoutType TimeoutType, clocks []timers.Clock[TimeoutType], activityMonitor *activityMonitor) {
+ for i := range clocks {
+ clocks[i].(*testingClock).prepareToFire()
+ }
+ for i := range clocks {
+ clocks[i].(*testingClock).fire(timeoutType)
+ }
+ activityMonitor.waitForActivity()
+ activityMonitor.waitForQuiet()
+}
+
+func triggerGlobalTimeoutType(timeoutType TimeoutType, clocks []timers.Clock[TimeoutType], activityMonitor *activityMonitor) {
for i := range clocks {
clocks[i].(*testingClock).prepareToFire()
}
for i := range clocks {
- clocks[i].(*testingClock).fire(d)
+ clocks[i].(*testingClock).fire(timeoutType)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
}
-func runRound(clocks []timers.Clock, activityMonitor *activityMonitor, zeroes uint, filterTimeout time.Duration) (newzeroes uint) {
- triggerGlobalTimeout(filterTimeout, clocks, activityMonitor)
+func runRound(clocks []timers.Clock[TimeoutType], activityMonitor *activityMonitor, zeroes uint, filterTimeout time.Duration) (newzeroes uint) {
+ triggerGlobalTimeout(filterTimeout, TimeoutFilter, clocks, activityMonitor)
return expectNewPeriod(clocks, zeroes)
}
@@ -1039,23 +1056,23 @@ func TestAgreementFastRecoveryDownEarly(t *testing.T) {
baseNetwork.dropAllSoftVotes()
baseNetwork.dropAllSlowNextVotes()
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeoutType(TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(0, clocks, activityMonitor) // activates fast partition recovery timer
+ triggerGlobalTimeout(0, TimeoutFastRecovery, clocks, activityMonitor) // activates fast partition recovery timer
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(firstFPR, clocks, activityMonitor)
+ triggerGlobalTimeout(firstFPR, TimeoutFastRecovery, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// terminate on period 1
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1096,13 +1113,13 @@ func TestAgreementFastRecoveryDownMiss(t *testing.T) {
{
// fail all steps
baseNetwork.dropAllVotes()
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(0, clocks, activityMonitor) // activates fast partition recovery timer
+ triggerGlobalTimeout(0, TimeoutFastRecovery, clocks, activityMonitor) // activates fast partition recovery timer
zeroes = expectNoNewPeriod(clocks, zeroes)
firstClocks := clocks[:4]
@@ -1112,7 +1129,7 @@ func TestAgreementFastRecoveryDownMiss(t *testing.T) {
firstClocks[i].(*testingClock).prepareToFire()
}
for i := range firstClocks {
- firstClocks[i].(*testingClock).fire(firstFPR)
+ firstClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
@@ -1123,20 +1140,20 @@ func TestAgreementFastRecoveryDownMiss(t *testing.T) {
restClocks[i].(*testingClock).prepareToFire()
}
for i := range restClocks {
- restClocks[i].(*testingClock).fire(firstFPR)
+ restClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(secondFPR, clocks, activityMonitor)
+ triggerGlobalTimeout(secondFPR, TimeoutFastRecovery, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// terminate on period 1
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1179,7 +1196,7 @@ func TestAgreementFastRecoveryLate(t *testing.T) {
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCertVotes(pocket)
baseNetwork.dropAllSlowNextVotes()
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
@@ -1200,10 +1217,10 @@ func TestAgreementFastRecoveryLate(t *testing.T) {
}
}
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(0, clocks, activityMonitor) // activates fast partition recovery timer
+ triggerGlobalTimeout(0, TimeoutFastRecovery, clocks, activityMonitor) // activates fast partition recovery timer
zeroes = expectNoNewPeriod(clocks, zeroes)
baseNetwork.dropAllVotes()
@@ -1214,7 +1231,7 @@ func TestAgreementFastRecoveryLate(t *testing.T) {
firstClocks[i].(*testingClock).prepareToFire()
}
for i := range firstClocks {
- firstClocks[i].(*testingClock).fire(firstFPR)
+ firstClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
@@ -1225,20 +1242,20 @@ func TestAgreementFastRecoveryLate(t *testing.T) {
restClocks[i].(*testingClock).prepareToFire()
}
for i := range restClocks {
- restClocks[i].(*testingClock).fire(firstFPR)
+ restClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(secondFPR, clocks, activityMonitor)
+ triggerGlobalTimeout(secondFPR, TimeoutFastRecovery, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// terminate on period 1
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1292,7 +1309,7 @@ func TestAgreementFastRecoveryRedo(t *testing.T) {
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCertVotes(pocket)
baseNetwork.dropAllSlowNextVotes()
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
@@ -1313,10 +1330,10 @@ func TestAgreementFastRecoveryRedo(t *testing.T) {
}
}
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(0, clocks, activityMonitor) // activates fast partition recovery timer
+ triggerGlobalTimeout(0, TimeoutFastRecovery, clocks, activityMonitor) // activates fast partition recovery timer
zeroes = expectNoNewPeriod(clocks, zeroes)
baseNetwork.dropAllVotes()
@@ -1327,7 +1344,7 @@ func TestAgreementFastRecoveryRedo(t *testing.T) {
firstClocks[i].(*testingClock).prepareToFire()
}
for i := range firstClocks {
- firstClocks[i].(*testingClock).fire(firstFPR)
+ firstClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
@@ -1338,26 +1355,26 @@ func TestAgreementFastRecoveryRedo(t *testing.T) {
restClocks[i].(*testingClock).prepareToFire()
}
for i := range restClocks {
- restClocks[i].(*testingClock).fire(firstFPR)
+ restClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(secondFPR, clocks, activityMonitor)
+ triggerGlobalTimeout(secondFPR, TimeoutFastRecovery, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// fail period 1 with value again
{
baseNetwork.dropAllVotes()
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(0, clocks, activityMonitor) // activates fast partition recovery timer
+ triggerGlobalTimeout(0, TimeoutFastRecovery, clocks, activityMonitor) // activates fast partition recovery timer
zeroes = expectNoNewPeriod(clocks, zeroes)
baseNetwork.dropAllVotes()
@@ -1368,7 +1385,7 @@ func TestAgreementFastRecoveryRedo(t *testing.T) {
firstClocks[i].(*testingClock).prepareToFire()
}
for i := range firstClocks {
- firstClocks[i].(*testingClock).fire(firstFPR)
+ firstClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
@@ -1379,20 +1396,20 @@ func TestAgreementFastRecoveryRedo(t *testing.T) {
restClocks[i].(*testingClock).prepareToFire()
}
for i := range restClocks {
- restClocks[i].(*testingClock).fire(firstFPR)
+ restClocks[i].(*testingClock).fire(TimeoutFastRecovery)
}
activityMonitor.waitForActivity()
activityMonitor.waitForQuiet()
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(secondFPR, clocks, activityMonitor)
+ triggerGlobalTimeout(secondFPR, TimeoutFastRecovery, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// terminate on period 2
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(2, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(2, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1443,26 +1460,26 @@ func TestAgreementBlockReplayBug_b29ea57(t *testing.T) {
// fail period 0
{
baseNetwork.dropAllSoftVotes()
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// fail period 1 on bottom with block
{
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// terminate on period 2
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(2, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(2, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1503,12 +1520,12 @@ func TestAgreementLateCertBug(t *testing.T) {
pocket := make(chan multicastParams, 100)
{
closeFn := baseNetwork.pocketAllCertVotes(pocket)
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
baseNetwork.repairAll()
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1563,7 +1580,7 @@ func TestAgreementRecoverGlobalStartingValue(t *testing.T) {
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCertVotes(pocket)
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
@@ -1584,7 +1601,7 @@ func TestAgreementRecoverGlobalStartingValue(t *testing.T) {
}
}
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 4, int(zeroes))
}
@@ -1594,7 +1611,7 @@ func TestAgreementRecoverGlobalStartingValue(t *testing.T) {
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCertVotes(pocket)
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
@@ -1611,7 +1628,7 @@ func TestAgreementRecoverGlobalStartingValue(t *testing.T) {
}
}
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 5, int(zeroes))
}
@@ -1620,7 +1637,7 @@ func TestAgreementRecoverGlobalStartingValue(t *testing.T) {
// todo: make more transparent, I want to kow what v we agreed on
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(2, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(2, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 6, int(zeroes))
}
@@ -1662,7 +1679,7 @@ func TestAgreementRecoverGlobalStartingValueBadProposal(t *testing.T) {
{
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCertVotes(pocket)
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
@@ -1689,7 +1706,7 @@ func TestAgreementRecoverGlobalStartingValueBadProposal(t *testing.T) {
}
return params
})
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 4, int(zeroes))
}
@@ -1699,7 +1716,7 @@ func TestAgreementRecoverGlobalStartingValueBadProposal(t *testing.T) {
baseNetwork.repairAll()
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCertVotes(pocket)
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
@@ -1715,7 +1732,7 @@ func TestAgreementRecoverGlobalStartingValueBadProposal(t *testing.T) {
panic(errstr)
}
}
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1723,7 +1740,7 @@ func TestAgreementRecoverGlobalStartingValueBadProposal(t *testing.T) {
// Finish in period 2
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(2, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(2, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 6, int(zeroes))
}
@@ -1765,7 +1782,7 @@ func TestAgreementRecoverBothVAndBotQuorums(t *testing.T) {
{
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllSoftVotes(pocket)
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
pocketedSoft := make([]multicastParams, len(pocket))
@@ -1790,7 +1807,7 @@ func TestAgreementRecoverBothVAndBotQuorums(t *testing.T) {
}
// generate a bottom quorum; let only one node see it.
baseNetwork.crown(0)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
if clocks[0].(*testingClock).zeroes != zeroes+1 {
errstr := fmt.Sprintf("node 0 did not enter new period from bot quorum")
panic(errstr)
@@ -1809,12 +1826,12 @@ func TestAgreementRecoverBothVAndBotQuorums(t *testing.T) {
// actually create the value quorum
_, upper := (next).nextVoteRanges()
- triggerGlobalTimeout(upper, clocks[1:], activityMonitor) // activates next timers
+ triggerGlobalTimeout(upper, TimeoutDeadline, clocks[1:], activityMonitor) // activates next timers
zeroes = expectNoNewPeriod(clocks[1:], zeroes)
lower, upper := (next + 1).nextVoteRanges()
delta := time.Duration(testingRand{}.Uint64() % uint64(upper-lower))
- triggerGlobalTimeout(lower+delta, clocks[1:], activityMonitor)
+ triggerGlobalTimeout(lower+delta, TimeoutDeadline, clocks[1:], activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 4, int(zeroes))
}
@@ -1824,7 +1841,7 @@ func TestAgreementRecoverBothVAndBotQuorums(t *testing.T) {
baseNetwork.repairAll()
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCertVotes(pocket)
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
closeFn()
@@ -1841,14 +1858,14 @@ func TestAgreementRecoverBothVAndBotQuorums(t *testing.T) {
}
}
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// Finish in period 2
{
baseNetwork.repairAll()
- triggerGlobalTimeout(FilterTimeout(2, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(2, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 6, int(zeroes))
}
@@ -1889,13 +1906,13 @@ func TestAgreementSlowPayloadsPreDeadline(t *testing.T) {
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCompound(pocket) // (takes effect next round)
{
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// run round with late payload
{
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
// release payloads; expect new round
@@ -1947,15 +1964,15 @@ func TestAgreementSlowPayloadsPostDeadline(t *testing.T) {
pocket := make(chan multicastParams, 100)
closeFn := baseNetwork.pocketAllCompound(pocket) // (takes effect next round)
{
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// force network into period 1 by delaying proposals
{
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -1972,7 +1989,7 @@ func TestAgreementSlowPayloadsPostDeadline(t *testing.T) {
activityMonitor.waitForQuiet()
zeroes = expectNoNewPeriod(clocks, zeroes)
- triggerGlobalTimeout(FilterTimeout(1, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(1, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -2012,11 +2029,11 @@ func TestAgreementLargePeriods(t *testing.T) {
for p := 0; p < 60; p++ {
{
baseNetwork.partition(0, 1, 2)
- triggerGlobalTimeout(FilterTimeout(period(p), version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(period(p), version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
baseNetwork.repairAll()
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
require.Equal(t, 4+p, int(zeroes))
}
@@ -2024,7 +2041,7 @@ func TestAgreementLargePeriods(t *testing.T) {
// terminate
{
- triggerGlobalTimeout(FilterTimeout(60, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(60, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
@@ -2111,13 +2128,13 @@ func TestAgreementRegression_WrongPeriodPayloadVerificationCancellation_8ba23942
ch := validator.suspend()
closeFn := baseNetwork.pocketAllCompound(pocket0) // (takes effect next round)
{
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks, zeroes)
}
// force network into period 1 by failing period 0, entering with bottom and no soft threshold (to prevent proposal value pinning)
baseNetwork.dropAllSoftVotes()
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNoNewPeriod(clocks, zeroes)
// resume delivery of payloads in following period
@@ -2128,7 +2145,7 @@ func TestAgreementRegression_WrongPeriodPayloadVerificationCancellation_8ba23942
// release proposed blocks in a controlled manner to prevent oversubscription of verification
pocket1 := make(chan multicastParams, 100)
closeFn = baseNetwork.pocketAllCompound(pocket1)
- triggerGlobalTimeout(deadlineTimeout, clocks, activityMonitor)
+ triggerGlobalTimeout(deadlineTimeout, TimeoutDeadline, clocks, activityMonitor)
baseNetwork.repairAll()
close(pocket1)
{
@@ -2312,7 +2329,7 @@ func TestAgreementCertificateDoesNotStallSingleRelay(t *testing.T) {
return params
})
// And with some hypothetical second relay the network achieves consensus on a certificate and block.
- triggerGlobalTimeout(FilterTimeout(0, version), clocks, activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks, activityMonitor)
zeroes = expectNewPeriod(clocks[1:], zeroes)
require.Equal(t, uint(3), clocks[0].(*testingClock).zeroes)
close(pocketCert)
@@ -2331,7 +2348,7 @@ func TestAgreementCertificateDoesNotStallSingleRelay(t *testing.T) {
activityMonitor.waitForQuiet()
// this relay must still relay initial messages. Note that payloads were already relayed with
// the previous global timeout.
- triggerGlobalTimeout(FilterTimeout(0, version), clocks[1:], activityMonitor)
+ triggerGlobalTimeout(FilterTimeout(0, version), TimeoutFilter, clocks[1:], activityMonitor)
zeroes = expectNewPeriod(clocks[1:], zeroes)
require.Equal(t, uint(3), clocks[0].(*testingClock).zeroes)
@@ -2401,6 +2418,6 @@ func TestAgreementServiceStartDeadline(t *testing.T) {
default:
require.Fail(t, "ready channel was empty while it should have contained a single entry")
}
- require.Equal(t, testConsensusParams.AgreementFilterTimeoutPeriod0, demuxSignal.Deadline)
+ require.Equal(t, testConsensusParams.AgreementFilterTimeoutPeriod0, demuxSignal.Deadline.Duration)
require.Equal(t, baseLedger.NextRound(), demuxSignal.CurrentRound)
}
diff --git a/agreement/types.go b/agreement/types.go
index bc2decb7d0..664fd3a2b0 100644
--- a/agreement/types.go
+++ b/agreement/types.go
@@ -25,6 +25,31 @@ import (
"github.com/algorand/go-algorand/protocol"
)
+// TimeoutType defines the type of a Deadline, to distinguish between different timeouts
+// set by agreement.
+type TimeoutType int8
+
+const (
+ // TimeoutDeadline annotates timeout events in the agreement protocol (e.g.,
+ // for receiving a block).
+ TimeoutDeadline TimeoutType = iota
+ // TimeoutFastRecovery annotates the fast recovery timeout in the agreement
+ // protocol.
+ TimeoutFastRecovery
+ // TimeoutFilter annotates the filter step timeout event in the agreement
+ // protocol.
+ TimeoutFilter
+)
+
+// Deadline marks a timeout event of type Type that the player schedules to
+// happen after Duration time.
+type Deadline struct {
+ _struct struct{} `codec:","`
+ Duration time.Duration
+ // Type is used to allow tests fire timeouts of specific types.
+ Type TimeoutType
+}
+
var deadlineTimeout = config.Protocol.BigLambda + config.Protocol.SmallLambda
var partitionStep = next + 3
var recoveryExtraTimeout = config.Protocol.SmallLambda
diff --git a/node/node.go b/node/node.go
index 0e10be7be2..a7e8132e1c 100644
--- a/node/node.go
+++ b/node/node.go
@@ -254,11 +254,11 @@ func MakeFull(log logging.Logger, rootDir string, cfg config.Local, phonebookAdd
blockValidator := blockValidatorImpl{l: node.ledger, verificationPool: node.highPriorityCryptoVerificationPool}
agreementLedger := makeAgreementLedger(node.ledger, node.net)
- var agreementClock timers.Clock
+ var agreementClock timers.Clock[agreement.TimeoutType]
if node.devMode {
- agreementClock = timers.MakeFrozenClock()
+ agreementClock = timers.MakeFrozenClock[agreement.TimeoutType]()
} else {
- agreementClock = timers.MakeMonotonicClock(time.Now())
+ agreementClock = timers.MakeMonotonicClock[agreement.TimeoutType](time.Now())
}
agreementParameters := agreement.Parameters{
Logger: log,
diff --git a/util/timers/frozen.go b/util/timers/frozen.go
index e6487b1a8a..f4400c3a82 100644
--- a/util/timers/frozen.go
+++ b/util/timers/frozen.go
@@ -21,42 +21,42 @@ import (
)
// Frozen is a dummy frozen clock that never fires.
-type Frozen struct {
+type Frozen[TimeoutType comparable] struct {
timeoutCh chan time.Time
}
// MakeFrozenClock creates a new frozen clock.
-func MakeFrozenClock() Clock {
- return &Frozen{
+func MakeFrozenClock[TimeoutType comparable]() Clock[TimeoutType] {
+ return &Frozen[TimeoutType]{
timeoutCh: make(chan time.Time, 1),
}
}
// Zero returns a new Clock reset to the current time.
-func (m *Frozen) Zero() Clock {
- return MakeFrozenClock()
+func (m *Frozen[TimeoutType]) Zero() Clock[TimeoutType] {
+ return MakeFrozenClock[TimeoutType]()
}
// TimeoutAt returns a channel that will signal when the duration has elapsed.
-func (m *Frozen) TimeoutAt(delta time.Duration) <-chan time.Time {
+func (m *Frozen[TimeoutType]) TimeoutAt(delta time.Duration, timeoutType TimeoutType) <-chan time.Time {
return m.timeoutCh
}
// Encode implements Clock.Encode.
-func (m *Frozen) Encode() []byte {
+func (m *Frozen[TimeoutType]) Encode() []byte {
return []byte{}
}
// Decode implements Clock.Decode.
-func (m *Frozen) Decode([]byte) (Clock, error) {
- return MakeFrozenClock(), nil
+func (m *Frozen[TimeoutType]) Decode([]byte) (Clock[TimeoutType], error) {
+ return MakeFrozenClock[TimeoutType](), nil
}
-func (m *Frozen) String() string {
+func (m *Frozen[TimeoutType]) String() string {
return ""
}
// Since implements the Clock interface.
-func (m *Frozen) Since() time.Duration {
+func (m *Frozen[TimeoutType]) Since() time.Duration {
return 0
}
diff --git a/util/timers/interface.go b/util/timers/interface.go
index e96aced757..d217437e9e 100644
--- a/util/timers/interface.go
+++ b/util/timers/interface.go
@@ -22,20 +22,23 @@ import (
)
// Clock provides timeout events which fire at some point after a point in time.
-type Clock interface {
+type Clock[TimeoutType comparable] interface {
// Zero returns a reset Clock. TimeoutAt channels will use the point
// at which Zero was called as their reference point.
- Zero() Clock
+ Zero() Clock[TimeoutType]
// Since returns the time spent between the last time the clock was zeroed out and the current
// wall clock time.
Since() time.Duration
// TimeoutAt returns a channel that fires delta time after Zero was called.
+ // timeoutType is specifies the reason for this timeout. If there are two
+ // timeouts of the same type at the same time, then only one of them fires.
// If delta has already passed, it returns a closed channel.
//
- // TimeoutAt must be called after Zero; otherwise, the channel's behavior is undefined.
- TimeoutAt(delta time.Duration) <-chan time.Time
+ // TimeoutAt must be called after Zero; otherwise, the channel's behavior is
+ // undefined.
+ TimeoutAt(delta time.Duration, timeoutType TimeoutType) <-chan time.Time
// Encode serializes the Clock into a byte slice.
Encode() []byte
@@ -43,5 +46,5 @@ type Clock interface {
// Decode deserializes the Clock from a byte slice.
// A Clock which has been Decoded from an Encoded Clock should produce
// the same timeouts as the original Clock.
- Decode([]byte) (Clock, error)
+ Decode([]byte) (Clock[TimeoutType], error)
}
diff --git a/util/timers/monotonic.go b/util/timers/monotonic.go
index 70db87da3e..96207f3950 100644
--- a/util/timers/monotonic.go
+++ b/util/timers/monotonic.go
@@ -23,56 +23,66 @@ import (
"github.com/algorand/go-algorand/protocol"
)
+type timeout struct {
+ delta time.Duration
+ ch <-chan time.Time
+}
+
// Monotonic uses the system's monotonic clock to emit timeouts.
-type Monotonic struct {
+type Monotonic[TimeoutType comparable] struct {
zero time.Time
- timeouts map[time.Duration]<-chan time.Time
+ timeouts map[TimeoutType]timeout
}
// MakeMonotonicClock creates a new monotonic clock with a given zero point.
-func MakeMonotonicClock(zero time.Time) Clock {
- return &Monotonic{
+func MakeMonotonicClock[TimeoutType comparable](zero time.Time) Clock[TimeoutType] {
+ return &Monotonic[TimeoutType]{
zero: zero,
}
}
// Zero returns a new Clock reset to the current time.
-func (m *Monotonic) Zero() Clock {
+func (m *Monotonic[TimeoutType]) Zero() Clock[TimeoutType] {
z := time.Now()
logging.Base().Debugf("Clock zeroed to %v", z)
- return MakeMonotonicClock(z)
+ return MakeMonotonicClock[TimeoutType](z)
}
// TimeoutAt returns a channel that will signal when the duration has elapsed.
-func (m *Monotonic) TimeoutAt(delta time.Duration) <-chan time.Time {
+func (m *Monotonic[TimeoutType]) TimeoutAt(delta time.Duration, timeoutType TimeoutType) <-chan time.Time {
if m.timeouts == nil {
- m.timeouts = make(map[time.Duration]<-chan time.Time)
+ m.timeouts = make(map[TimeoutType]timeout)
}
- timeoutCh, ok := m.timeouts[delta]
- if ok {
- return timeoutCh
+
+ tmt, ok := m.timeouts[timeoutType]
+ if ok && tmt.delta == delta {
+ // if the new timeout is the same as the current one for that type,
+ // return the existing channel.
+ return tmt.ch
}
+ tmt = timeout{delta: delta}
+
target := m.zero.Add(delta)
left := target.Sub(time.Now())
if left < 0 {
- timeout := make(chan time.Time)
- close(timeout)
- timeoutCh = timeout
+ ch := make(chan time.Time)
+ close(ch)
+ tmt.ch = ch
} else {
- timeoutCh = time.After(left)
+ tmt.ch = time.After(left)
}
- m.timeouts[delta] = timeoutCh
- return timeoutCh
+ m.timeouts[timeoutType] = tmt
+ return tmt.ch
}
// Encode implements Clock.Encode.
-func (m *Monotonic) Encode() []byte {
+func (m *Monotonic[TimeoutType]) Encode() []byte {
return protocol.EncodeReflect(m.zero)
}
// Decode implements Clock.Decode.
-func (m *Monotonic) Decode(data []byte) (Clock, error) {
+func (m *Monotonic[TimeoutType]) Decode(data []byte) (Clock[TimeoutType], error) {
var zero time.Time
err := protocol.DecodeReflect(data, &zero)
if err == nil {
@@ -80,14 +90,14 @@ func (m *Monotonic) Decode(data []byte) (Clock, error) {
} else {
logging.Base().Errorf("Clock decoded with zero at %v (err: %v)", zero, err)
}
- return MakeMonotonicClock(zero), err
+ return MakeMonotonicClock[TimeoutType](zero), err
}
-func (m *Monotonic) String() string {
+func (m *Monotonic[TimeoutType]) String() string {
return time.Time(m.zero).String()
}
// Since returns the time that has passed between the time the clock was last zeroed out and now
-func (m *Monotonic) Since() time.Duration {
+func (m *Monotonic[TimeoutType]) Since() time.Duration {
return time.Since(m.zero)
}
diff --git a/util/timers/monotonic_test.go b/util/timers/monotonic_test.go
index f8821b300b..912f1b8425 100644
--- a/util/timers/monotonic_test.go
+++ b/util/timers/monotonic_test.go
@@ -17,10 +17,11 @@
package timers
import (
- "github.com/algorand/go-algorand/test/partitiontest"
"math/rand"
"testing"
"time"
+
+ "github.com/algorand/go-algorand/test/partitiontest"
)
func polled(ch <-chan time.Time) bool {
@@ -35,14 +36,14 @@ func polled(ch <-chan time.Time) bool {
func TestMonotonicDelta(t *testing.T) {
partitiontest.PartitionTest(t)
- var m Monotonic
- var c Clock
+ var m Monotonic[int]
+ var c Clock[int]
var ch <-chan time.Time
d := time.Millisecond * 100
c = m.Zero()
- ch = c.TimeoutAt(d)
+ ch = c.TimeoutAt(d, 0)
if polled(ch) {
t.Errorf("channel fired ~100ms early")
}
@@ -52,7 +53,7 @@ func TestMonotonicDelta(t *testing.T) {
t.Errorf("channel failed to fire at 100ms")
}
- ch = c.TimeoutAt(d / 2)
+ ch = c.TimeoutAt(d/2, 0)
if !polled(ch) {
t.Errorf("channel failed to fire at 50ms")
}
@@ -61,12 +62,12 @@ func TestMonotonicDelta(t *testing.T) {
func TestMonotonicZeroDelta(t *testing.T) {
partitiontest.PartitionTest(t)
- var m Monotonic
- var c Clock
+ var m Monotonic[int]
+ var c Clock[int]
var ch <-chan time.Time
c = m.Zero()
- ch = c.TimeoutAt(0)
+ ch = c.TimeoutAt(0, 0)
if !polled(ch) {
t.Errorf("read failed on channel at zero timeout")
}
@@ -75,12 +76,12 @@ func TestMonotonicZeroDelta(t *testing.T) {
func TestMonotonicNegativeDelta(t *testing.T) {
partitiontest.PartitionTest(t)
- var m Monotonic
- var c Clock
+ var m Monotonic[int]
+ var c Clock[int]
var ch <-chan time.Time
c = m.Zero()
- ch = c.TimeoutAt(-time.Second)
+ ch = c.TimeoutAt(-time.Second, 0)
if !polled(ch) {
t.Errorf("read failed on channel at negative timeout")
}
@@ -89,14 +90,14 @@ func TestMonotonicNegativeDelta(t *testing.T) {
func TestMonotonicZeroTwice(t *testing.T) {
partitiontest.PartitionTest(t)
- var m Monotonic
- var c Clock
+ var m Monotonic[int]
+ var c Clock[int]
var ch <-chan time.Time
d := time.Millisecond * 100
c = m.Zero()
- ch = c.TimeoutAt(d)
+ ch = c.TimeoutAt(d, 0)
if polled(ch) {
t.Errorf("channel fired ~100ms early")
}
@@ -107,7 +108,7 @@ func TestMonotonicZeroTwice(t *testing.T) {
}
c = c.Zero()
- ch = c.TimeoutAt(d)
+ ch = c.TimeoutAt(d, 0)
if polled(ch) {
t.Errorf("channel fired ~100ms early after call to Zero")
}
@@ -121,21 +122,21 @@ func TestMonotonicZeroTwice(t *testing.T) {
func TestMonotonicEncodeDecode(t *testing.T) {
partitiontest.PartitionTest(t)
- singleTest := func(c Clock, descr string) {
+ singleTest := func(c Clock[int], descr string) {
data := c.Encode()
c0, err := c.Decode(data)
if err != nil {
t.Errorf("decoding error: %v", err)
}
- if !time.Time(c.(*Monotonic).zero).Equal(time.Time(c0.(*Monotonic).zero)) {
+ if !time.Time(c.(*Monotonic[int]).zero).Equal(time.Time(c0.(*Monotonic[int]).zero)) {
t.Errorf("%v clock not encoded properly: %v != %v", descr, c, c0)
}
}
- var c Clock
- var m Monotonic
+ var c Clock[int]
+ var m Monotonic[int]
- c = Clock(&m)
+ c = Clock[int](&m)
singleTest(c, "empty")
c = c.Zero()
@@ -144,11 +145,51 @@ func TestMonotonicEncodeDecode(t *testing.T) {
now := time.Now()
for i := 0; i < 100; i++ {
r := time.Duration(rand.Int63())
- c = Clock(
- &Monotonic{
+ c = Clock[int](
+ &Monotonic[int]{
zero: now.Add(r),
},
)
singleTest(c, "random")
}
}
+
+func TestTimeoutTypes(t *testing.T) {
+ partitiontest.PartitionTest(t)
+
+ var m Monotonic[int]
+ var c Clock[int]
+
+ d := time.Millisecond * 100
+
+ c = m.Zero()
+ ch1 := c.TimeoutAt(d, 0)
+ ch2 := c.TimeoutAt(d, 1)
+ if polled(ch1) {
+ t.Errorf("channel fired ~100ms early")
+ }
+ if polled(ch2) {
+ t.Errorf("channel fired ~100ms early")
+ }
+
+ if ch1 == ch2 {
+ t.Errorf("equal channels for different timeout types")
+ }
+
+ <-time.After(d * 2)
+ if !polled(ch1) {
+ t.Errorf("channel failed to fire at 100ms")
+ }
+ if !polled(ch2) {
+ t.Errorf("channel failed to fire at 100ms")
+ }
+
+ ch1 = c.TimeoutAt(d/2, 0)
+ if !polled(ch1) {
+ t.Errorf("channel failed to fire at 50ms")
+ }
+ ch2 = c.TimeoutAt(d/2, 0)
+ if !polled(ch2) {
+ t.Errorf("channel failed to fire at 50ms")
+ }
+}
From 8c8fe6abaa85e7e18f6153738ad0a283178a0bb7 Mon Sep 17 00:00:00 2001
From: Pavel Zbitskiy <65323360+algorandskiy@users.noreply.github.com>
Date: Fri, 18 Aug 2023 14:42:39 -0400
Subject: [PATCH 5/8] tests: log algod-err and algod-out on e2e failure (#5681)
---
test/framework/fixtures/libgoalFixture.go | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/test/framework/fixtures/libgoalFixture.go b/test/framework/fixtures/libgoalFixture.go
index c0527fdd62..dbeb3c1f8f 100644
--- a/test/framework/fixtures/libgoalFixture.go
+++ b/test/framework/fixtures/libgoalFixture.go
@@ -314,8 +314,12 @@ func (f *LibGoalFixture) ShutdownImpl(preserveData bool) {
if preserveData {
f.network.Stop(f.binDir)
f.dumpLogs(filepath.Join(f.PrimaryDataDir(), "node.log"))
+ f.dumpLogs(filepath.Join(f.PrimaryDataDir(), "algod-err.log"))
+ f.dumpLogs(filepath.Join(f.PrimaryDataDir(), "algod-out.log"))
for _, nodeDir := range f.NodeDataDirs() {
f.dumpLogs(filepath.Join(nodeDir, "node.log"))
+ f.dumpLogs(filepath.Join(nodeDir, "algod-err.log"))
+ f.dumpLogs(filepath.Join(nodeDir, "algod-out.log"))
}
} else {
f.network.Delete(f.binDir)
From cdbd0f1a2d2523598d76bebb65152af25fc5e96b Mon Sep 17 00:00:00 2001
From: Pavel Zbitskiy <65323360+algorandskiy@users.noreply.github.com>
Date: Fri, 18 Aug 2023 15:23:08 -0400
Subject: [PATCH 6/8] build: disable pebbledb on arm32 (#5682)
---
.../trackerdb/pebbledbdriver/pebbledriver.go | 2 ++
.../pebbledbdriver/pebbledriver_arm.go | 30 +++++++++++++++++++
2 files changed, 32 insertions(+)
create mode 100644 ledger/store/trackerdb/pebbledbdriver/pebbledriver_arm.go
diff --git a/ledger/store/trackerdb/pebbledbdriver/pebbledriver.go b/ledger/store/trackerdb/pebbledbdriver/pebbledriver.go
index ebef106db2..514dc0ee58 100644
--- a/ledger/store/trackerdb/pebbledbdriver/pebbledriver.go
+++ b/ledger/store/trackerdb/pebbledbdriver/pebbledriver.go
@@ -14,6 +14,8 @@
// You should have received a copy of the GNU Affero General Public License
// along with go-algorand. If not, see .
+//go:build !arm
+
package pebbledbdriver
import (
diff --git a/ledger/store/trackerdb/pebbledbdriver/pebbledriver_arm.go b/ledger/store/trackerdb/pebbledbdriver/pebbledriver_arm.go
new file mode 100644
index 0000000000..cd17555aea
--- /dev/null
+++ b/ledger/store/trackerdb/pebbledbdriver/pebbledriver_arm.go
@@ -0,0 +1,30 @@
+// Copyright (C) 2019-2023 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see .
+
+// go:build arm
+package pebbledbdriver
+
+import (
+ "errors"
+
+ "github.com/algorand/go-algorand/config"
+ "github.com/algorand/go-algorand/ledger/store/trackerdb"
+ "github.com/algorand/go-algorand/logging"
+)
+
+func Open(dbdir string, inMem bool, proto config.ConsensusParams, log logging.Logger) (trackerdb.Store, error) {
+ return nil, errors.New("pebbledb storage backend not supported on arm32")
+}
From 620e9bd1640596d06acc324a14a22767de8426f3 Mon Sep 17 00:00:00 2001
From: John Jannotti
Date: Fri, 18 Aug 2023 15:46:40 -0400
Subject: [PATCH 7/8] AVM: Expose `global` fields to TEAL that return MBR for
asset create/optin (#5680)
---
data/transactions/logic/README.md | 2 ++
data/transactions/logic/TEAL_opcodes.md | 2 ++
data/transactions/logic/assembler_test.go | 2 ++
data/transactions/logic/eval.go | 4 ++++
data/transactions/logic/eval_test.go | 5 +++--
data/transactions/logic/fields.go | 11 +++++++++++
data/transactions/logic/fields_string.go | 8 +++++---
data/transactions/logic/langspec.json | 8 ++++++--
data/transactions/logic/teal.tmLanguage.json | 2 +-
9 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/data/transactions/logic/README.md b/data/transactions/logic/README.md
index 6f4124f048..735bdc45d4 100644
--- a/data/transactions/logic/README.md
+++ b/data/transactions/logic/README.md
@@ -618,6 +618,8 @@ Global fields are fields that are common to all the transactions in the group. I
| 12 | OpcodeBudget | uint64 | v6 | The remaining cost that can be spent by opcodes in this program. |
| 13 | CallerApplicationID | uint64 | v6 | The application ID of the application that called this application. 0 if this application is at the top-level. Application mode only. |
| 14 | CallerApplicationAddress | address | v6 | The application address of the application that called this application. ZeroAddress if this application is at the top-level. Application mode only. |
+| 15 | AssetCreateMinBalance | uint64 | v10 | The additional minimum balance required to create (and opt-in to) an asset. |
+| 16 | AssetOptInMinBalance | uint64 | v10 | The additional minimum balance required to opt-in to an asset. |
**Asset Fields**
diff --git a/data/transactions/logic/TEAL_opcodes.md b/data/transactions/logic/TEAL_opcodes.md
index 5a30ce35c7..1d5bba1461 100644
--- a/data/transactions/logic/TEAL_opcodes.md
+++ b/data/transactions/logic/TEAL_opcodes.md
@@ -465,6 +465,8 @@ Fields
| 12 | OpcodeBudget | uint64 | v6 | The remaining cost that can be spent by opcodes in this program. |
| 13 | CallerApplicationID | uint64 | v6 | The application ID of the application that called this application. 0 if this application is at the top-level. Application mode only. |
| 14 | CallerApplicationAddress | address | v6 | The application address of the application that called this application. ZeroAddress if this application is at the top-level. Application mode only. |
+| 15 | AssetCreateMinBalance | uint64 | v10 | The additional minimum balance required to create (and opt-in to) an asset. |
+| 16 | AssetOptInMinBalance | uint64 | v10 | The additional minimum balance required to opt-in to an asset. |
## gtxn
diff --git a/data/transactions/logic/assembler_test.go b/data/transactions/logic/assembler_test.go
index fa0bcc1338..1769cfa9fb 100644
--- a/data/transactions/logic/assembler_test.go
+++ b/data/transactions/logic/assembler_test.go
@@ -1676,6 +1676,8 @@ txn NumApprovalProgramPages
txna ApprovalProgramPages 0
txn NumClearStateProgramPages
txna ClearStateProgramPages 0
+global AssetCreateMinBalance
+global AssetOptInMinBalance
`, AssemblerMaxVersion)
for _, globalField := range GlobalFieldNames {
if !strings.Contains(text, globalField) {
diff --git a/data/transactions/logic/eval.go b/data/transactions/logic/eval.go
index 4dc1290a49..871aa0399a 100644
--- a/data/transactions/logic/eval.go
+++ b/data/transactions/logic/eval.go
@@ -3630,6 +3630,10 @@ func (cx *EvalContext) globalFieldToValue(fs globalFieldSpec) (sv stackValue, er
} else {
sv.Bytes = zeroAddress[:]
}
+ case AssetCreateMinBalance:
+ sv.Uint = cx.Proto.MinBalance
+ case AssetOptInMinBalance:
+ sv.Uint = cx.Proto.MinBalance
default:
err = fmt.Errorf("invalid global field %d", fs.field)
}
diff --git a/data/transactions/logic/eval_test.go b/data/transactions/logic/eval_test.go
index 2947fe6d4d..20479c6905 100644
--- a/data/transactions/logic/eval_test.go
+++ b/data/transactions/logic/eval_test.go
@@ -1226,7 +1226,8 @@ const globalV9TestProgram = globalV8TestProgram + `
`
const globalV10TestProgram = globalV9TestProgram + `
-// No new globals in v10
+global AssetCreateMinBalance; int 1001; ==; &&
+global AssetOptInMinBalance; int 1001; ==; &&
`
func TestGlobal(t *testing.T) {
@@ -1249,7 +1250,7 @@ func TestGlobal(t *testing.T) {
7: {CallerApplicationAddress, globalV7TestProgram},
8: {CallerApplicationAddress, globalV8TestProgram},
9: {CallerApplicationAddress, globalV9TestProgram},
- 10: {CallerApplicationAddress, globalV10TestProgram},
+ 10: {AssetOptInMinBalance, globalV10TestProgram},
}
// tests keys are versions so they must be in a range 1..AssemblerMaxVersion plus zero version
require.LessOrEqual(t, len(tests), AssemblerMaxVersion+1)
diff --git a/data/transactions/logic/fields.go b/data/transactions/logic/fields.go
index 40660f1f40..10bd93cb20 100644
--- a/data/transactions/logic/fields.go
+++ b/data/transactions/logic/fields.go
@@ -528,6 +528,13 @@ const (
// CallerApplicationAddress The Address of the caller app, else ZeroAddress
CallerApplicationAddress
+ // AssetCreateMinBalance is the additional minimum balance required to
+ // create an asset (which also opts an account into that asset)
+ AssetCreateMinBalance
+
+ // AssetOptInMinBalance is the additional minimum balance required to opt in to an asset
+ AssetOptInMinBalance
+
invalidGlobalField // compile-time constant for number of fields
)
@@ -588,6 +595,10 @@ var globalFieldSpecs = [...]globalFieldSpec{
"The application ID of the application that called this application. 0 if this application is at the top-level."},
{CallerApplicationAddress, StackAddress, ModeApp, 6,
"The application address of the application that called this application. ZeroAddress if this application is at the top-level."},
+ {AssetCreateMinBalance, StackUint64, modeAny, 10,
+ "The additional minimum balance required to create (and opt-in to) an asset."},
+ {AssetOptInMinBalance, StackUint64, modeAny, 10,
+ "The additional minimum balance required to opt-in to an asset."},
}
func globalFieldSpecByField(f GlobalField) (globalFieldSpec, bool) {
diff --git a/data/transactions/logic/fields_string.go b/data/transactions/logic/fields_string.go
index 44531c2bdf..5ff79cf396 100644
--- a/data/transactions/logic/fields_string.go
+++ b/data/transactions/logic/fields_string.go
@@ -108,12 +108,14 @@ func _() {
_ = x[OpcodeBudget-12]
_ = x[CallerApplicationID-13]
_ = x[CallerApplicationAddress-14]
- _ = x[invalidGlobalField-15]
+ _ = x[AssetCreateMinBalance-15]
+ _ = x[AssetOptInMinBalance-16]
+ _ = x[invalidGlobalField-17]
}
-const _GlobalField_name = "MinTxnFeeMinBalanceMaxTxnLifeZeroAddressGroupSizeLogicSigVersionRoundLatestTimestampCurrentApplicationIDCreatorAddressCurrentApplicationAddressGroupIDOpcodeBudgetCallerApplicationIDCallerApplicationAddressinvalidGlobalField"
+const _GlobalField_name = "MinTxnFeeMinBalanceMaxTxnLifeZeroAddressGroupSizeLogicSigVersionRoundLatestTimestampCurrentApplicationIDCreatorAddressCurrentApplicationAddressGroupIDOpcodeBudgetCallerApplicationIDCallerApplicationAddressAssetCreateMinBalanceAssetOptInMinBalanceinvalidGlobalField"
-var _GlobalField_index = [...]uint8{0, 9, 19, 29, 40, 49, 64, 69, 84, 104, 118, 143, 150, 162, 181, 205, 223}
+var _GlobalField_index = [...]uint16{0, 9, 19, 29, 40, 49, 64, 69, 84, 104, 118, 143, 150, 162, 181, 205, 226, 246, 264}
func (i GlobalField) String() string {
if i >= GlobalField(len(_GlobalField_index)-1) {
diff --git a/data/transactions/logic/langspec.json b/data/transactions/logic/langspec.json
index 1892aa42be..c8fdb8ea3f 100644
--- a/data/transactions/logic/langspec.json
+++ b/data/transactions/logic/langspec.json
@@ -1126,7 +1126,9 @@
"GroupID",
"OpcodeBudget",
"CallerApplicationID",
- "CallerApplicationAddress"
+ "CallerApplicationAddress",
+ "AssetCreateMinBalance",
+ "AssetOptInMinBalance"
],
"ArgEnumTypes": [
"uint64",
@@ -1143,7 +1145,9 @@
"[32]byte",
"uint64",
"uint64",
- "address"
+ "address",
+ "uint64",
+ "uint64"
],
"Doc": "global field F",
"ImmediateNote": [
diff --git a/data/transactions/logic/teal.tmLanguage.json b/data/transactions/logic/teal.tmLanguage.json
index 59dc143681..ddacfaa422 100644
--- a/data/transactions/logic/teal.tmLanguage.json
+++ b/data/transactions/logic/teal.tmLanguage.json
@@ -112,7 +112,7 @@
},
{
"name": "variable.parameter.teal",
- "match": "\\b(unknown|pay|keyreg|acfg|axfer|afrz|appl|NoOp|OptIn|CloseOut|ClearState|UpdateApplication|DeleteApplication|Secp256k1|Secp256r1|Sender|Fee|FirstValid|FirstValidTime|LastValid|Note|Lease|Receiver|Amount|CloseRemainderTo|VotePK|SelectionPK|VoteFirst|VoteLast|VoteKeyDilution|Type|TypeEnum|XferAsset|AssetAmount|AssetSender|AssetReceiver|AssetCloseTo|GroupIndex|TxID|ApplicationID|OnCompletion|NumAppArgs|NumAccounts|ApprovalProgram|ClearStateProgram|RekeyTo|ConfigAsset|ConfigAssetTotal|ConfigAssetDecimals|ConfigAssetDefaultFrozen|ConfigAssetUnitName|ConfigAssetName|ConfigAssetURL|ConfigAssetMetadataHash|ConfigAssetManager|ConfigAssetReserve|ConfigAssetFreeze|ConfigAssetClawback|FreezeAsset|FreezeAssetAccount|FreezeAssetFrozen|NumAssets|NumApplications|GlobalNumUint|GlobalNumByteSlice|LocalNumUint|LocalNumByteSlice|ExtraProgramPages|Nonparticipation|NumLogs|CreatedAssetID|CreatedApplicationID|LastLog|StateProofPK|NumApprovalProgramPages|NumClearStateProgramPages|MinTxnFee|MinBalance|MaxTxnLife|ZeroAddress|GroupSize|LogicSigVersion|Round|LatestTimestamp|CurrentApplicationID|CreatorAddress|CurrentApplicationAddress|GroupID|OpcodeBudget|CallerApplicationID|CallerApplicationAddress|ApplicationArgs|Accounts|Assets|Applications|Logs|ApprovalProgramPages|ClearStateProgramPages|URLEncoding|StdEncoding|JSONString|JSONUint64|JSONObject|AssetBalance|AssetFrozen|AssetTotal|AssetDecimals|AssetDefaultFrozen|AssetUnitName|AssetName|AssetURL|AssetMetadataHash|AssetManager|AssetReserve|AssetFreeze|AssetClawback|AssetCreator|AppApprovalProgram|AppClearStateProgram|AppGlobalNumUint|AppGlobalNumByteSlice|AppLocalNumUint|AppLocalNumByteSlice|AppExtraProgramPages|AppCreator|AppAddress|AcctBalance|AcctMinBalance|AcctAuthAddr|AcctTotalNumUint|AcctTotalNumByteSlice|AcctTotalExtraAppPages|AcctTotalAppsCreated|AcctTotalAppsOptedIn|AcctTotalAssetsCreated|AcctTotalAssets|AcctTotalBoxes|AcctTotalBoxBytes|VrfAlgorand|BlkSeed|BlkTimestamp)\\b"
+ "match": "\\b(unknown|pay|keyreg|acfg|axfer|afrz|appl|NoOp|OptIn|CloseOut|ClearState|UpdateApplication|DeleteApplication|Secp256k1|Secp256r1|Sender|Fee|FirstValid|FirstValidTime|LastValid|Note|Lease|Receiver|Amount|CloseRemainderTo|VotePK|SelectionPK|VoteFirst|VoteLast|VoteKeyDilution|Type|TypeEnum|XferAsset|AssetAmount|AssetSender|AssetReceiver|AssetCloseTo|GroupIndex|TxID|ApplicationID|OnCompletion|NumAppArgs|NumAccounts|ApprovalProgram|ClearStateProgram|RekeyTo|ConfigAsset|ConfigAssetTotal|ConfigAssetDecimals|ConfigAssetDefaultFrozen|ConfigAssetUnitName|ConfigAssetName|ConfigAssetURL|ConfigAssetMetadataHash|ConfigAssetManager|ConfigAssetReserve|ConfigAssetFreeze|ConfigAssetClawback|FreezeAsset|FreezeAssetAccount|FreezeAssetFrozen|NumAssets|NumApplications|GlobalNumUint|GlobalNumByteSlice|LocalNumUint|LocalNumByteSlice|ExtraProgramPages|Nonparticipation|NumLogs|CreatedAssetID|CreatedApplicationID|LastLog|StateProofPK|NumApprovalProgramPages|NumClearStateProgramPages|MinTxnFee|MinBalance|MaxTxnLife|ZeroAddress|GroupSize|LogicSigVersion|Round|LatestTimestamp|CurrentApplicationID|CreatorAddress|CurrentApplicationAddress|GroupID|OpcodeBudget|CallerApplicationID|CallerApplicationAddress|AssetCreateMinBalance|AssetOptInMinBalance|ApplicationArgs|Accounts|Assets|Applications|Logs|ApprovalProgramPages|ClearStateProgramPages|URLEncoding|StdEncoding|JSONString|JSONUint64|JSONObject|AssetBalance|AssetFrozen|AssetTotal|AssetDecimals|AssetDefaultFrozen|AssetUnitName|AssetName|AssetURL|AssetMetadataHash|AssetManager|AssetReserve|AssetFreeze|AssetClawback|AssetCreator|AppApprovalProgram|AppClearStateProgram|AppGlobalNumUint|AppGlobalNumByteSlice|AppLocalNumUint|AppLocalNumByteSlice|AppExtraProgramPages|AppCreator|AppAddress|AcctBalance|AcctMinBalance|AcctAuthAddr|AcctTotalNumUint|AcctTotalNumByteSlice|AcctTotalExtraAppPages|AcctTotalAppsCreated|AcctTotalAppsOptedIn|AcctTotalAssetsCreated|AcctTotalAssets|AcctTotalBoxes|AcctTotalBoxBytes|VrfAlgorand|BlkSeed|BlkTimestamp)\\b"
}
]
},
From dfdb29324f7703f7aefa80272c7715ead75e7bb2 Mon Sep 17 00:00:00 2001
From: Gary <982483+gmalouf@users.noreply.github.com>
Date: Fri, 18 Aug 2023 16:20:23 -0400
Subject: [PATCH 8/8] txHandler: Enable ERL by default in configuration.
(#5683)
---
config/localTemplate.go | 2 +-
config/local_defaults.go | 2 +-
data/txHandler_test.go | 2 +-
installer/config.json.example | 2 +-
test/testdata/configs/config-v30.json | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/config/localTemplate.go b/config/localTemplate.go
index aa25417e30..a72ac2fcec 100644
--- a/config/localTemplate.go
+++ b/config/localTemplate.go
@@ -176,7 +176,7 @@ type Local struct {
// EnableTxBacklogRateLimiting controls if a rate limiter and congestion manager shouild be attached to the tx backlog enqueue process
// if enabled, the over-all TXBacklog Size will be larger by MAX_PEERS*TxBacklogReservedCapacityPerPeer
- EnableTxBacklogRateLimiting bool `version[27]:"false"`
+ EnableTxBacklogRateLimiting bool `version[27]:"false" version[30]:"true"`
// TxBacklogSize is the queue size used for receiving transactions. default of 26000 to approximate 1 block of transactions
// if EnableTxBacklogRateLimiting enabled, the over-all size will be larger by MAX_PEERS*TxBacklogReservedCapacityPerPeer
diff --git a/config/local_defaults.go b/config/local_defaults.go
index 1b867ff8e6..21a296b970 100644
--- a/config/local_defaults.go
+++ b/config/local_defaults.go
@@ -76,7 +76,7 @@ var defaultLocal = Local{
EnableRequestLogger: false,
EnableRuntimeMetrics: false,
EnableTopAccountsReporting: false,
- EnableTxBacklogRateLimiting: false,
+ EnableTxBacklogRateLimiting: true,
EnableTxnEvalTracer: false,
EnableUsageLog: false,
EnableVerbosedTransactionSyncLogging: false,
diff --git a/data/txHandler_test.go b/data/txHandler_test.go
index f51290a374..486bd7c0f8 100644
--- a/data/txHandler_test.go
+++ b/data/txHandler_test.go
@@ -2439,7 +2439,7 @@ func TestTxHandlerRestartWithBacklogAndTxPool(t *testing.T) { //nolint:parallelt
data = append(data, protocol.Encode(&stxn)...)
}
encodedSignedTransactionGroups =
- append(encodedSignedTransactionGroups, network.IncomingMessage{Data: data})
+ append(encodedSignedTransactionGroups, network.IncomingMessage{Data: data, Sender: mockSender{}})
}
// start the handler
diff --git a/installer/config.json.example b/installer/config.json.example
index 6df0464f17..094c7ca7df 100644
--- a/installer/config.json.example
+++ b/installer/config.json.example
@@ -55,7 +55,7 @@
"EnableRequestLogger": false,
"EnableRuntimeMetrics": false,
"EnableTopAccountsReporting": false,
- "EnableTxBacklogRateLimiting": false,
+ "EnableTxBacklogRateLimiting": true,
"EnableTxnEvalTracer": false,
"EnableUsageLog": false,
"EnableVerbosedTransactionSyncLogging": false,
diff --git a/test/testdata/configs/config-v30.json b/test/testdata/configs/config-v30.json
index 6df0464f17..094c7ca7df 100644
--- a/test/testdata/configs/config-v30.json
+++ b/test/testdata/configs/config-v30.json
@@ -55,7 +55,7 @@
"EnableRequestLogger": false,
"EnableRuntimeMetrics": false,
"EnableTopAccountsReporting": false,
- "EnableTxBacklogRateLimiting": false,
+ "EnableTxBacklogRateLimiting": true,
"EnableTxnEvalTracer": false,
"EnableUsageLog": false,
"EnableVerbosedTransactionSyncLogging": false,