github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/types/test_fixtures.go (about) 1 package types 2 3 import ( 4 "bytes" 5 "crypto/sha256" 6 "encoding/json" 7 "math/rand" 8 9 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 10 ) 11 12 func GenesisFixture(mutators ...func(*GenesisState)) GenesisState { 13 const ( 14 numCodes = 2 15 numContracts = 2 16 numSequences = 2 17 numMsg = 3 18 ) 19 20 fixture := GenesisState{ 21 Params: DefaultParams(), 22 Codes: make([]Code, numCodes), 23 Contracts: make([]Contract, numContracts), 24 Sequences: make([]Sequence, numSequences), 25 } 26 for i := 0; i < numCodes; i++ { 27 fixture.Codes[i] = CodeFixture() 28 } 29 for i := 0; i < numContracts; i++ { 30 fixture.Contracts[i] = ContractFixture() 31 } 32 for i := 0; i < numSequences; i++ { 33 fixture.Sequences[i] = Sequence{ 34 IDKey: randBytes(5), 35 Value: uint64(i), 36 } 37 } 38 fixture.GenMsgs = []GenesisState_GenMsgs{ 39 {Sum: &GenesisState_GenMsgs_StoreCode{StoreCode: MsgStoreCodeFixture()}}, 40 {Sum: &GenesisState_GenMsgs_InstantiateContract{InstantiateContract: MsgInstantiateContractFixture()}}, 41 {Sum: &GenesisState_GenMsgs_ExecuteContract{ExecuteContract: MsgExecuteContractFixture()}}, 42 } 43 for _, m := range mutators { 44 m(&fixture) 45 } 46 return fixture 47 } 48 49 func randBytes(n int) []byte { 50 r := make([]byte, n) 51 rand.Read(r) 52 return r 53 } 54 55 func CodeFixture(mutators ...func(*Code)) Code { 56 wasmCode := randBytes(100) 57 58 fixture := Code{ 59 CodeID: 1, 60 CodeInfo: CodeInfoFixture(WithSHA256CodeHash(wasmCode)), 61 CodeBytes: wasmCode, 62 } 63 64 for _, m := range mutators { 65 m(&fixture) 66 } 67 return fixture 68 } 69 70 func CodeInfoFixture(mutators ...func(*CodeInfo)) CodeInfo { 71 wasmCode := bytes.Repeat([]byte{0x1}, 10) 72 codeHash := sha256.Sum256(wasmCode) 73 const anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 74 fixture := CodeInfo{ 75 CodeHash: codeHash[:], 76 Creator: anyAddress, 77 InstantiateConfig: AllowEverybody, 78 } 79 for _, m := range mutators { 80 m(&fixture) 81 } 82 return fixture 83 } 84 85 func ContractFixture(mutators ...func(*Contract)) Contract { 86 const anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 87 88 fixture := Contract{ 89 ContractAddress: anyAddress, 90 ContractInfo: ContractInfoFixture(OnlyGenesisFields), 91 ContractState: []Model{{Key: []byte("anyKey"), Value: []byte("anyValue")}}, 92 } 93 94 for _, m := range mutators { 95 m(&fixture) 96 } 97 return fixture 98 } 99 100 func OnlyGenesisFields(info *ContractInfo) { 101 info.Created = nil 102 } 103 104 func ContractInfoFixture(mutators ...func(*ContractInfo)) ContractInfo { 105 const anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 106 107 fixture := ContractInfo{ 108 CodeID: 1, 109 Creator: anyAddress, 110 Label: "any", 111 Created: &AbsoluteTxPosition{BlockHeight: 1, TxIndex: 1}, 112 } 113 114 for _, m := range mutators { 115 m(&fixture) 116 } 117 return fixture 118 } 119 120 func WithSHA256CodeHash(wasmCode []byte) func(info *CodeInfo) { 121 return func(info *CodeInfo) { 122 codeHash := sha256.Sum256(wasmCode) 123 info.CodeHash = codeHash[:] 124 } 125 } 126 127 func MsgStoreCodeFixture(mutators ...func(*MsgStoreCode)) *MsgStoreCode { 128 wasmIdent := []byte("\x00\x61\x73\x6D") 129 const anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 130 r := &MsgStoreCode{ 131 Sender: anyAddress, 132 WASMByteCode: wasmIdent, 133 InstantiatePermission: &AllowEverybody, 134 } 135 for _, m := range mutators { 136 m(r) 137 } 138 return r 139 } 140 141 func MsgInstantiateContractFixture(mutators ...func(*MsgInstantiateContract)) *MsgInstantiateContract { 142 const anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 143 r := &MsgInstantiateContract{ 144 Sender: anyAddress, 145 Admin: anyAddress, 146 CodeID: 1, 147 Label: "testing", 148 Msg: []byte(`{"foo":"bar"}`), 149 Funds: sdk.CoinAdapters{{ 150 Denom: "stake", 151 Amount: sdk.NewInt(1), 152 }}, 153 } 154 for _, m := range mutators { 155 m(r) 156 } 157 return r 158 } 159 160 func MsgExecuteContractFixture(mutators ...func(*MsgExecuteContract)) *MsgExecuteContract { 161 const ( 162 anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 163 firstContractAddress = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" 164 ) 165 r := &MsgExecuteContract{ 166 Sender: anyAddress, 167 Contract: firstContractAddress, 168 Msg: []byte(`{"do":"something"}`), 169 Funds: sdk.CoinAdapters{{ 170 Denom: "stake", 171 Amount: sdk.NewInt(1), 172 }}, 173 } 174 for _, m := range mutators { 175 m(r) 176 } 177 return r 178 } 179 180 func StoreCodeProposalFixture(mutators ...func(*StoreCodeProposal)) *StoreCodeProposal { 181 const anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 182 p := &StoreCodeProposal{ 183 Title: "Foo", 184 Description: "Bar", 185 RunAs: anyAddress, 186 WASMByteCode: []byte{0x0}, 187 } 188 for _, m := range mutators { 189 m(p) 190 } 191 return p 192 } 193 194 func InstantiateContractProposalFixture(mutators ...func(p *InstantiateContractProposal)) *InstantiateContractProposal { 195 var ( 196 anyValidAddress sdk.AccAddress = bytes.Repeat([]byte{0x1}, ContractAddrLen) 197 198 initMsg = struct { 199 Verifier sdk.AccAddress `json:"verifier"` 200 Beneficiary sdk.AccAddress `json:"beneficiary"` 201 }{ 202 Verifier: anyValidAddress, 203 Beneficiary: anyValidAddress, 204 } 205 ) 206 const anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 207 208 initMsgBz, err := json.Marshal(initMsg) 209 if err != nil { 210 panic(err) 211 } 212 p := &InstantiateContractProposal{ 213 Title: "Foo", 214 Description: "Bar", 215 RunAs: anyAddress, 216 Admin: anyAddress, 217 CodeID: 1, 218 Label: "testing", 219 Msg: initMsgBz, 220 Funds: nil, 221 } 222 223 for _, m := range mutators { 224 m(p) 225 } 226 return p 227 } 228 229 func MigrateContractProposalFixture(mutators ...func(p *MigrateContractProposal)) *MigrateContractProposal { 230 var ( 231 anyValidAddress sdk.AccAddress = bytes.Repeat([]byte{0x1}, ContractAddrLen) 232 233 migMsg = struct { 234 Verifier sdk.AccAddress `json:"verifier"` 235 }{Verifier: anyValidAddress} 236 ) 237 238 migMsgBz, err := json.Marshal(migMsg) 239 if err != nil { 240 panic(err) 241 } 242 const ( 243 contractAddr = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" 244 anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 245 ) 246 p := &MigrateContractProposal{ 247 Title: "Foo", 248 Description: "Bar", 249 Contract: contractAddr, 250 CodeID: 1, 251 Msg: migMsgBz, 252 } 253 254 for _, m := range mutators { 255 m(p) 256 } 257 return p 258 } 259 260 func SudoContractProposalFixture(mutators ...func(p *SudoContractProposal)) *SudoContractProposal { 261 const ( 262 contractAddr = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" 263 ) 264 265 p := &SudoContractProposal{ 266 Title: "Foo", 267 Description: "Bar", 268 Contract: contractAddr, 269 Msg: []byte(`{"do":"something"}`), 270 } 271 272 for _, m := range mutators { 273 m(p) 274 } 275 return p 276 } 277 278 func ExecuteContractProposalFixture(mutators ...func(p *ExecuteContractProposal)) *ExecuteContractProposal { 279 const ( 280 contractAddr = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" 281 anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 282 ) 283 284 p := &ExecuteContractProposal{ 285 Title: "Foo", 286 Description: "Bar", 287 Contract: contractAddr, 288 RunAs: anyAddress, 289 Msg: []byte(`{"do":"something"}`), 290 Funds: sdk.CoinsToCoinAdapters(sdk.Coins{{ 291 Denom: "stake", 292 Amount: sdk.NewDec(1), 293 }}), 294 } 295 296 for _, m := range mutators { 297 m(p) 298 } 299 return p 300 } 301 302 func UpdateAdminProposalFixture(mutators ...func(p *UpdateAdminProposal)) *UpdateAdminProposal { 303 const ( 304 contractAddr = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" 305 anyAddress = "cosmos1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs2m6sx4" 306 ) 307 308 p := &UpdateAdminProposal{ 309 Title: "Foo", 310 Description: "Bar", 311 NewAdmin: anyAddress, 312 Contract: contractAddr, 313 } 314 for _, m := range mutators { 315 m(p) 316 } 317 return p 318 } 319 320 func ClearAdminProposalFixture(mutators ...func(p *ClearAdminProposal)) *ClearAdminProposal { 321 const contractAddr = "cosmos14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9s4hmalr" 322 p := &ClearAdminProposal{ 323 Title: "Foo", 324 Description: "Bar", 325 Contract: contractAddr, 326 } 327 for _, m := range mutators { 328 m(p) 329 } 330 return p 331 }