diff --git a/.github/workflows/cadence_test.yml b/.github/workflows/cadence_test.yml index 0a80a736..deac5b25 100644 --- a/.github/workflows/cadence_test.yml +++ b/.github/workflows/cadence_test.yml @@ -19,7 +19,7 @@ jobs: restore-keys: | ${{ runner.os }}-go- - name: Install Flow CLI - run: sh -ci "$(curl -fsSL https://raw.githubusercontent.com/onflow/flow-cli/feature/stable-cadence/install.sh)" + run: sh -ci "$(curl -fsSL https://raw.githubusercontent.com/onflow/flow-cli/master/install.sh)" - name: Flow CLI Version run: flow-c1 version - name: Update PATH diff --git a/cadence/args/bridged-nft-code-chunks-args-crescendo.json b/cadence/args/bridged-nft-code-chunks-args-crescendo.json index 635328fd..90f92eef 100644 --- a/cadence/args/bridged-nft-code-chunks-args-crescendo.json +++ b/cadence/args/bridged-nft-code-chunks-args-crescendo.json @@ -52,7 +52,7 @@ "value": "2e4e46543e28290a20202020202020207d0a0a20202020202020202f2f2f2052656d6f76657320616e204e46542066726f6d2074686520636f6c6c656374696f6e20616e64206d6f76657320697420746f207468652063616c6c65720a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e20776974686472617728776974686472617749443a2055496e743634293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a2020202020202020202020206c657420746f6b656e203c2d2073656c662e6f776e65644e4654732e72656d6f7665286b65793a2077697468647261774944290a202020202020202020202020202020203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642049442066726f6d2074686520636f6c6c656374696f6e22290a0a20202020202020202020202072657475726e203c2d746f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2057697468647261777320616e204e46542066726f6d2074686520636f6c6c656374696f6e206279206974732045564d2049440a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e207769746864726177427945564d4944285f2069643a2055496e74323536293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a20202020202020202020202072657475726e203c2d2073656c662e776974686472617728776974686472617749443a200a2020202020202020202020202020202073656c662e676574436164656e636549442866726f6d3a20696429203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642045564d2049442066726f6d2074686520636f6c6c656374696f6e22290a202020202020202020202020290a20202020202020207d0a0a20202020202020202f2f2f205474616b65732061204e465420616e64206164647320697420746f2074686520636f6c6c656374696f6e732064696374696f6e61727920616e6420616464732074686520494420746f207468652065766d4944546f466c6f774944206d617070696e670a202020202020202061636365737328616c6c292066756e206465706f73697428746f6b656e3a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d29207b0a2020202020202020202020206c657420746f6b656e203c2d20746f6b656e206173212040" }, { "type": "String", - "value": "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069660a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d203f3f2055496e7436342865766d4944290a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20" + "value": "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069662069742065786973747320696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202069662073656c662e65766d4944546f466c6f7749445b65766d49445d20213d206e696c207b0a2020202020202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d0a2020202020202020202020207d20656c73652069662065766d4944203c2055496e743235362855496e7436342e6d6178292026262073656c662e626f72726f774e46542855496e7436342865766d4944292920213d206e696c207b0a2020202020202020202020202020202072657475726e2055496e7436342865766d4944290a2020202020202020202020207d20656c7365207b0a2020202020202020202020202020202072657475726e206e696c0a2020202020202020202020207d0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20" }, { "type": "String", "value": "2e636f6e74726163745552490a20202020202020207d0a0a20202020202020202f2f2f20476574732074686520616d6f756e74206f66204e4654732073746f72656420696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e206765744c656e67746828293a20496e74207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579732e6c656e6774680a20202020202020207d0a0a20202020202020202f2f2f205265747269657665732061207265666572656e636520746f20746865204e46542073746f72656420696e2074686520636f6c6c656374696f6e206279206974732049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f774e4654285f2069643a2055496e743634293a20267b4e6f6e46756e6769626c65546f6b656e2e4e46547d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d0a20202020202020207d0a0a20202020202020202f2f2f20426f72726f77207468652076696577207265736f6c76657220666f722074686520737065636966696564204e46542049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f77566965775265736f6c7665722869643a2055496e743634293a20267b566965775265736f6c7665722e5265736f6c7665727d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d20617320267b566965775265736f6c7665722e5265736f6c7665727d3f203f3f206e696c0a20202020202020207d0a0a20202020202020202f2f2f204372656174657320616e20656d70747920636f6c6c656374696f6e0a202020202020202061636365737328616c6c292066756e20637265617465456d707479436f6c6c656374696f6e28293a20407b4e6f6e46756e6769626c65546f6b656e2e436f6c6c656374696f6e7d20207b0a20202020202020202020202072657475726e203c2d" @@ -76,7 +76,7 @@ "value": "2e637265617465456d707479436f6c6c656374696f6e286e6674547970653a20547970653c40" }, { "type": "String", - "value": "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a202254686520466c6f77564d2042726964676564204e465420436f6c6c656374696f6e222c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f6272696467652e666c6f772e636f6d2f6e667422292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40" + "value": "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f706f72742e666c6f772e636f6d2f22292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40" }, { "type": "String", "value": "2e4e46543e28292c20776974683a2073656c662e65766d4e4654436f6e747261637441646472657373290a2020202020202020466c6f7745564d4272696467654e4654457363726f772e696e697469616c697a65457363726f77280a202020202020202020202020666f72547970653a20547970653c40" diff --git a/cadence/args/bridged-nft-code-chunks-args-emulator.json b/cadence/args/bridged-nft-code-chunks-args-emulator.json index 8df73a5c..6c1a8feb 100644 --- a/cadence/args/bridged-nft-code-chunks-args-emulator.json +++ b/cadence/args/bridged-nft-code-chunks-args-emulator.json @@ -52,7 +52,7 @@ "value": "2e4e46543e28290a20202020202020207d0a0a20202020202020202f2f2f2052656d6f76657320616e204e46542066726f6d2074686520636f6c6c656374696f6e20616e64206d6f76657320697420746f207468652063616c6c65720a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e20776974686472617728776974686472617749443a2055496e743634293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a2020202020202020202020206c657420746f6b656e203c2d2073656c662e6f776e65644e4654732e72656d6f7665286b65793a2077697468647261774944290a202020202020202020202020202020203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642049442066726f6d2074686520636f6c6c656374696f6e22290a0a20202020202020202020202072657475726e203c2d746f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2057697468647261777320616e204e46542066726f6d2074686520636f6c6c656374696f6e206279206974732045564d2049440a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e207769746864726177427945564d4944285f2069643a2055496e74323536293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a20202020202020202020202072657475726e203c2d2073656c662e776974686472617728776974686472617749443a200a2020202020202020202020202020202073656c662e676574436164656e636549442866726f6d3a20696429203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642045564d2049442066726f6d2074686520636f6c6c656374696f6e22290a202020202020202020202020290a20202020202020207d0a0a20202020202020202f2f2f205474616b65732061204e465420616e64206164647320697420746f2074686520636f6c6c656374696f6e732064696374696f6e61727920616e6420616464732074686520494420746f207468652065766d4944546f466c6f774944206d617070696e670a202020202020202061636365737328616c6c292066756e206465706f73697428746f6b656e3a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d29207b0a2020202020202020202020206c657420746f6b656e203c2d20746f6b656e206173212040" }, { "type": "String", - "value": "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069660a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d203f3f2055496e7436342865766d4944290a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20" + "value": "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069662069742065786973747320696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202069662073656c662e65766d4944546f466c6f7749445b65766d49445d20213d206e696c207b0a2020202020202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d0a2020202020202020202020207d20656c73652069662065766d4944203c2055496e743235362855496e7436342e6d6178292026262073656c662e626f72726f774e46542855496e7436342865766d4944292920213d206e696c207b0a2020202020202020202020202020202072657475726e2055496e7436342865766d4944290a2020202020202020202020207d20656c7365207b0a2020202020202020202020202020202072657475726e206e696c0a2020202020202020202020207d0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20" }, { "type": "String", "value": "2e636f6e74726163745552490a20202020202020207d0a0a20202020202020202f2f2f20476574732074686520616d6f756e74206f66204e4654732073746f72656420696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e206765744c656e67746828293a20496e74207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579732e6c656e6774680a20202020202020207d0a0a20202020202020202f2f2f205265747269657665732061207265666572656e636520746f20746865204e46542073746f72656420696e2074686520636f6c6c656374696f6e206279206974732049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f774e4654285f2069643a2055496e743634293a20267b4e6f6e46756e6769626c65546f6b656e2e4e46547d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d0a20202020202020207d0a0a20202020202020202f2f2f20426f72726f77207468652076696577207265736f6c76657220666f722074686520737065636966696564204e46542049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f77566965775265736f6c7665722869643a2055496e743634293a20267b566965775265736f6c7665722e5265736f6c7665727d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d20617320267b566965775265736f6c7665722e5265736f6c7665727d3f203f3f206e696c0a20202020202020207d0a0a20202020202020202f2f2f204372656174657320616e20656d70747920636f6c6c656374696f6e0a202020202020202061636365737328616c6c292066756e20637265617465456d707479436f6c6c656374696f6e28293a20407b4e6f6e46756e6769626c65546f6b656e2e436f6c6c656374696f6e7d20207b0a20202020202020202020202072657475726e203c2d" @@ -76,7 +76,7 @@ "value": "2e637265617465456d707479436f6c6c656374696f6e286e6674547970653a20547970653c40" }, { "type": "String", - "value": "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a202254686520466c6f77564d2042726964676564204e465420436f6c6c656374696f6e222c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f6272696467652e666c6f772e636f6d2f6e667422292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d657461646174615669657773612e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d657461646174615669657773612e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40" + "value": "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f706f72742e666c6f772e636f6d2f22292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d657461646174615669657773612e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d657461646174615669657773612e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40" }, { "type": "String", "value": "2e4e46543e28292c20776974683a2073656c662e65766d4e4654436f6e747261637441646472657373290a2020202020202020466c6f7745564d4272696467654e4654457363726f772e696e697469616c697a65457363726f77280a202020202020202020202020666f72547970653a20547970653c40" diff --git a/cadence/args/bridged-nft-code-chunks-args-previewnet.json b/cadence/args/bridged-nft-code-chunks-args-previewnet.json index fbbd6f80..955913a0 100644 --- a/cadence/args/bridged-nft-code-chunks-args-previewnet.json +++ b/cadence/args/bridged-nft-code-chunks-args-previewnet.json @@ -52,7 +52,7 @@ "value": "2e4e46543e28290a20202020202020207d0a0a20202020202020202f2f2f2052656d6f76657320616e204e46542066726f6d2074686520636f6c6c656374696f6e20616e64206d6f76657320697420746f207468652063616c6c65720a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e20776974686472617728776974686472617749443a2055496e743634293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a2020202020202020202020206c657420746f6b656e203c2d2073656c662e6f776e65644e4654732e72656d6f7665286b65793a2077697468647261774944290a202020202020202020202020202020203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642049442066726f6d2074686520636f6c6c656374696f6e22290a0a20202020202020202020202072657475726e203c2d746f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2057697468647261777320616e204e46542066726f6d2074686520636f6c6c656374696f6e206279206974732045564d2049440a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e207769746864726177427945564d4944285f2069643a2055496e74323536293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a20202020202020202020202072657475726e203c2d2073656c662e776974686472617728776974686472617749443a200a2020202020202020202020202020202073656c662e676574436164656e636549442866726f6d3a20696429203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642045564d2049442066726f6d2074686520636f6c6c656374696f6e22290a202020202020202020202020290a20202020202020207d0a0a20202020202020202f2f2f205474616b65732061204e465420616e64206164647320697420746f2074686520636f6c6c656374696f6e732064696374696f6e61727920616e6420616464732074686520494420746f207468652065766d4944546f466c6f774944206d617070696e670a202020202020202061636365737328616c6c292066756e206465706f73697428746f6b656e3a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d29207b0a2020202020202020202020206c657420746f6b656e203c2d20746f6b656e206173212040" }, { "type": "String", - "value": "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069660a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d203f3f2055496e7436342865766d4944290a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20" + "value": "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069662069742065786973747320696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202069662073656c662e65766d4944546f466c6f7749445b65766d49445d20213d206e696c207b0a2020202020202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d0a2020202020202020202020207d20656c73652069662065766d4944203c2055496e743235362855496e7436342e6d6178292026262073656c662e626f72726f774e46542855496e7436342865766d4944292920213d206e696c207b0a2020202020202020202020202020202072657475726e2055496e7436342865766d4944290a2020202020202020202020207d20656c7365207b0a2020202020202020202020202020202072657475726e206e696c0a2020202020202020202020207d0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20" }, { "type": "String", "value": "2e636f6e74726163745552490a20202020202020207d0a0a20202020202020202f2f2f20476574732074686520616d6f756e74206f66204e4654732073746f72656420696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e206765744c656e67746828293a20496e74207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579732e6c656e6774680a20202020202020207d0a0a20202020202020202f2f2f205265747269657665732061207265666572656e636520746f20746865204e46542073746f72656420696e2074686520636f6c6c656374696f6e206279206974732049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f774e4654285f2069643a2055496e743634293a20267b4e6f6e46756e6769626c65546f6b656e2e4e46547d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d0a20202020202020207d0a0a20202020202020202f2f2f20426f72726f77207468652076696577207265736f6c76657220666f722074686520737065636966696564204e46542049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f77566965775265736f6c7665722869643a2055496e743634293a20267b566965775265736f6c7665722e5265736f6c7665727d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d20617320267b566965775265736f6c7665722e5265736f6c7665727d3f203f3f206e696c0a20202020202020207d0a0a20202020202020202f2f2f204372656174657320616e20656d70747920636f6c6c656374696f6e0a202020202020202061636365737328616c6c292066756e20637265617465456d707479436f6c6c656374696f6e28293a20407b4e6f6e46756e6769626c65546f6b656e2e436f6c6c656374696f6e7d20207b0a20202020202020202020202072657475726e203c2d" @@ -76,7 +76,7 @@ "value": "2e637265617465456d707479436f6c6c656374696f6e286e6674547970653a20547970653c40" }, { "type": "String", - "value": "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a202254686520466c6f77564d2042726964676564204e465420436f6c6c656374696f6e222c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f6272696467652e666c6f772e636f6d2f6e667422292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40" + "value": "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f706f72742e666c6f772e636f6d2f22292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40" }, { "type": "String", "value": "2e4e46543e28292c20776974683a2073656c662e65766d4e4654436f6e747261637441646472657373290a2020202020202020466c6f7745564d4272696467654e4654457363726f772e696e697469616c697a65457363726f77280a202020202020202020202020666f72547970653a20547970653c40" diff --git a/cadence/args/deploy-deployment-registry-args.json b/cadence/args/deploy-deployment-registry-args.json index 67bf4a0d..4aeabcc3 100644 --- a/cadence/args/deploy-deployment-registry-args.json +++ b/cadence/args/deploy-deployment-registry-args.json @@ -1,7 +1,7 @@ [ { "type": "String", - "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610058565b50600080546001600160a01b031916331790556100aa565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6108a5806100b96000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063862119ae11610071578063862119ae146101315780638da5cb5b14610144578063a6de610514610155578063b3d5dbdc14610168578063f2fde38b14610188578063faab9d391461019b57600080fd5b806301ffc9a7146100ae57806304433bbc146100d65780632b20e39714610101578063522791d114610114578063715018a614610129575b600080fd5b6100c16100bc36600461051c565b6101ae565b60405190151581526020015b60405180910390f35b6100e96100e43660046105f0565b6101e5565b6040516001600160a01b0390911681526020016100cd565b6000546100e9906001600160a01b031681565b610127610122366004610649565b610216565b005b6101276102b7565b6100c161013f3660046105f0565b6102cb565b6003546001600160a01b03166100e9565b6100c1610163366004610697565b610308565b61017b610176366004610697565b610334565b6040516100cd91906106d6565b610127610196366004610697565b6103e0565b6101276101a9366004610697565b61041e565b60006001600160e01b0319821663976998cb60e01b14806101df57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006001826040516101f79190610709565b908152604051908190036020019020546001600160a01b031692915050565b6000546001600160a01b031633146102a95760405162461bcd60e51b815260206004820152604560248201527f466c6f774272696467654465706c6f796d656e7452656769737472793a204f6e60448201527f6c79207265676973747261722063616e207265676973746572206173736f636960648201526430ba34b7b760d91b608482015260a4015b60405180910390fd5b6102b38282610444565b5050565b6102bf61049d565b6102c960006104ca565b565b6000806001600160a01b03166001836040516102e79190610709565b908152604051908190036020019020546001600160a01b0316141592915050565b6001600160a01b0381166000908152600260205260408120805461032b90610725565b15159392505050565b6001600160a01b038116600090815260026020526040902080546060919061035b90610725565b80601f016020809104026020016040519081016040528092919081815260200182805461038790610725565b80156103d45780601f106103a9576101008083540402835291602001916103d4565b820191906000526020600020905b8154815290600101906020018083116103b757829003601f168201915b50505050509050919050565b6103e861049d565b6001600160a01b03811661041257604051631e4fbdf760e01b8152600060048201526024016102a0565b61041b816104ca565b50565b61042661049d565b600080546001600160a01b0319166001600160a01b03831617905550565b806001836040516104559190610709565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b03948516179055918316600090815260029091522061049883826107af565b505050565b6003546001600160a01b031633146102c95760405163118cdaa760e01b81523360048201526024016102a0565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561052e57600080fd5b81356001600160e01b03198116811461054657600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261057457600080fd5b813567ffffffffffffffff8082111561058f5761058f61054d565b604051601f8301601f19908116603f011681019082821181831017156105b7576105b761054d565b816040528381528660208588010111156105d057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561060257600080fd5b813567ffffffffffffffff81111561061957600080fd5b61062584828501610563565b949350505050565b80356001600160a01b038116811461064457600080fd5b919050565b6000806040838503121561065c57600080fd5b823567ffffffffffffffff81111561067357600080fd5b61067f85828601610563565b92505061068e6020840161062d565b90509250929050565b6000602082840312156106a957600080fd5b6105468261062d565b60005b838110156106cd5781810151838201526020016106b5565b50506000910152565b60208152600082518060208401526106f58160408501602087016106b2565b601f01601f19169190910160400192915050565b6000825161071b8184602087016106b2565b9190910192915050565b600181811c9082168061073957607f821691505b60208210810361075957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610498576000816000526020600020601f850160051c810160208610156107885750805b601f850160051c820191505b818110156107a757828155600101610794565b505050505050565b815167ffffffffffffffff8111156107c9576107c961054d565b6107dd816107d78454610725565b8461075f565b602080601f83116001811461081257600084156107fa5750858301515b600019600386901b1c1916600185901b1785556107a7565b600085815260208120601f198616915b8281101561084157888601518255948401946001909101908401610822565b508582101561085f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220d34e5f07df9f5caeb3f27cc4ae3fb96f631888efc651830b9b596e5eac76484764736f6c63430008170033" + "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610058565b50600080546001600160a01b031916331790556100aa565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610bbd806100b96000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063862119ae11610071578063862119ae146101315780638da5cb5b14610144578063a6de610514610155578063b3d5dbdc14610168578063f2fde38b14610188578063faab9d391461019b57600080fd5b806301ffc9a7146100ae57806304433bbc146100d65780632b20e39714610101578063522791d114610114578063715018a614610129575b600080fd5b6100c16100bc366004610833565b6101ae565b60405190151581526020015b60405180910390f35b6100e96100e4366004610907565b6101e5565b6040516001600160a01b0390911681526020016100cd565b6000546100e9906001600160a01b031681565b610127610122366004610960565b610216565b005b6101276102b7565b6100c161013f366004610907565b6102cb565b6003546001600160a01b03166100e9565b6100c16101633660046109ae565b610308565b61017b6101763660046109ae565b610334565b6040516100cd91906109ed565b6101276101963660046109ae565b6103e0565b6101276101a93660046109ae565b61041e565b60006001600160e01b0319821663976998cb60e01b14806101df57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006001826040516101f79190610a20565b908152604051908190036020019020546001600160a01b031692915050565b6000546001600160a01b031633146102a95760405162461bcd60e51b815260206004820152604560248201527f466c6f774272696467654465706c6f796d656e7452656769737472793a204f6e60448201527f6c79207265676973747261722063616e207265676973746572206173736f636960648201526430ba34b7b760d91b608482015260a4015b60405180910390fd5b6102b3828261042f565b5050565b6102bf6106fd565b6102c9600061072a565b565b6000806001600160a01b03166001836040516102e79190610a20565b908152604051908190036020019020546001600160a01b0316141592915050565b6001600160a01b0381166000908152600260205260408120805461032b90610a3c565b15159392505050565b6001600160a01b038116600090815260026020526040902080546060919061035b90610a3c565b80601f016020809104026020016040519081016040528092919081815260200182805461038790610a3c565b80156103d45780601f106103a9576101008083540402835291602001916103d4565b820191906000526020600020905b8154815290600101906020018083116103b757829003601f168201915b50505050509050919050565b6103e86106fd565b6001600160a01b03811661041257604051631e4fbdf760e01b8152600060048201526024016102a0565b61041b8161072a565b50565b6104266106fd565b61041b8161077c565b6001600160a01b0381166104ab5760405162461bcd60e51b815260206004820152603760248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436f6e747260448201527f61637420616464726573732063616e6e6f74206265203000000000000000000060648201526084016102a0565b81516000036105225760405162461bcd60e51b815260206004820152603d60248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436164656e60448201527f6365206964656e7469666965722063616e6e6f7420626520656d70747900000060648201526084016102a0565b60006001600160a01b031660018360405161053d9190610a20565b908152604051908190036020019020546001600160a01b0316146105cb576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436164656e60448201527f6365206964656e74696669657220616c7265616479207265676973746572656460648201526084016102a0565b6001600160a01b038116600090815260026020526040902080546105ee90610a3c565b1590506106635760405162461bcd60e51b815260206004820152603e60248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436f6e747260448201527f616374206164647265737320616c72656164792072656769737465726564000060648201526084016102a0565b806001836040516106749190610a20565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b0394851617905591831660009081526002909152206106b78382610ac7565b50806001600160a01b03167f25d7ffc1de7be1c9b0762be63022756c4773f73211c044d668da6bbcba3e7f14836040516106f191906109ed565b60405180910390a25050565b6003546001600160a01b031633146102c95760405163118cdaa760e01b81523360048201526024016102a0565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166107eb5760405162461bcd60e51b815260206004820152603060248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20526567697360448201526f0747261722063616e6e6f7420626520360841b60648201526084016102a0565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff90b3304151c89847ba28c08c86e9391dd12ef3a402cba7d3728776a36f29d1191a250565b60006020828403121561084557600080fd5b81356001600160e01b03198116811461085d57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261088b57600080fd5b813567ffffffffffffffff808211156108a6576108a6610864565b604051601f8301601f19908116603f011681019082821181831017156108ce576108ce610864565b816040528381528660208588010111156108e757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561091957600080fd5b813567ffffffffffffffff81111561093057600080fd5b61093c8482850161087a565b949350505050565b80356001600160a01b038116811461095b57600080fd5b919050565b6000806040838503121561097357600080fd5b823567ffffffffffffffff81111561098a57600080fd5b6109968582860161087a565b9250506109a560208401610944565b90509250929050565b6000602082840312156109c057600080fd5b61085d82610944565b60005b838110156109e45781810151838201526020016109cc565b50506000910152565b6020815260008251806020840152610a0c8160408501602087016109c9565b601f01601f19169190910160400192915050565b60008251610a328184602087016109c9565b9190910192915050565b600181811c90821680610a5057607f821691505b602082108103610a7057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ac2576000816000526020600020601f850160051c81016020861015610a9f5750805b601f850160051c820191505b81811015610abe57828155600101610aab565b5050505b505050565b815167ffffffffffffffff811115610ae157610ae1610864565b610af581610aef8454610a3c565b84610a76565b602080601f831160018114610b2a5760008415610b125750858301515b600019600386901b1c1916600185901b178555610abe565b600085815260208120601f198616915b82811015610b5957888601518255948401946001909101908401610b3a565b5085821015610b775787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212207bc4fe07fbc245f342675c43729c0cf0da0a7b16d24fef9f2aac1a401e334c8964736f6c63430008180033" }, { "type": "UInt64", diff --git a/cadence/args/deploy-erc20-args.json b/cadence/args/deploy-erc20-args.json index 7403b2c7..ed2a281f 100644 --- a/cadence/args/deploy-erc20-args.json +++ b/cadence/args/deploy-erc20-args.json @@ -1,7 +1,7 @@ [ { "type": "String", - "value": "6101606040523480156200001257600080fd5b50604051806040016040528060048152602001634e414d4560e01b81525080604051806040016040528060018152602001603160f81b81525033604051806040016040528060048152602001634e414d4560e01b8152506040518060400160405280600681526020016514d6535093d360d21b815250816003908162000099919062000318565b506004620000a8828262000318565b5050506001600160a01b038116620000db57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000e681620001a3565b50620000f4826006620001f5565b6101205262000105816007620001f5565b61014052815160208084019190912060e052815190820120610100524660a0526200019360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200045a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208351101562000215576200020d836200022e565b905062000228565b8162000222848262000318565b5060ff90505b92915050565b600080829050601f815111156200025c578260405163305a27a960e01b8152600401620000d29190620003e4565b8051620002698262000435565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029c57607f821691505b602082108103620002bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000313576000816000526020600020601f850160051c81016020861015620002ee5750805b601f850160051c820191505b818110156200030f57828155600101620002fa565b5050505b505050565b81516001600160401b0381111562000334576200033462000271565b6200034c8162000345845462000287565b84620002c3565b602080601f8311600181146200038457600084156200036b5750858301515b600019600386901b1c1916600185901b1785556200030f565b600085815260208120601f198616915b82811015620003b55788860151825594840194600190910190840162000394565b5085821015620003d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200041457858101830151858201604001528201620003f6565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002bd5760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051611147620004b5600039600061093101526000610904015260006107c101526000610799015260006106f40152600061071e0152600061074801526111476000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad57806395d89b411161007157806395d89b4114610258578063a9059cbb14610260578063d505accf14610273578063dd62ed3e14610286578063f2fde38b146102bf57600080fd5b8063715018a6146101f457806379cc6790146101fc5780637ecebe001461020f57806384b0196e146102225780638da5cb5b1461023d57600080fd5b8063313ce567116100f4578063313ce5671461018c5780633644e5151461019b57806340c10f19146101a357806342966c68146101b857806370a08231146101cb57600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd1461016757806323b872dd14610179575b600080fd5b61012e6102d2565b60405161013b9190610e91565b60405180910390f35b610157610152366004610ec7565b610364565b604051901515815260200161013b565b6002545b60405190815260200161013b565b610157610187366004610ef1565b61037e565b6040516012815260200161013b565b61016b6103a2565b6101b66101b1366004610ec7565b6103b1565b005b6101b66101c6366004610f2d565b6103c7565b61016b6101d9366004610f46565b6001600160a01b031660009081526020819052604090205490565b6101b66103d4565b6101b661020a366004610ec7565b6103e8565b61016b61021d366004610f46565b6103fd565b61022a61041b565b60405161013b9796959493929190610f61565b6005546040516001600160a01b03909116815260200161013b565b61012e610461565b61015761026e366004610ec7565b610470565b6101b6610281366004610ffa565b61047e565b61016b61029436600461106d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101b66102cd366004610f46565b6105bd565b6060600380546102e1906110a0565b80601f016020809104026020016040519081016040528092919081815260200182805461030d906110a0565b801561035a5780601f1061032f5761010080835404028352916020019161035a565b820191906000526020600020905b81548152906001019060200180831161033d57829003601f168201915b5050505050905090565b6000336103728185856105f8565b60019150505b92915050565b60003361038c85828561060a565b610397858585610688565b506001949350505050565b60006103ac6106e7565b905090565b6103b9610812565b6103c3828261083f565b5050565b6103d13382610875565b50565b6103dc610812565b6103e660006108ab565b565b6103f382338361060a565b6103c38282610875565b6001600160a01b038116600090815260086020526040812054610378565b60006060806000806000606061042f6108fd565b61043761092a565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102e1906110a0565b600033610372818585610688565b834211156104a75760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104f48c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061054f82610957565b9050600061055f82878787610984565b9050896001600160a01b0316816001600160a01b0316146105a6576040516325c0072360e11b81526001600160a01b0380831660048301528b16602482015260440161049e565b6105b18a8a8a6105f8565b50505050505050505050565b6105c5610812565b6001600160a01b0381166105ef57604051631e4fbdf760e01b81526000600482015260240161049e565b6103d1816108ab565b61060583838360016109b2565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610682578181101561067357604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161049e565b610682848484840360006109b2565b50505050565b6001600160a01b0383166106b257604051634b637e8f60e11b81526000600482015260240161049e565b6001600160a01b0382166106dc5760405163ec442f0560e01b81526000600482015260240161049e565b610605838383610a87565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561074057507f000000000000000000000000000000000000000000000000000000000000000046145b1561076a57507f000000000000000000000000000000000000000000000000000000000000000090565b6103ac604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6005546001600160a01b031633146103e65760405163118cdaa760e01b815233600482015260240161049e565b6001600160a01b0382166108695760405163ec442f0560e01b81526000600482015260240161049e565b6103c360008383610a87565b6001600160a01b03821661089f57604051634b637e8f60e11b81526000600482015260240161049e565b6103c382600083610a87565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606103ac7f00000000000000000000000000000000000000000000000000000000000000006006610bb1565b60606103ac7f00000000000000000000000000000000000000000000000000000000000000006007610bb1565b60006103786109646106e7565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061099688888888610c5c565b9250925092506109a68282610d2b565b50909695505050505050565b6001600160a01b0384166109dc5760405163e602df0560e01b81526000600482015260240161049e565b6001600160a01b038316610a0657604051634a1406b160e11b81526000600482015260240161049e565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561068257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a7991815260200190565b60405180910390a350505050565b6001600160a01b038316610ab2578060026000828254610aa791906110da565b90915550610b249050565b6001600160a01b03831660009081526020819052604090205481811015610b055760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161049e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610b4057600280548290039055610b5f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ba491815260200190565b60405180910390a3505050565b606060ff8314610bcb57610bc483610de4565b9050610378565b818054610bd7906110a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c03906110a0565b8015610c505780601f10610c2557610100808354040283529160200191610c50565b820191906000526020600020905b815481529060010190602001808311610c3357829003601f168201915b50505050509050610378565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c975750600091506003905082610d21565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610ceb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d1757506000925060019150829050610d21565b9250600091508190505b9450945094915050565b6000826003811115610d3f57610d3f6110fb565b03610d48575050565b6001826003811115610d5c57610d5c6110fb565b03610d7a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d8e57610d8e6110fb565b03610daf5760405163fce698f760e01b81526004810182905260240161049e565b6003826003811115610dc357610dc36110fb565b036103c3576040516335e2f38360e21b81526004810182905260240161049e565b60606000610df183610e23565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561037857604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610e7157602081850181015186830182015201610e55565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ea46020830184610e4b565b9392505050565b80356001600160a01b0381168114610ec257600080fd5b919050565b60008060408385031215610eda57600080fd5b610ee383610eab565b946020939093013593505050565b600080600060608486031215610f0657600080fd5b610f0f84610eab565b9250610f1d60208501610eab565b9150604084013590509250925092565b600060208284031215610f3f57600080fd5b5035919050565b600060208284031215610f5857600080fd5b610ea482610eab565b60ff60f81b881681526000602060e06020840152610f8260e084018a610e4b565b8381036040850152610f94818a610e4b565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015610fe857835183529284019291840191600101610fcc565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561101557600080fd5b61101e88610eab565b965061102c60208901610eab565b95506040880135945060608801359350608088013560ff8116811461105057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561108057600080fd5b61108983610eab565b915061109760208401610eab565b90509250929050565b600181811c908216806110b457607f821691505b6020821081036110d457634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561037857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea26469706673582212205a9fb621e78e0659a660558e37d0bb811d6afb428d65ab714be4039ef30cebd364736f6c63430008170033" + "value": "6101606040523480156200001257600080fd5b50604051806040016040528060048152602001634e414d4560e01b81525080604051806040016040528060018152602001603160f81b81525033604051806040016040528060048152602001634e414d4560e01b8152506040518060400160405280600681526020016514d6535093d360d21b815250816003908162000099919062000318565b506004620000a8828262000318565b5050506001600160a01b038116620000db57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000e681620001a3565b50620000f4826006620001f5565b6101205262000105816007620001f5565b61014052815160208084019190912060e052815190820120610100524660a0526200019360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200045a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208351101562000215576200020d836200022e565b905062000228565b8162000222848262000318565b5060ff90505b92915050565b600080829050601f815111156200025c578260405163305a27a960e01b8152600401620000d29190620003e4565b8051620002698262000435565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029c57607f821691505b602082108103620002bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000313576000816000526020600020601f850160051c81016020861015620002ee5750805b601f850160051c820191505b818110156200030f57828155600101620002fa565b5050505b505050565b81516001600160401b0381111562000334576200033462000271565b6200034c8162000345845462000287565b84620002c3565b602080601f8311600181146200038457600084156200036b5750858301515b600019600386901b1c1916600185901b1785556200030f565b600085815260208120601f198616915b82811015620003b55788860151825594840194600190910190840162000394565b5085821015620003d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200041457858101830151858201604001528201620003f6565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002bd5760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051611147620004b5600039600061093101526000610904015260006107c101526000610799015260006106f40152600061071e0152600061074801526111476000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063715018a6116100ad57806395d89b411161007157806395d89b4114610258578063a9059cbb14610260578063d505accf14610273578063dd62ed3e14610286578063f2fde38b146102bf57600080fd5b8063715018a6146101f457806379cc6790146101fc5780637ecebe001461020f57806384b0196e146102225780638da5cb5b1461023d57600080fd5b8063313ce567116100f4578063313ce5671461018c5780633644e5151461019b57806340c10f19146101a357806342966c68146101b857806370a08231146101cb57600080fd5b806306fdde0314610126578063095ea7b31461014457806318160ddd1461016757806323b872dd14610179575b600080fd5b61012e6102d2565b60405161013b9190610e91565b60405180910390f35b610157610152366004610ec7565b610364565b604051901515815260200161013b565b6002545b60405190815260200161013b565b610157610187366004610ef1565b61037e565b6040516012815260200161013b565b61016b6103a2565b6101b66101b1366004610ec7565b6103b1565b005b6101b66101c6366004610f2d565b6103c7565b61016b6101d9366004610f46565b6001600160a01b031660009081526020819052604090205490565b6101b66103d4565b6101b661020a366004610ec7565b6103e8565b61016b61021d366004610f46565b6103fd565b61022a61041b565b60405161013b9796959493929190610f61565b6005546040516001600160a01b03909116815260200161013b565b61012e610461565b61015761026e366004610ec7565b610470565b6101b6610281366004610ffa565b61047e565b61016b61029436600461106d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101b66102cd366004610f46565b6105bd565b6060600380546102e1906110a0565b80601f016020809104026020016040519081016040528092919081815260200182805461030d906110a0565b801561035a5780601f1061032f5761010080835404028352916020019161035a565b820191906000526020600020905b81548152906001019060200180831161033d57829003601f168201915b5050505050905090565b6000336103728185856105f8565b60019150505b92915050565b60003361038c85828561060a565b610397858585610688565b506001949350505050565b60006103ac6106e7565b905090565b6103b9610812565b6103c3828261083f565b5050565b6103d13382610875565b50565b6103dc610812565b6103e660006108ab565b565b6103f382338361060a565b6103c38282610875565b6001600160a01b038116600090815260086020526040812054610378565b60006060806000806000606061042f6108fd565b61043761092a565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546102e1906110a0565b600033610372818585610688565b834211156104a75760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104f48c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061054f82610957565b9050600061055f82878787610984565b9050896001600160a01b0316816001600160a01b0316146105a6576040516325c0072360e11b81526001600160a01b0380831660048301528b16602482015260440161049e565b6105b18a8a8a6105f8565b50505050505050505050565b6105c5610812565b6001600160a01b0381166105ef57604051631e4fbdf760e01b81526000600482015260240161049e565b6103d1816108ab565b61060583838360016109b2565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610682578181101561067357604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161049e565b610682848484840360006109b2565b50505050565b6001600160a01b0383166106b257604051634b637e8f60e11b81526000600482015260240161049e565b6001600160a01b0382166106dc5760405163ec442f0560e01b81526000600482015260240161049e565b610605838383610a87565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561074057507f000000000000000000000000000000000000000000000000000000000000000046145b1561076a57507f000000000000000000000000000000000000000000000000000000000000000090565b6103ac604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6005546001600160a01b031633146103e65760405163118cdaa760e01b815233600482015260240161049e565b6001600160a01b0382166108695760405163ec442f0560e01b81526000600482015260240161049e565b6103c360008383610a87565b6001600160a01b03821661089f57604051634b637e8f60e11b81526000600482015260240161049e565b6103c382600083610a87565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606103ac7f00000000000000000000000000000000000000000000000000000000000000006006610bb1565b60606103ac7f00000000000000000000000000000000000000000000000000000000000000006007610bb1565b60006103786109646106e7565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061099688888888610c5c565b9250925092506109a68282610d2b565b50909695505050505050565b6001600160a01b0384166109dc5760405163e602df0560e01b81526000600482015260240161049e565b6001600160a01b038316610a0657604051634a1406b160e11b81526000600482015260240161049e565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561068257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a7991815260200190565b60405180910390a350505050565b6001600160a01b038316610ab2578060026000828254610aa791906110da565b90915550610b249050565b6001600160a01b03831660009081526020819052604090205481811015610b055760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161049e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610b4057600280548290039055610b5f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ba491815260200190565b60405180910390a3505050565b606060ff8314610bcb57610bc483610de4565b9050610378565b818054610bd7906110a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c03906110a0565b8015610c505780601f10610c2557610100808354040283529160200191610c50565b820191906000526020600020905b815481529060010190602001808311610c3357829003601f168201915b50505050509050610378565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c975750600091506003905082610d21565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610ceb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610d1757506000925060019150829050610d21565b9250600091508190505b9450945094915050565b6000826003811115610d3f57610d3f6110fb565b03610d48575050565b6001826003811115610d5c57610d5c6110fb565b03610d7a5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d8e57610d8e6110fb565b03610daf5760405163fce698f760e01b81526004810182905260240161049e565b6003826003811115610dc357610dc36110fb565b036103c3576040516335e2f38360e21b81526004810182905260240161049e565b60606000610df183610e23565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561037857604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610e7157602081850181015186830182015201610e55565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ea46020830184610e4b565b9392505050565b80356001600160a01b0381168114610ec257600080fd5b919050565b60008060408385031215610eda57600080fd5b610ee383610eab565b946020939093013593505050565b600080600060608486031215610f0657600080fd5b610f0f84610eab565b9250610f1d60208501610eab565b9150604084013590509250925092565b600060208284031215610f3f57600080fd5b5035919050565b600060208284031215610f5857600080fd5b610ea482610eab565b60ff60f81b881681526000602060e06020840152610f8260e084018a610e4b565b8381036040850152610f94818a610e4b565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015610fe857835183529284019291840191600101610fcc565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561101557600080fd5b61101e88610eab565b965061102c60208901610eab565b95506040880135945060608801359350608088013560ff8116811461105057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561108057600080fd5b61108983610eab565b915061109760208401610eab565b90509250929050565b600181811c908216806110b457607f821691505b6020821081036110d457634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561037857634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea26469706673582212201f54517fb8d72e39b2e13c2559c1b46b5bc0a250b7426545a2f6cddb45eb100864736f6c63430008180033" }, { "type": "UInt64", diff --git a/cadence/args/deploy-erc20-deployer-args.json b/cadence/args/deploy-erc20-deployer-args.json index 4274e6a4..cf22e1fb 100644 --- a/cadence/args/deploy-erc20-deployer-args.json +++ b/cadence/args/deploy-erc20-deployer-args.json @@ -1,7 +1,7 @@ [ { "type": "String", - "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612096806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d36600462000438565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c936600462000516565b62000180565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002a5565b005b6000546001600160a01b0316620000cf565b620001066200012b366004620005f8565b620002bd565b6200010662000142366004620005f8565b62000367565b60006001600160e01b0319821663476d399760e01b14806200017a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03163314620002095760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a204f6e6c60448201527f792064656c656761746564206465706c6f7965722063616e206465706c6f790060648201526084015b60405180910390fd5b600080546001600160a01b0316878787878760405162000229906200042a565b6200023a969594939291906200066b565b604051809103906000f08015801562000257573d6000803e3d6000fd5b5090507f99a64021330f1af36b3fd5f64a1d12b99b8ddf91fa553618c4df01ffba4c1cee818888888860405162000293959493929190620006f4565b60405180910390a19695505050505050565b620002af620003ab565b620002bb6000620003da565b565b620002c7620003ab565b6001600160a01b038116620003455760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a20496e7660448201527f616c69642064656c656761746564206465706c6f796572206164647265737300606482015260840162000200565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b62000371620003ab565b6001600160a01b0381166200039d57604051631e4fbdf760e01b81526000600482015260240162000200565b620003a881620003da565b50565b6000546001600160a01b03163314620002bb5760405163118cdaa760e01b815233600482015260240162000200565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118fa806200076783390190565b6000602082840312156200044b57600080fd5b81356001600160e01b0319811681146200046457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200049357600080fd5b813567ffffffffffffffff80821115620004b157620004b16200046b565b604051601f8301601f19908116603f01168101908282118183101715620004dc57620004dc6200046b565b81604052838152866020858801011115620004f657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200052f57600080fd5b853567ffffffffffffffff808211156200054857600080fd5b6200055689838a0162000481565b965060208801359150808211156200056d57600080fd5b6200057b89838a0162000481565b955060408801359150808211156200059257600080fd5b620005a089838a0162000481565b94506060880135915080821115620005b757600080fd5b620005c589838a0162000481565b93506080880135915080821115620005dc57600080fd5b50620005eb8882890162000481565b9150509295509295909350565b6000602082840312156200060b57600080fd5b81356001600160a01b03811681146200046457600080fd5b6000815180845260005b818110156200064b576020818501810151868301820152016200062d565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006919083018862000623565b8281036040840152620006a5818862000623565b90508281036060840152620006bb818762000623565b90508281036080840152620006d1818662000623565b905082810360a0840152620006e7818562000623565b9998505050505050505050565b6001600160a01b038616815260a0602082018190526000906200071a9083018762000623565b82810360408401526200072e818762000623565b9050828103606084015262000744818662000623565b905082810360808401526200075a818562000623565b9897505050505050505056fe6101606040523480156200001257600080fd5b50604051620018fa380380620018fa833981016040819052620000359162000357565b6040805180820190915260018152603160f81b6020820152859081908882886003620000628382620004db565b506004620000718282620004db565b5050506001600160a01b038116620000a457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000af816200019f565b50620000bd826006620001f1565b61012052620000ce816007620001f1565b61014052815160208084019190912060e052815190820120610100524660a0526200015c60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506009620001748482620004db565b50600a620001838382620004db565b50600b620001928282620004db565b5050505050505062000601565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602083511015620002115762000209836200022a565b905062000224565b816200021e8482620004db565b5060ff90505b92915050565b600080829050601f8151111562000258578260405163305a27a960e01b81526004016200009b9190620005a7565b80516200026582620005dc565b179392505050565b80516001600160a01b03811681146200028557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002bd578181015183820152602001620002a3565b50506000910152565b600082601f830112620002d857600080fd5b81516001600160401b0380821115620002f557620002f56200028a565b604051601f8301601f19908116603f011681019082821181831017156200032057620003206200028a565b816040528381528660208588010111156200033a57600080fd5b6200034d846020830160208901620002a0565b9695505050505050565b60008060008060008060c087890312156200037157600080fd5b6200037c876200026d565b60208801519096506001600160401b03808211156200039a57600080fd5b620003a88a838b01620002c6565b96506040890151915080821115620003bf57600080fd5b620003cd8a838b01620002c6565b95506060890151915080821115620003e457600080fd5b620003f28a838b01620002c6565b945060808901519150808211156200040957600080fd5b620004178a838b01620002c6565b935060a08901519150808211156200042e57600080fd5b506200043d89828a01620002c6565b9150509295509295509295565b600181811c908216806200045f57607f821691505b6020821081036200048057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004d6576000816000526020600020601f850160051c81016020861015620004b15750805b601f850160051c820191505b81811015620004d257828155600101620004bd565b5050505b505050565b81516001600160401b03811115620004f757620004f76200028a565b6200050f816200050884546200044a565b8462000486565b602080601f8311600181146200054757600084156200052e5750858301515b600019600386901b1c1916600185901b178555620004d2565b600085815260208120601f198616915b82811015620005785788860151825594840194600190910190840162000557565b5085821015620005975787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620005c8816040850160208701620002a0565b601f01601f19169190910160400192915050565b80516020808301519190811015620004805760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161129e6200065c6000396000610a8801526000610a5b01526000610918015260006108f00152600061084b015260006108750152600061089f015261129e6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063a76b4d5611610097578063dc9716eb11610071578063dc9716eb146102f8578063dd62ed3e14610300578063e8a3d48514610339578063f2fde38b1461034157600080fd5b8063a76b4d56146102ca578063a9059cbb146102d2578063d505accf146102e557600080fd5b8063715018a61461025e57806379cc6790146102665780637ecebe001461027957806384b0196e1461028c5780638da5cb5b146102a757806395d89b41146102c257600080fd5b8063313ce56711610130578063313ce567146101ee5780633644e515146101fd5780633fd4d4a81461020557806340c10f191461020d57806342966c681461022257806370a082311461023557600080fd5b806306fdde0314610178578063095ea7b3146101965780630cd9acb7146101b9578063120a88ad146101c157806318160ddd146101c957806323b872dd146101db575b600080fd5b610180610354565b60405161018d9190610fe8565b60405180910390f35b6101a96101a436600461101e565b6103e6565b604051901515815260200161018d565b610180610400565b61018061048e565b6002545b60405190815260200161018d565b6101a96101e9366004611048565b61049d565b6040516012815260200161018d565b6101cd6104c1565b6101806104d0565b61022061021b36600461101e565b6104df565b005b610220610230366004611084565b6104f5565b6101cd61024336600461109d565b6001600160a01b031660009081526020819052604090205490565b610220610502565b61022061027436600461101e565b610516565b6101cd61028736600461109d565b61052b565b610294610549565b60405161018d97969594939291906110b8565b6005546040516001600160a01b03909116815260200161018d565b61018061058f565b61018061059e565b6101a96102e036600461101e565b6105ab565b6102206102f3366004611151565b6105b9565b6101806106f8565b6101cd61030e3660046111c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610180610705565b61022061034f36600461109d565b610714565b606060038054610363906111f7565b80601f016020809104026020016040519081016040528092919081815260200182805461038f906111f7565b80156103dc5780601f106103b1576101008083540402835291602001916103dc565b820191906000526020600020905b8154815290600101906020018083116103bf57829003601f168201915b5050505050905090565b6000336103f481858561074f565b60019150505b92915050565b6009805461040d906111f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610439906111f7565b80156104865780601f1061045b57610100808354040283529160200191610486565b820191906000526020600020905b81548152906001019060200180831161046957829003601f168201915b505050505081565b606060098054610363906111f7565b6000336104ab858285610761565b6104b68585856107df565b506001949350505050565b60006104cb61083e565b905090565b6060600a8054610363906111f7565b6104e7610969565b6104f18282610996565b5050565b6104ff33826109cc565b50565b61050a610969565b6105146000610a02565b565b610521823383610761565b6104f182826109cc565b6001600160a01b0381166000908152600860205260408120546103fa565b60006060806000806000606061055d610a54565b610565610a81565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b606060048054610363906111f7565b600b805461040d906111f7565b6000336103f48185856107df565b834211156105e25760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861062f8c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061068a82610aae565b9050600061069a82878787610adb565b9050896001600160a01b0316816001600160a01b0316146106e1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105d9565b6106ec8a8a8a61074f565b50505050505050505050565b600a805461040d906111f7565b6060600b8054610363906111f7565b61071c610969565b6001600160a01b03811661074657604051631e4fbdf760e01b8152600060048201526024016105d9565b6104ff81610a02565b61075c8383836001610b09565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146107d957818110156107ca57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105d9565b6107d984848484036000610b09565b50505050565b6001600160a01b03831661080957604051634b637e8f60e11b8152600060048201526024016105d9565b6001600160a01b0382166108335760405163ec442f0560e01b8152600060048201526024016105d9565b61075c838383610bde565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561089757507f000000000000000000000000000000000000000000000000000000000000000046145b156108c157507f000000000000000000000000000000000000000000000000000000000000000090565b6104cb604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6005546001600160a01b031633146105145760405163118cdaa760e01b81523360048201526024016105d9565b6001600160a01b0382166109c05760405163ec442f0560e01b8152600060048201526024016105d9565b6104f160008383610bde565b6001600160a01b0382166109f657604051634b637e8f60e11b8152600060048201526024016105d9565b6104f182600083610bde565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606104cb7f00000000000000000000000000000000000000000000000000000000000000006006610d08565b60606104cb7f00000000000000000000000000000000000000000000000000000000000000006007610d08565b60006103fa610abb61083e565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610aed88888888610db3565b925092509250610afd8282610e82565b50909695505050505050565b6001600160a01b038416610b335760405163e602df0560e01b8152600060048201526024016105d9565b6001600160a01b038316610b5d57604051634a1406b160e11b8152600060048201526024016105d9565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156107d957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bd091815260200190565b60405180910390a350505050565b6001600160a01b038316610c09578060026000828254610bfe9190611231565b90915550610c7b9050565b6001600160a01b03831660009081526020819052604090205481811015610c5c5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105d9565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610c9757600280548290039055610cb6565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cfb91815260200190565b60405180910390a3505050565b606060ff8314610d2257610d1b83610f3b565b90506103fa565b818054610d2e906111f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a906111f7565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505090506103fa565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610dee5750600091506003905082610e78565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e42573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e6e57506000925060019150829050610e78565b9250600091508190505b9450945094915050565b6000826003811115610e9657610e96611252565b03610e9f575050565b6001826003811115610eb357610eb3611252565b03610ed15760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ee557610ee5611252565b03610f065760405163fce698f760e01b8152600481018290526024016105d9565b6003826003811115610f1a57610f1a611252565b036104f1576040516335e2f38360e21b8152600481018290526024016105d9565b60606000610f4883610f7a565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f8111156103fa57604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610fc857602081850181015186830182015201610fac565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ffb6020830184610fa2565b9392505050565b80356001600160a01b038116811461101957600080fd5b919050565b6000806040838503121561103157600080fd5b61103a83611002565b946020939093013593505050565b60008060006060848603121561105d57600080fd5b61106684611002565b925061107460208501611002565b9150604084013590509250925092565b60006020828403121561109657600080fd5b5035919050565b6000602082840312156110af57600080fd5b610ffb82611002565b60ff60f81b881681526000602060e060208401526110d960e084018a610fa2565b83810360408501526110eb818a610fa2565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561113f57835183529284019291840191600101611123565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561116c57600080fd5b61117588611002565b965061118360208901611002565b95506040880135945060608801359350608088013560ff811681146111a757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156111d757600080fd5b6111e083611002565b91506111ee60208401611002565b90509250929050565b600181811c9082168061120b57607f821691505b60208210810361122b57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103fa57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea26469706673582212206fb41458119173f9f1d07720d0b22fbfacf4726505008b5c43816c9902cd0fc464736f6c63430008170033a26469706673582212201df4bdff78560cbe320524756593933725001e7f7f8e2f575636163e3d9cc87d64736f6c63430008170033" + "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6121ca806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d36600462000484565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c936600462000562565b6200019c565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002c9565b005b6000546001600160a01b0316620000cf565b620001066200012b36600462000644565b620002e1565b620001066200014236600462000644565b620003b3565b60006001600160e01b0319821663476d399760e01b14806200017a57506001600160e01b03198216630704183b60e11b145b806200019657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03163314620002255760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a204f6e6c60448201527f792064656c656761746564206465706c6f7965722063616e206465706c6f790060648201526084015b60405180910390fd5b600080546001600160a01b03168787878787604051620002459062000476565b6200025696959493929190620006b7565b604051809103906000f08015801562000273573d6000803e3d6000fd5b509050806001600160a01b03167fac166d2e64b2aaf94e9dfc7205dc17bc2a537b28fab78dfb70d79325657a8d3f88888888604051620002b7949392919062000740565b60405180910390a29695505050505050565b620002d3620003f7565b620002df600062000426565b565b620002eb620003f7565b6001600160a01b038116620003695760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a20496e7660448201527f616c69642064656c656761746564206465706c6f79657220616464726573730060648201526084016200021c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc553df5d2803898b31fac480ec2b45d67b73294d4c94a93f069f47400f76bdbb90600090a250565b620003bd620003f7565b6001600160a01b038116620003e957604051631e4fbdf760e01b8152600060048201526024016200021c565b620003f48162000426565b50565b6000546001600160a01b03163314620002df5760405163118cdaa760e01b81523360048201526024016200021c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6119f480620007a183390190565b6000602082840312156200049757600080fd5b81356001600160e01b031981168114620004b057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620004df57600080fd5b813567ffffffffffffffff80821115620004fd57620004fd620004b7565b604051601f8301601f19908116603f01168101908282118183101715620005285762000528620004b7565b816040528381528660208588010111156200054257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200057b57600080fd5b853567ffffffffffffffff808211156200059457600080fd5b620005a289838a01620004cd565b96506020880135915080821115620005b957600080fd5b620005c789838a01620004cd565b95506040880135915080821115620005de57600080fd5b620005ec89838a01620004cd565b945060608801359150808211156200060357600080fd5b6200061189838a01620004cd565b935060808801359150808211156200062857600080fd5b506200063788828901620004cd565b9150509295509295909350565b6000602082840312156200065757600080fd5b81356001600160a01b0381168114620004b057600080fd5b6000815180845260005b81811015620006975760208185018101518683018201520162000679565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006dd908301886200066f565b8281036040840152620006f181886200066f565b905082810360608401526200070781876200066f565b905082810360808401526200071d81866200066f565b905082810360a08401526200073381856200066f565b9998505050505050505050565b6080815260006200075560808301876200066f565b82810360208401526200076981876200066f565b905082810360408401526200077f81866200066f565b905082810360608401526200079581856200066f565b97965050505050505056fe6101606040523480156200001257600080fd5b50604051620019f4380380620019f483398101604081905262000035916200035c565b858580604051806040016040528060018152602001603160f81b81525088888160039081620000659190620004e0565b506004620000748282620004e0565b506200008691508390506005620001a4565b6101205262000097816006620001a4565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001dd565b506009620001798482620004e0565b50600a620001888382620004e0565b50600b620001978282620004e0565b5050505050505062000606565b6000602083511015620001c457620001bc836200022f565b9050620001d7565b81620001d18482620004e0565b5060ff90505b92915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200025d578260405163305a27a960e01b8152600401620001569190620005ac565b80516200026a82620005e1565b179392505050565b80516001600160a01b03811681146200028a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002c2578181015183820152602001620002a8565b50506000910152565b600082601f830112620002dd57600080fd5b81516001600160401b0380821115620002fa57620002fa6200028f565b604051601f8301601f19908116603f011681019082821181831017156200032557620003256200028f565b816040528381528660208588010111156200033f57600080fd5b62000352846020830160208901620002a5565b9695505050505050565b60008060008060008060c087890312156200037657600080fd5b620003818762000272565b60208801519096506001600160401b03808211156200039f57600080fd5b620003ad8a838b01620002cb565b96506040890151915080821115620003c457600080fd5b620003d28a838b01620002cb565b95506060890151915080821115620003e957600080fd5b620003f78a838b01620002cb565b945060808901519150808211156200040e57600080fd5b6200041c8a838b01620002cb565b935060a08901519150808211156200043357600080fd5b506200044289828a01620002cb565b9150509295509295509295565b600181811c908216806200046457607f821691505b6020821081036200048557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004db576000816000526020600020601f850160051c81016020861015620004b65750805b601f850160051c820191505b81811015620004d757828155600101620004c2565b5050505b505050565b81516001600160401b03811115620004fc57620004fc6200028f565b62000514816200050d84546200044f565b846200048b565b602080601f8311600181146200054c5760008415620005335750858301515b600019600386901b1c1916600185901b178555620004d7565b600085815260208120601f198616915b828110156200057d578886015182559484019460019091019084016200055c565b50858210156200059c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620005cd816040850160208701620002a5565b601f01601f19169190910160400192915050565b80516020808301519190811015620004855760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051611393620006616000396000610b5301526000610b26015260006109e3015260006109bb01526000610916015260006109400152600061096a01526113936000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806378c13082116100de57806397d9a15911610097578063d505accf11610071578063d505accf14610317578063dd62ed3e1461032a578063e8a3d48514610363578063f2fde38b1461036b57600080fd5b806397d9a159146102f4578063a76b4d56146102fc578063a9059cbb1461030457600080fd5b806378c130821461028857806379cc6790146102905780637ecebe00146102a357806384b0196e146102b65780638da5cb5b146102d157806395d89b41146102ec57600080fd5b8063313ce5671161014b57806340c10f191161012557806340c10f191461022f57806342966c681461024457806370a0823114610257578063715018a61461028057600080fd5b8063313ce567146102105780633644e5151461021f57806338e5d7b31461022757600080fd5b806301ffc9a71461019357806306fdde03146101bb578063095ea7b3146101d057806318160ddd146101e35780631a622896146101f557806323b872dd146101fd575b600080fd5b6101a66101a136600461106d565b61037e565b60405190151581526020015b60405180910390f35b6101c3610421565b6040516101b291906110e4565b6101a66101de366004611113565b6104b3565b6002545b6040519081526020016101b2565b6101c36104cb565b6101a661020b36600461113d565b6104da565b604051601281526020016101b2565b6101e76104fe565b6101c361050d565b61024261023d366004611113565b61059b565b005b610242610252366004611179565b6105b1565b6101e7610265366004611192565b6001600160a01b031660009081526020819052604090205490565b6102426105be565b6101c36105d2565b61024261029e366004611113565b6105df565b6101e76102b1366004611192565b6105f4565b6102be610612565b6040516101b297969594939291906111ad565b6008546040516001600160a01b0390911681526020016101b2565b6101c3610658565b6101c3610667565b6101c3610676565b6101a6610312366004611113565b610683565b610242610325366004611246565b610691565b6101e76103383660046112b9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c36107d0565b610242610379366004611192565b6107df565b60006001600160e01b031982166336372b0760e01b14806103af57506001600160e01b0319821663076b417f60e31b145b806103ca57506001600160e01b03198216630704183b60e11b145b806103e557506001600160e01b03198216634ec7fbed60e11b145b8061040057506001600160e01b03198216638dbb89cf60e01b145b8061041b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610430906112ec565b80601f016020809104026020016040519081016040528092919081815260200182805461045c906112ec565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000336104c181858561081a565b5060019392505050565b606060098054610430906112ec565b6000336104e885828561082c565b6104f38585856108aa565b506001949350505050565b6000610508610909565b905090565b6009805461051a906112ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906112ec565b80156105935780601f1061056857610100808354040283529160200191610593565b820191906000526020600020905b81548152906001019060200180831161057657829003601f168201915b505050505081565b6105a3610a34565b6105ad8282610a61565b5050565b6105bb3382610a97565b50565b6105c6610a34565b6105d06000610acd565b565b600a805461051a906112ec565b6105ea82338361082c565b6105ad8282610a97565b6001600160a01b03811660009081526007602052604081205461041b565b600060608060008060006060610626610b1f565b61062e610b4c565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b606060048054610430906112ec565b6060600a8054610430906112ec565b600b805461051a906112ec565b6000336104c18185856108aa565b834211156106ba5760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107078c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061076282610b79565b9050600061077282878787610ba6565b9050896001600160a01b0316816001600160a01b0316146107b9576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016106b1565b6107c48a8a8a61081a565b50505050505050505050565b6060600b8054610430906112ec565b6107e7610a34565b6001600160a01b03811661081157604051631e4fbdf760e01b8152600060048201526024016106b1565b6105bb81610acd565b6108278383836001610bd4565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146108a4578181101561089557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106b1565b6108a484848484036000610bd4565b50505050565b6001600160a01b0383166108d457604051634b637e8f60e11b8152600060048201526024016106b1565b6001600160a01b0382166108fe5760405163ec442f0560e01b8152600060048201526024016106b1565b610827838383610ca9565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561096257507f000000000000000000000000000000000000000000000000000000000000000046145b1561098c57507f000000000000000000000000000000000000000000000000000000000000000090565b610508604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6008546001600160a01b031633146105d05760405163118cdaa760e01b81523360048201526024016106b1565b6001600160a01b038216610a8b5760405163ec442f0560e01b8152600060048201526024016106b1565b6105ad60008383610ca9565b6001600160a01b038216610ac157604051634b637e8f60e11b8152600060048201526024016106b1565b6105ad82600083610ca9565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606105087f00000000000000000000000000000000000000000000000000000000000000006005610dd3565b60606105087f00000000000000000000000000000000000000000000000000000000000000006006610dd3565b600061041b610b86610909565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610bb888888888610e7e565b925092509250610bc88282610f4d565b50909695505050505050565b6001600160a01b038416610bfe5760405163e602df0560e01b8152600060048201526024016106b1565b6001600160a01b038316610c2857604051634a1406b160e11b8152600060048201526024016106b1565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156108a457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c9b91815260200190565b60405180910390a350505050565b6001600160a01b038316610cd4578060026000828254610cc99190611326565b90915550610d469050565b6001600160a01b03831660009081526020819052604090205481811015610d275760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016106b1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610d6257600280548290039055610d81565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dc691815260200190565b60405180910390a3505050565b606060ff8314610ded57610de683611006565b905061041b565b818054610df9906112ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610e25906112ec565b8015610e725780601f10610e4757610100808354040283529160200191610e72565b820191906000526020600020905b815481529060010190602001808311610e5557829003601f168201915b5050505050905061041b565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610eb95750600091506003905082610f43565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f0d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f3957506000925060019150829050610f43565b9250600091508190505b9450945094915050565b6000826003811115610f6157610f61611347565b03610f6a575050565b6001826003811115610f7e57610f7e611347565b03610f9c5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610fb057610fb0611347565b03610fd15760405163fce698f760e01b8152600481018290526024016106b1565b6003826003811115610fe557610fe5611347565b036105ad576040516335e2f38360e21b8152600481018290526024016106b1565b6060600061101383611045565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561041b57604051632cd44ac360e21b815260040160405180910390fd5b60006020828403121561107f57600080fd5b81356001600160e01b03198116811461109757600080fd5b9392505050565b6000815180845260005b818110156110c4576020818501810151868301820152016110a8565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611097602083018461109e565b80356001600160a01b038116811461110e57600080fd5b919050565b6000806040838503121561112657600080fd5b61112f836110f7565b946020939093013593505050565b60008060006060848603121561115257600080fd5b61115b846110f7565b9250611169602085016110f7565b9150604084013590509250925092565b60006020828403121561118b57600080fd5b5035919050565b6000602082840312156111a457600080fd5b611097826110f7565b60ff60f81b881681526000602060e060208401526111ce60e084018a61109e565b83810360408501526111e0818a61109e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561123457835183529284019291840191600101611218565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561126157600080fd5b61126a886110f7565b9650611278602089016110f7565b95506040880135945060608801359350608088013560ff8116811461129c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156112cc57600080fd5b6112d5836110f7565b91506112e3602084016110f7565b90509250929050565b600181811c9082168061130057607f821691505b60208210810361132057634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561041b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220032864074dcac90a9b8186e95e61370c7efb95dabea071111e72945dbebddcb164736f6c63430008180033a2646970667358221220c6ee02d27f55199b8e4cacf6dd7b8bc5e8bf8fd16f217cf26dfb20e09aaabe0864736f6c63430008180033" }, { "type": "UInt64", diff --git a/cadence/args/deploy-erc721-deployer-args.json b/cadence/args/deploy-erc721-deployer-args.json index 7671744d..0a156ee5 100644 --- a/cadence/args/deploy-erc721-deployer-args.json +++ b/cadence/args/deploy-erc721-deployer-args.json @@ -1,7 +1,7 @@ [ { "type": "String", - "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612657806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d3660046200043c565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c93660046200051a565b62000180565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002a7565b005b6000546001600160a01b0316620000cf565b620001066200012b366004620005fc565b620002bf565b6200010662000142366004620005fc565b6200036b565b60006001600160e01b0319821663476d399760e01b14806200017a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b031633146200020b576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a204f6e60448201527f6c792064656c656761746564206465706c6f7965722063616e206465706c6f7960648201526084015b60405180910390fd5b600080546001600160a01b031687878787876040516200022b906200042e565b6200023c969594939291906200066f565b604051809103906000f08015801562000259573d6000803e3d6000fd5b5090507fbebce54951ebf20c0dcd195a45bb2388d9ac8e38b5974e00bb63c5822dbe65f0818888888860405162000295959493929190620006f8565b60405180910390a19695505050505050565b620002b1620003af565b620002bd6000620003de565b565b620002c9620003af565b6001600160a01b03811662000349576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a20496e60448201527f76616c69642064656c656761746564206465706c6f7965722061646472657373606482015260840162000202565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b62000375620003af565b6001600160a01b038116620003a157604051631e4fbdf760e01b81526000600482015260240162000202565b620003ac81620003de565b50565b6000546001600160a01b03163314620002bd5760405163118cdaa760e01b815233600482015260240162000202565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611eb7806200076b83390190565b6000602082840312156200044f57600080fd5b81356001600160e01b0319811681146200046857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200049757600080fd5b813567ffffffffffffffff80821115620004b557620004b56200046f565b604051601f8301601f19908116603f01168101908282118183101715620004e057620004e06200046f565b81604052838152866020858801011115620004fa57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200053357600080fd5b853567ffffffffffffffff808211156200054c57600080fd5b6200055a89838a0162000485565b965060208801359150808211156200057157600080fd5b6200057f89838a0162000485565b955060408801359150808211156200059657600080fd5b620005a489838a0162000485565b94506060880135915080821115620005bb57600080fd5b620005c989838a0162000485565b93506080880135915080821115620005e057600080fd5b50620005ef8882890162000485565b9150509295509295909350565b6000602082840312156200060f57600080fd5b81356001600160a01b03811681146200046857600080fd5b6000815180845260005b818110156200064f5760208185018101518683018201520162000631565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006959083018862000627565b8281036040840152620006a9818862000627565b90508281036060840152620006bf818762000627565b90508281036080840152620006d5818662000627565b905082810360a0840152620006eb818562000627565b9998505050505050505050565b6001600160a01b038616815260a0602082018190526000906200071e9083018762000627565b828103604084015262000732818762000627565b9050828103606084015262000748818662000627565b905082810360808401526200075e818562000627565b9897505050505050505056fe60806040523480156200001157600080fd5b5060405162001eb738038062001eb7833981016040819052620000349162000202565b858585600062000045838262000386565b50600162000054828262000386565b5050506001600160a01b0381166200008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009181620000cb565b50600c620000a0848262000386565b50600d620000af838262000386565b50600e620000be828262000386565b5050505050505062000452565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200013557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016257600080fd5b81516001600160401b03808211156200017f576200017f6200013a565b604051601f8301601f19908116603f01168101908282118183101715620001aa57620001aa6200013a565b8160405283815260209250866020858801011115620001c857600080fd5b600091505b83821015620001ec5785820183015181830184015290820190620001cd565b6000602085830101528094505050505092915050565b60008060008060008060c087890312156200021c57600080fd5b62000227876200011d565b60208801519096506001600160401b03808211156200024557600080fd5b620002538a838b0162000150565b965060408901519150808211156200026a57600080fd5b620002788a838b0162000150565b955060608901519150808211156200028f57600080fd5b6200029d8a838b0162000150565b94506080890151915080821115620002b457600080fd5b620002c28a838b0162000150565b935060a0890151915080821115620002d957600080fd5b50620002e889828a0162000150565b9150509295509295509295565b600181811c908216806200030a57607f821691505b6020821081036200032b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000381576000816000526020600020601f850160051c810160208610156200035c5750805b601f850160051c820191505b818110156200037d5782815560010162000368565b5050505b505050565b81516001600160401b03811115620003a257620003a26200013a565b620003ba81620003b38454620002f5565b8462000331565b602080601f831160018114620003f25760008415620003d95750858301515b600019600386901b1c1916600185901b1785556200037d565b600085815260208120601f198616915b82811015620004235788860151825594840194600190910190840162000402565b5085821015620004425787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a5580620004626000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a76b4d56116100a2578063cd279c7c11610071578063cd279c7c146103a8578063e8a3d485146103bb578063e985e9c5146103c3578063f2fde38b146103d657600080fd5b8063a76b4d5614610372578063b49bbd941461037a578063b88d4fde14610382578063c87b56dd1461039557600080fd5b806394e29329116100de57806394e293291461034757806395d89b411461034f578063a159047b14610357578063a22cb4651461035f57600080fd5b806370a082311461031b578063715018a61461032e5780638da5cb5b1461033657600080fd5b80632f745c59116101715780634f558e791161014b5780634f558e79146102c25780634f6ccce7146102ed5780635e0a9661146103005780636352211e1461030857600080fd5b80632f745c591461028957806342842e0e1461029c57806342966c68146102af57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c57806318160ddd1461025157806318e97fd11461026357806323b872dd1461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611494565b6103e9565b60405190151581526020015b60405180910390f35b6102046103fa565b6040516101f39190611501565b61022461021f366004611514565b61048c565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611549565b6104b5565b005b6009545b6040519081526020016101f3565b61024f61027136600461161f565b6104c4565b61024f610284366004611666565b6104d6565b610255610297366004611549565b610566565b61024f6102aa366004611666565b6105cb565b61024f6102bd366004611514565b6105eb565b6101e76102d0366004611514565b6000908152600260205260409020546001600160a01b0316151590565b6102556102fb366004611514565b6105f7565b610204610650565b610224610316366004611514565b61065f565b6102556103293660046116a2565b61066a565b61024f6106b2565b600b546001600160a01b0316610224565b6102046106c6565b6102046106d5565b6102046106e4565b61024f61036d3660046116bd565b610772565b61020461077d565b61020461078a565b61024f6103903660046116f9565b610797565b6102046103a3366004611514565b6107ae565b61024f6103b6366004611775565b6107b9565b6102046107d5565b6101e76103d13660046117cc565b6107e4565b61024f6103e43660046116a2565b610812565b60006103f482610850565b92915050565b606060008054610409906117ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610435906117ff565b80156104825780601f1061045757610100808354040283529160200191610482565b820191906000526020600020905b81548152906001019060200180831161046557829003601f168201915b5050505050905090565b600061049782610875565b506000828152600460205260409020546001600160a01b03166103f4565b6104c08282336108ae565b5050565b6104cc6108bb565b6104c082826108e8565b6001600160a01b03821661050557604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610512838333610938565b9050836001600160a01b0316816001600160a01b031614610560576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016104fc565b50505050565b60006105718361066a565b82106105a25760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016104fc565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6105e683838360405180602001604052806000815250610797565b505050565b6104c060008233610938565b600061060260095490565b821061062b5760405163295f44f760e21b815260006004820152602481018390526044016104fc565b6009828154811061063e5761063e611839565b90600052602060002001549050919050565b6060600d8054610409906117ff565b60006103f482610875565b60006001600160a01b038216610696576040516322718ad960e21b8152600060048201526024016104fc565b506001600160a01b031660009081526003602052604090205490565b6106ba6108bb565b6106c4600061094d565b565b6060600c8054610409906117ff565b606060018054610409906117ff565b600d80546106f1906117ff565b80601f016020809104026020016040519081016040528092919081815260200182805461071d906117ff565b801561076a5780601f1061073f5761010080835404028352916020019161076a565b820191906000526020600020905b81548152906001019060200180831161074d57829003601f168201915b505050505081565b6104c033838361099f565b600e80546106f1906117ff565b600c80546106f1906117ff565b6107a28484846104d6565b61056084848484610a3e565b60606103f482610b67565b6107c16108bb565b6107cb8383610c70565b6105e682826108e8565b6060600e8054610409906117ff565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61081a6108bb565b6001600160a01b03811661084457604051631e4fbdf760e01b8152600060048201526024016104fc565b61084d8161094d565b50565b60006001600160e01b0319821663780e9d6360e01b14806103f457506103f482610c8a565b6000818152600260205260408120546001600160a01b0316806103f457604051637e27328960e01b8152600481018490526024016104fc565b6105e68383836001610caf565b600b546001600160a01b031633146106c45760405163118cdaa760e01b81523360048201526024016104fc565b6000828152600660205260409020610900828261189f565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6000610945848484610db5565b949350505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166109d157604051630b61174360e31b81526001600160a01b03831660048201526024016104fc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561056057604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a8090339088908790879060040161195f565b6020604051808303816000875af1925050508015610abb575060408051601f3d908101601f19168201909252610ab89181019061199c565b60015b610b24573d808015610ae9576040519150601f19603f3d011682016040523d82523d6000602084013e610aee565b606091505b508051600003610b1c57604051633250574960e11b81526001600160a01b03851660048201526024016104fc565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b6057604051633250574960e11b81526001600160a01b03851660048201526024016104fc565b5050505050565b6060610b7282610875565b5060008281526006602052604081208054610b8c906117ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb8906117ff565b8015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b505050505090506000610c2360408051602081019091526000815290565b90508051600003610c35575092915050565b815115610c67578082604051602001610c4f9291906119b9565b60405160208183030381529060405292505050919050565b61094584610e82565b6104c0828260405180602001604052806000815250610ef7565b60006001600160e01b03198216632483248360e11b14806103f457506103f482610f0e565b8080610cc357506001600160a01b03821615155b15610d85576000610cd384610875565b90506001600160a01b03831615801590610cff5750826001600160a01b0316816001600160a01b031614155b8015610d125750610d1081846107e4565b155b15610d3b5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016104fc565b8115610d835783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610dc3858585610f5e565b90506001600160a01b038116610e2057610e1b84600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b610e43565b846001600160a01b0316816001600160a01b031614610e4357610e438185611057565b6001600160a01b038516610e5f57610e5a846110e8565b610945565b846001600160a01b0316816001600160a01b031614610945576109458585611197565b6060610e8d82610875565b506000610ea560408051602081019091526000815290565b90506000815111610ec55760405180602001604052806000815250610ef0565b80610ecf846111e7565b604051602001610ee09291906119b9565b6040516020818303038152906040525b9392505050565b610f01838361127a565b6105e66000848484610a3e565b60006001600160e01b031982166380ac58cd60e01b1480610f3f57506001600160e01b03198216635b5e139f60e01b145b806103f457506301ffc9a760e01b6001600160e01b03198316146103f4565b6000828152600260205260408120546001600160a01b0390811690831615610f8b57610f8b8184866112df565b6001600160a01b03811615610fc957610fa8600085600080610caf565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610ff8576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006110628361066a565b6000838152600860205260409020549091508082146110b5576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906110fa906001906119e8565b6000838152600a60205260408120546009805493945090928490811061112257611122611839565b90600052602060002001549050806009838154811061114357611143611839565b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061117b5761117b611a09565b6001900381819060005260206000200160009055905550505050565b600060016111a48461066a565b6111ae91906119e8565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b606060006111f483611343565b600101905060008167ffffffffffffffff81111561121457611214611573565b6040519080825280601f01601f19166020018201604052801561123e576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461124857509392505050565b6001600160a01b0382166112a457604051633250574960e11b8152600060048201526024016104fc565b60006112b283836000610938565b90506001600160a01b038116156105e6576040516339e3563760e11b8152600060048201526024016104fc565b6112ea83838361141b565b6105e6576001600160a01b03831661131857604051637e27328960e01b8152600481018290526024016104fc565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016104fc565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106113825772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106113ae576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106113cc57662386f26fc10000830492506010015b6305f5e10083106113e4576305f5e100830492506008015b61271083106113f857612710830492506004015b6064831061140a576064830492506002015b600a83106103f45760010192915050565b60006001600160a01b038316158015906109455750826001600160a01b0316846001600160a01b03161480611455575061145584846107e4565b806109455750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b03198116811461084d57600080fd5b6000602082840312156114a657600080fd5b8135610ef08161147e565b60005b838110156114cc5781810151838201526020016114b4565b50506000910152565b600081518084526114ed8160208601602086016114b1565b601f01601f19169290920160200192915050565b602081526000610ef060208301846114d5565b60006020828403121561152657600080fd5b5035919050565b80356001600160a01b038116811461154457600080fd5b919050565b6000806040838503121561155c57600080fd5b6115658361152d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156115a4576115a4611573565b604051601f8501601f19908116603f011681019082821181831017156115cc576115cc611573565b816040528093508581528686860111156115e557600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261161057600080fd5b610ef083833560208501611589565b6000806040838503121561163257600080fd5b82359150602083013567ffffffffffffffff81111561165057600080fd5b61165c858286016115ff565b9150509250929050565b60008060006060848603121561167b57600080fd5b6116848461152d565b92506116926020850161152d565b9150604084013590509250925092565b6000602082840312156116b457600080fd5b610ef08261152d565b600080604083850312156116d057600080fd5b6116d98361152d565b9150602083013580151581146116ee57600080fd5b809150509250929050565b6000806000806080858703121561170f57600080fd5b6117188561152d565b93506117266020860161152d565b925060408501359150606085013567ffffffffffffffff81111561174957600080fd5b8501601f8101871361175a57600080fd5b61176987823560208401611589565b91505092959194509250565b60008060006060848603121561178a57600080fd5b6117938461152d565b925060208401359150604084013567ffffffffffffffff8111156117b657600080fd5b6117c2868287016115ff565b9150509250925092565b600080604083850312156117df57600080fd5b6117e88361152d565b91506117f66020840161152d565b90509250929050565b600181811c9082168061181357607f821691505b60208210810361183357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b601f8211156105e6576000816000526020600020601f850160051c810160208610156118785750805b601f850160051c820191505b8181101561189757828155600101611884565b505050505050565b815167ffffffffffffffff8111156118b9576118b9611573565b6118cd816118c784546117ff565b8461184f565b602080601f83116001811461190257600084156118ea5750858301515b600019600386901b1c1916600185901b178555611897565b600085815260208120601f198616915b8281101561193157888601518255948401946001909101908401611912565b508582101561194f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611992908301846114d5565b9695505050505050565b6000602082840312156119ae57600080fd5b8151610ef08161147e565b600083516119cb8184602088016114b1565b8351908301906119df8183602088016114b1565b01949350505050565b818103818111156103f457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122074d34aec07c0da793ce5cac74069bf4177b7594babf4fede87db849ea2f57b3764736f6c63430008170033a2646970667358221220953493586f5fb5670e80849013b6c27540a3f06c628c3046b81886afa405e0c664736f6c63430008170033" + "value": "0x608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612732806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d36600462000488565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c936600462000566565b6200019c565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002cb565b005b6000546001600160a01b0316620000cf565b620001066200012b36600462000648565b620002e3565b620001066200014236600462000648565b620003b7565b60006001600160e01b0319821663476d399760e01b14806200017a57506001600160e01b03198216630704183b60e11b145b806200019657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b0316331462000227576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a204f6e60448201527f6c792064656c656761746564206465706c6f7965722063616e206465706c6f7960648201526084015b60405180910390fd5b600080546001600160a01b0316878787878760405162000247906200047a565b6200025896959493929190620006bb565b604051809103906000f08015801562000275573d6000803e3d6000fd5b509050806001600160a01b03167fac166d2e64b2aaf94e9dfc7205dc17bc2a537b28fab78dfb70d79325657a8d3f88888888604051620002b9949392919062000744565b60405180910390a29695505050505050565b620002d5620003fb565b620002e160006200042a565b565b620002ed620003fb565b6001600160a01b0381166200036d576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a20496e60448201527f76616c69642064656c656761746564206465706c6f796572206164647265737360648201526084016200021e565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc553df5d2803898b31fac480ec2b45d67b73294d4c94a93f069f47400f76bdbb90600090a250565b620003c1620003fb565b6001600160a01b038116620003ed57604051631e4fbdf760e01b8152600060048201526024016200021e565b620003f8816200042a565b50565b6000546001600160a01b03163314620002e15760405163118cdaa760e01b81523360048201526024016200021e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f5880620007a583390190565b6000602082840312156200049b57600080fd5b81356001600160e01b031981168114620004b457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620004e357600080fd5b813567ffffffffffffffff80821115620005015762000501620004bb565b604051601f8301601f19908116603f011681019082821181831017156200052c576200052c620004bb565b816040528381528660208588010111156200054657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200057f57600080fd5b853567ffffffffffffffff808211156200059857600080fd5b620005a689838a01620004d1565b96506020880135915080821115620005bd57600080fd5b620005cb89838a01620004d1565b95506040880135915080821115620005e257600080fd5b620005f089838a01620004d1565b945060608801359150808211156200060757600080fd5b6200061589838a01620004d1565b935060808801359150808211156200062c57600080fd5b506200063b88828901620004d1565b9150509295509295909350565b6000602082840312156200065b57600080fd5b81356001600160a01b0381168114620004b457600080fd5b6000815180845260005b818110156200069b576020818501810151868301820152016200067d565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006e19083018862000673565b8281036040840152620006f5818862000673565b905082810360608401526200070b818762000673565b9050828103608084015262000721818662000673565b905082810360a084015262000737818562000673565b9998505050505050505050565b60808152600062000759608083018762000673565b82810360208401526200076d818762000673565b9050828103604084015262000783818662000673565b9050828103606084015262000799818562000673565b97965050505050505056fe60806040523480156200001157600080fd5b5060405162001f5838038062001f58833981016040819052620000349162000202565b858585600062000045838262000386565b50600162000054828262000386565b5050506001600160a01b0381166200008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009181620000cb565b50600c620000a0848262000386565b50600d620000af838262000386565b50600e620000be828262000386565b5050505050505062000452565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200013557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016257600080fd5b81516001600160401b03808211156200017f576200017f6200013a565b604051601f8301601f19908116603f01168101908282118183101715620001aa57620001aa6200013a565b8160405283815260209250866020858801011115620001c857600080fd5b600091505b83821015620001ec5785820183015181830184015290820190620001cd565b6000602085830101528094505050505092915050565b60008060008060008060c087890312156200021c57600080fd5b62000227876200011d565b60208801519096506001600160401b03808211156200024557600080fd5b620002538a838b0162000150565b965060408901519150808211156200026a57600080fd5b620002788a838b0162000150565b955060608901519150808211156200028f57600080fd5b6200029d8a838b0162000150565b94506080890151915080821115620002b457600080fd5b620002c28a838b0162000150565b935060a0890151915080821115620002d957600080fd5b50620002e889828a0162000150565b9150509295509295509295565b600181811c908216806200030a57607f821691505b6020821081036200032b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000381576000816000526020600020601f850160051c810160208610156200035c5750805b601f850160051c820191505b818110156200037d5782815560010162000368565b5050505b505050565b81516001600160401b03811115620003a257620003a26200013a565b620003ba81620003b38454620002f5565b8462000331565b602080601f831160018114620003f25760008415620003d95750858301515b600019600386901b1c1916600185901b1785556200037d565b600085815260208120601f198616915b82811015620004235788860151825594840194600190910190840162000402565b5085821015620004425787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611af680620004626000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806366bd8dc011610104578063a76b4d56116100a2578063cd279c7c11610071578063cd279c7c146103a8578063e8a3d485146103bb578063e985e9c5146103c3578063f2fde38b146103d657600080fd5b8063a76b4d5614610372578063b88d4fde1461037a578063bef43b9d1461038d578063c87b56dd1461039557600080fd5b80638da5cb5b116100de5780638da5cb5b1461033e57806395d89b411461034f57806397d9a15914610357578063a22cb4651461035f57600080fd5b806366bd8dc01461031b57806370a0823114610323578063715018a61461033657600080fd5b806323b872dd1161017157806342966c681161014b57806342966c68146102b75780634f558e79146102ca5780634f6ccce7146102f55780636352211e1461030857600080fd5b806323b872dd1461027e5780632f745c591461029157806342842e0e146102a457600080fd5b8063095ea7b3116101ad578063095ea7b31461023c57806318160ddd1461025157806318e97fd1146102635780631a6228961461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611535565b6103e9565b60405190151581526020015b60405180910390f35b61020461049b565b6040516101f391906115a2565b61022461021f3660046115b5565b61052d565b6040516001600160a01b0390911681526020016101f3565b61024f61024a3660046115ea565b610556565b005b6009545b6040519081526020016101f3565b61024f6102713660046116c0565b610565565b610204610577565b61024f61028c366004611707565b610586565b61025561029f3660046115ea565b610616565b61024f6102b2366004611707565b61067b565b61024f6102c53660046115b5565b61069b565b6101e76102d83660046115b5565b6000908152600260205260409020546001600160a01b0316151590565b6102556103033660046115b5565b6106a7565b6102246103163660046115b5565b610700565b61020461070b565b610255610331366004611743565b610799565b61024f6107e1565b600b546001600160a01b0316610224565b6102046107f5565b610204610804565b61024f61036d36600461175e565b610813565b61020461081e565b61024f61038836600461179a565b61082b565b610204610842565b6102046103a33660046115b5565b61084f565b61024f6103b6366004611816565b61085a565b610204610876565b6101e76103d136600461186d565b610885565b61024f6103e4366004611743565b6108b3565b60006001600160e01b031982166301ffc9a760e01b148061041a57506001600160e01b03198216635b5e139f60e01b145b8061043557506001600160e01b0319821663780e9d6360e01b145b8061045057506001600160e01b03198216630852cd8d60e31b145b8061046b57506001600160e01b03198216630704183b60e11b145b8061048657506001600160e01b03198216638dbb89cf60e01b145b806104955750610495826108f1565b92915050565b6060600080546104aa906118a0565b80601f01602080910402602001604051908101604052809291908181526020018280546104d6906118a0565b80156105235780601f106104f857610100808354040283529160200191610523565b820191906000526020600020905b81548152906001019060200180831161050657829003601f168201915b5050505050905090565b600061053882610916565b506000828152600460205260409020546001600160a01b0316610495565b61056182823361094f565b5050565b61056d61095c565b6105618282610989565b6060600c80546104aa906118a0565b6001600160a01b0382166105b557604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006105c28383336109d9565b9050836001600160a01b0316816001600160a01b031614610610576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016105ac565b50505050565b600061062183610799565b82106106525760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016105ac565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6106968383836040518060200160405280600081525061082b565b505050565b610561600082336109d9565b60006106b260095490565b82106106db5760405163295f44f760e21b815260006004820152602481018390526044016105ac565b600982815481106106ee576106ee6118da565b90600052602060002001549050919050565b600061049582610916565b600c8054610718906118a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610744906118a0565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b505050505081565b60006001600160a01b0382166107c5576040516322718ad960e21b8152600060048201526024016105ac565b506001600160a01b031660009081526003602052604090205490565b6107e961095c565b6107f360006109ee565b565b6060600180546104aa906118a0565b6060600d80546104aa906118a0565b610561338383610a40565b600e8054610718906118a0565b610836848484610586565b61061084848484610adf565b600d8054610718906118a0565b606061049582610c08565b61086261095c565b61086c8383610d11565b6106968282610989565b6060600e80546104aa906118a0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6108bb61095c565b6001600160a01b0381166108e557604051631e4fbdf760e01b8152600060048201526024016105ac565b6108ee816109ee565b50565b60006001600160e01b0319821663780e9d6360e01b1480610495575061049582610d2b565b6000818152600260205260408120546001600160a01b03168061049557604051637e27328960e01b8152600481018490526024016105ac565b6106968383836001610d50565b600b546001600160a01b031633146107f35760405163118cdaa760e01b81523360048201526024016105ac565b60008281526006602052604090206109a18282611940565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006109e6848484610e56565b949350505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610a7257604051630b61174360e31b81526001600160a01b03831660048201526024016105ac565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561061057604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610b21903390889087908790600401611a00565b6020604051808303816000875af1925050508015610b5c575060408051601f3d908101601f19168201909252610b5991810190611a3d565b60015b610bc5573d808015610b8a576040519150601f19603f3d011682016040523d82523d6000602084013e610b8f565b606091505b508051600003610bbd57604051633250574960e11b81526001600160a01b03851660048201526024016105ac565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610c0157604051633250574960e11b81526001600160a01b03851660048201526024016105ac565b5050505050565b6060610c1382610916565b5060008281526006602052604081208054610c2d906118a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c59906118a0565b8015610ca65780601f10610c7b57610100808354040283529160200191610ca6565b820191906000526020600020905b815481529060010190602001808311610c8957829003601f168201915b505050505090506000610cc460408051602081019091526000815290565b90508051600003610cd6575092915050565b815115610d08578082604051602001610cf0929190611a5a565b60405160208183030381529060405292505050919050565b6109e684610f23565b610561828260405180602001604052806000815250610f98565b60006001600160e01b03198216632483248360e11b1480610495575061049582610faf565b8080610d6457506001600160a01b03821615155b15610e26576000610d7484610916565b90506001600160a01b03831615801590610da05750826001600160a01b0316816001600160a01b031614155b8015610db35750610db18184610885565b155b15610ddc5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016105ac565b8115610e245783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610e64858585610fff565b90506001600160a01b038116610ec157610ebc84600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b610ee4565b846001600160a01b0316816001600160a01b031614610ee457610ee481856110f8565b6001600160a01b038516610f0057610efb84611189565b6109e6565b846001600160a01b0316816001600160a01b0316146109e6576109e68585611238565b6060610f2e82610916565b506000610f4660408051602081019091526000815290565b90506000815111610f665760405180602001604052806000815250610f91565b80610f7084611288565b604051602001610f81929190611a5a565b6040516020818303038152906040525b9392505050565b610fa2838361131b565b6106966000848484610adf565b60006001600160e01b031982166380ac58cd60e01b1480610fe057506001600160e01b03198216635b5e139f60e01b145b8061049557506301ffc9a760e01b6001600160e01b0319831614610495565b6000828152600260205260408120546001600160a01b039081169083161561102c5761102c818486611380565b6001600160a01b0381161561106a57611049600085600080610d50565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611099576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061110383610799565b600083815260086020526040902054909150808214611156576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061119b90600190611a89565b6000838152600a6020526040812054600980549394509092849081106111c3576111c36118da565b9060005260206000200154905080600983815481106111e4576111e46118da565b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061121c5761121c611aaa565b6001900381819060005260206000200160009055905550505050565b6000600161124584610799565b61124f9190611a89565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b60606000611295836113e4565b600101905060008167ffffffffffffffff8111156112b5576112b5611614565b6040519080825280601f01601f1916602001820160405280156112df576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846112e957509392505050565b6001600160a01b03821661134557604051633250574960e11b8152600060048201526024016105ac565b6000611353838360006109d9565b90506001600160a01b03811615610696576040516339e3563760e11b8152600060048201526024016105ac565b61138b8383836114bc565b610696576001600160a01b0383166113b957604051637e27328960e01b8152600481018290526024016105ac565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016105ac565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114235772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061144f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061146d57662386f26fc10000830492506010015b6305f5e1008310611485576305f5e100830492506008015b612710831061149957612710830492506004015b606483106114ab576064830492506002015b600a83106104955760010192915050565b60006001600160a01b038316158015906109e65750826001600160a01b0316846001600160a01b031614806114f657506114f68484610885565b806109e65750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b0319811681146108ee57600080fd5b60006020828403121561154757600080fd5b8135610f918161151f565b60005b8381101561156d578181015183820152602001611555565b50506000910152565b6000815180845261158e816020860160208601611552565b601f01601f19169290920160200192915050565b602081526000610f916020830184611576565b6000602082840312156115c757600080fd5b5035919050565b80356001600160a01b03811681146115e557600080fd5b919050565b600080604083850312156115fd57600080fd5b611606836115ce565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561164557611645611614565b604051601f8501601f19908116603f0116810190828211818310171561166d5761166d611614565b8160405280935085815286868601111561168657600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126116b157600080fd5b610f918383356020850161162a565b600080604083850312156116d357600080fd5b82359150602083013567ffffffffffffffff8111156116f157600080fd5b6116fd858286016116a0565b9150509250929050565b60008060006060848603121561171c57600080fd5b611725846115ce565b9250611733602085016115ce565b9150604084013590509250925092565b60006020828403121561175557600080fd5b610f91826115ce565b6000806040838503121561177157600080fd5b61177a836115ce565b91506020830135801515811461178f57600080fd5b809150509250929050565b600080600080608085870312156117b057600080fd5b6117b9856115ce565b93506117c7602086016115ce565b925060408501359150606085013567ffffffffffffffff8111156117ea57600080fd5b8501601f810187136117fb57600080fd5b61180a8782356020840161162a565b91505092959194509250565b60008060006060848603121561182b57600080fd5b611834846115ce565b925060208401359150604084013567ffffffffffffffff81111561185757600080fd5b611863868287016116a0565b9150509250925092565b6000806040838503121561188057600080fd5b611889836115ce565b9150611897602084016115ce565b90509250929050565b600181811c908216806118b457607f821691505b6020821081036118d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b601f821115610696576000816000526020600020601f850160051c810160208610156119195750805b601f850160051c820191505b8181101561193857828155600101611925565b505050505050565b815167ffffffffffffffff81111561195a5761195a611614565b61196e8161196884546118a0565b846118f0565b602080601f8311600181146119a3576000841561198b5750858301515b600019600386901b1c1916600185901b178555611938565b600085815260208120601f198616915b828110156119d2578886015182559484019460019091019084016119b3565b50858210156119f05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a3390830184611576565b9695505050505050565b600060208284031215611a4f57600080fd5b8151610f918161151f565b60008351611a6c818460208801611552565b835190830190611a80818360208801611552565b01949350505050565b8181038181111561049557634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122065ff7beb447ca14fd56b871e63b2ee2ad2b81577c507c1d9dae77e2a2b3163de64736f6c63430008180033a2646970667358221220a11632f840b5155cba200ee4b221a4661395c62d53afbc1a67e43bc27a0c6a9064736f6c63430008180033" }, { "type": "UInt64", diff --git a/cadence/args/deploy-factory-args.json b/cadence/args/deploy-factory-args.json index 512e101b..15091185 100644 --- a/cadence/args/deploy-factory-args.json +++ b/cadence/args/deploy-factory-args.json @@ -1,7 +1,7 @@ [ { "type": "String", - "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611452806100a56000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063aff51c3e11610097578063daa09e5411610066578063daa09e5414610216578063db6d56cd14610229578063dfe1ac361461023c578063f2fde38b1461024f57600080fd5b8063aff51c3e146101bd578063b3d5dbdc146101d0578063cc435bf3146101f0578063d974d2381461020357600080fd5b806366cd5014116100d357806366cd50141461017e578063715018a61461019157806383843c9e146101995780638da5cb5b146101ac57600080fd5b806304433bbc1461010557806314902ad314610135578063263e0c1b1461014a5780635ab1bd531461016d575b600080fd5b610118610113366004611067565b610262565b6040516001600160a01b0390911681526020015b60405180910390f35b6101486101433660046110b9565b6102da565b005b61015d6101583660046110b9565b610354565b604051901515815260200161012c565b6001546001600160a01b0316610118565b61011861018c366004611067565b610744565b610148610775565b6101486101a7366004611067565b610789565b6000546001600160a01b0316610118565b6101486101cb3660046110d6565b61088b565b6101e36101de3660046110b9565b6109a4565b60405161012c9190611178565b61015d6101fe3660046110b9565b610a17565b6101486102113660046110d6565b610a37565b61015d6102243660046110b9565b610b08565b61011861023736600461118b565b610b7e565b61015d61024a3660046110b9565b610c53565b61014861025d3660046110b9565b610cc2565b600154604051630110ceef60e21b81526000916001600160a01b0316906304433bbc90610293908590600401611178565b602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d49190611280565b92915050565b6102e2610d00565b6102eb81610d2d565b600154604080516001600160a01b03928316815291831660208301527f61dad6e94cd5c0b65c9265246706a09bd0d11d5330f3e6b659d328151a664e8c910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b1790529051600091829182916001600160a01b0386169161039a919061129d565b600060405180830381855afa9150503d80600081146103d5576040519150601f19603f3d011682016040523d82523d6000602084013e6103da565b606091505b50915091508115806103eb57508051155b156103fa575060009392505050565b604051600060248201526001600160a01b0385169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251610447919061129d565b600060405180830381855afa9150503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50909250905081158061049957508051155b156104a8575060009392505050565b60405160006024820181905260448201526001600160a01b0385169060640160408051601f198184030181529181526020820180516001600160e01b0316636eb1769f60e11b179052516104fc919061129d565b600060405180830381855afa9150503d8060008114610537576040519150601f19603f3d011682016040523d82523d6000602084013e61053c565b606091505b50909250905081158061054e57508051155b1561055d575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516001600160a01b0386169161059b9161129d565b600060405180830381855afa9150503d80600081146105d6576040519150601f19603f3d011682016040523d82523d6000602084013e6105db565b606091505b5090925090508115806105ed57508051155b156105fc575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516001600160a01b0386169161063a9161129d565b600060405180830381855afa9150503d8060008114610675576040519150601f19603f3d011682016040523d82523d6000602084013e61067a565b606091505b50909250905081158061068c57508051155b1561069b575060009392505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516001600160a01b038616916106d99161129d565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905081158061072b57508051155b1561073a575060009392505050565b5060019392505050565b6000600282604051610756919061129d565b908152604051908190036020019020546001600160a01b031692915050565b61077d610d00565b6107876000610d9f565b565b610791610d00565b60006002826040516107a3919061129d565b908152604051908190036020019020546001600160a01b03169050806108235760405162461bcd60e51b815260206004820152602a60248201527f466c6f77427269646765466163746f72793a204465706c6f796572206e6f74206044820152691c9959da5cdd195c995960b21b60648201526084015b60405180910390fd5b600282604051610833919061129d565b90815260405190819003602001812080546001600160a01b03191690557f03c7566b5f4959b890c1a6d38f39df053c6737c9965d9c0ddf612c86100a838b9061087f90849084906112b9565b60405180910390a15050565b610893610d00565b61089c81610def565b60006001600160a01b03166002836040516108b7919061129d565b908152604051908190036020019020546001600160a01b0316146109345760405162461bcd60e51b815260206004820152602e60248201527f466c6f77427269646765466163746f72793a204465706c6f79657220616c726560448201526d18591e481c9959da5cdd195c995960921b606482015260840161081a565b80600283604051610945919061129d565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557fc0c30f085f0b1397c8bf23f8b851b63b33e13d11832b8320a37fca1c07dcb40f9061087f90849084906112b9565b600154604051632cf576f760e21b81526001600160a01b038381166004830152606092169063b3d5dbdc90602401600060405180830381865afa1580156109ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d491908101906112e3565b6000610a2282610b08565b1515610a2d83610354565b1515141592915050565b610a3f610d00565b610a4881610def565b6000600283604051610a5a919061129d565b908152604051908190036020019020546001600160a01b0316905080610a8957610a84838361088b565b505050565b81600284604051610a9a919061129d565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557f848576f8a081c5af60d89f0215c8af528186670eefd6349c05014d5b2268864690610afb9085908490869061135a565b60405180910390a1505050565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526000906001600160a01b038316906301ffc9a790602401602060405180830381865afa925050508015610b72575060408051601f3d908101601f19168201909252610b6f9181019061138d565b60015b6102d457506000919050565b6000610b88610d00565b6000600288604051610b9a919061129d565b908152604051908190036020019020546001600160a01b03169050610bbe81610def565b60405163476d399760e01b815281906000906001600160a01b0383169063476d399790610bf7908c908c908c908c908c906004016113af565b6020604051808303816000875af1158015610c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190611280565b9050610c468682610e61565b9998505050505050505050565b60015460405163a6de610560e01b81526001600160a01b038381166004830152600092169063a6de610590602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d4919061138d565b610cca610d00565b6001600160a01b038116610cf457604051631e4fbdf760e01b81526000600482015260240161081a565b610cfd81610d9f565b50565b6000546001600160a01b031633146107875760405163118cdaa760e01b815233600482015260240161081a565b610d3681610ecc565b610d478163976998cb60e01b610f22565b610cfd5760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c696420726567697360448201526274727960e81b606482015260840161081a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610df881610ecc565b610e098163476d399760e01b610f22565b610cfd5760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c6964206465706c6f6044820152623cb2b960e91b606482015260840161081a565b60015460405163522791d160e01b81526001600160a01b0390911690819063522791d190610e9590869086906004016112b9565b600060405180830381600087803b158015610eaf57600080fd5b505af1158015610ec3573d6000803e3d6000fd5b50505050505050565b6001600160a01b038116610cfd5760405162461bcd60e51b815260206004820152601f60248201527f466c6f77427269646765466163746f72793a205a65726f206164647265737300604482015260640161081a565b6040516301ffc9a760e01b81526001600160e01b0319821660048201526000906001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015610f8f575060408051601f3d908101601f19168201909252610f8c9181019061138d565b60015b610f9b575060006102d4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fe157610fe1610fa2565b604052919050565b600067ffffffffffffffff82111561100357611003610fa2565b50601f01601f191660200190565b600082601f83011261102257600080fd5b813561103561103082610fe9565b610fb8565b81815284602083860101111561104a57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561107957600080fd5b813567ffffffffffffffff81111561109057600080fd5b61109c84828501611011565b949350505050565b6001600160a01b0381168114610cfd57600080fd5b6000602082840312156110cb57600080fd5b8135610f9b816110a4565b600080604083850312156110e957600080fd5b823567ffffffffffffffff81111561110057600080fd5b61110c85828601611011565b925050602083013561111d816110a4565b809150509250929050565b60005b8381101561114357818101518382015260200161112b565b50506000910152565b60008151808452611164816020860160208601611128565b601f01601f19169290920160200192915050565b602081526000610f9b602083018461114c565b60008060008060008060c087890312156111a457600080fd5b863567ffffffffffffffff808211156111bc57600080fd5b6111c88a838b01611011565b975060208901359150808211156111de57600080fd5b6111ea8a838b01611011565b9650604089013591508082111561120057600080fd5b61120c8a838b01611011565b9550606089013591508082111561122257600080fd5b61122e8a838b01611011565b9450608089013591508082111561124457600080fd5b6112508a838b01611011565b935060a089013591508082111561126657600080fd5b5061127389828a01611011565b9150509295509295509295565b60006020828403121561129257600080fd5b8151610f9b816110a4565b600082516112af818460208701611128565b9190910192915050565b6040815260006112cc604083018561114c565b905060018060a01b03831660208301529392505050565b6000602082840312156112f557600080fd5b815167ffffffffffffffff81111561130c57600080fd5b8201601f8101841361131d57600080fd5b805161132b61103082610fe9565b81815285602083850101111561134057600080fd5b611351826020830160208601611128565b95945050505050565b60608152600061136d606083018661114c565b6001600160a01b0394851660208401529290931660409091015292915050565b60006020828403121561139f57600080fd5b81518015158114610f9b57600080fd5b60a0815260006113c260a083018861114c565b82810360208401526113d4818861114c565b905082810360408401526113e8818761114c565b905082810360608401526113fc818661114c565b90508281036080840152611410818561114c565b9897505050505050505056fea264697066735822122026be7d4ef13534833344abdcc736e8876603e1f9d3463f0047ddca092a98cc2d64736f6c63430008170033" + "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114a9806100a56000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063aff51c3e11610097578063daa09e5411610066578063daa09e5414610216578063db6d56cd14610229578063dfe1ac361461023c578063f2fde38b1461024f57600080fd5b8063aff51c3e146101bd578063b3d5dbdc146101d0578063cc435bf3146101f0578063d974d2381461020357600080fd5b806366cd5014116100d357806366cd50141461017e578063715018a61461019157806383843c9e146101995780638da5cb5b146101ac57600080fd5b806304433bbc1461010557806314902ad314610135578063263e0c1b1461014a5780635ab1bd531461016d575b600080fd5b6101186101133660046110be565b610262565b6040516001600160a01b0390911681526020015b60405180910390f35b610148610143366004611110565b6102da565b005b61015d610158366004611110565b610354565b604051901515815260200161012c565b6001546001600160a01b0316610118565b61011861018c3660046110be565b610744565b610148610775565b6101486101a73660046110be565b6107e3565b6000546001600160a01b0316610118565b6101486101cb36600461112d565b6108e0565b6101e36101de366004611110565b6109f9565b60405161012c91906111cf565b61015d6101fe366004611110565b610a6c565b61014861021136600461112d565b610a8c565b61015d610224366004611110565b610b5d565b6101186102373660046111e2565b610bd3565b61015d61024a366004611110565b610ca8565b61014861025d366004611110565b610d17565b600154604051630110ceef60e21b81526000916001600160a01b0316906304433bbc906102939085906004016111cf565b602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906112d7565b92915050565b6102e2610d55565b6102eb81610d84565b600154604080516001600160a01b03928316815291831660208301527f61dad6e94cd5c0b65c9265246706a09bd0d11d5330f3e6b659d328151a664e8c910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b1790529051600091829182916001600160a01b0386169161039a91906112f4565b600060405180830381855afa9150503d80600081146103d5576040519150601f19603f3d011682016040523d82523d6000602084013e6103da565b606091505b50915091508115806103eb57508051155b156103fa575060009392505050565b604051600060248201526001600160a01b0385169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b1790525161044791906112f4565b600060405180830381855afa9150503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50909250905081158061049957508051155b156104a8575060009392505050565b60405160006024820181905260448201526001600160a01b0385169060640160408051601f198184030181529181526020820180516001600160e01b0316636eb1769f60e11b179052516104fc91906112f4565b600060405180830381855afa9150503d8060008114610537576040519150601f19603f3d011682016040523d82523d6000602084013e61053c565b606091505b50909250905081158061054e57508051155b1561055d575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516001600160a01b0386169161059b916112f4565b600060405180830381855afa9150503d80600081146105d6576040519150601f19603f3d011682016040523d82523d6000602084013e6105db565b606091505b5090925090508115806105ed57508051155b156105fc575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516001600160a01b0386169161063a916112f4565b600060405180830381855afa9150503d8060008114610675576040519150601f19603f3d011682016040523d82523d6000602084013e61067a565b606091505b50909250905081158061068c57508051155b1561069b575060009392505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516001600160a01b038616916106d9916112f4565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905081158061072b57508051155b1561073a575060009392505050565b5060019392505050565b600060028260405161075691906112f4565b908152604051908190036020019020546001600160a01b031692915050565b61077d610d55565b60405162461bcd60e51b815260206004820152603060248201527f466c6f77427269646765466163746f72793a204f776e6572736869702063616e60448201526f1b9bdd081899481c995b9bdd5b98d95960821b60648201526084015b60405180910390fd5b6107eb610d55565b60006002826040516107fd91906112f4565b908152604051908190036020019020546001600160a01b03169050806108785760405162461bcd60e51b815260206004820152602a60248201527f466c6f77427269646765466163746f72793a204465706c6f796572206e6f74206044820152691c9959da5cdd195c995960b21b60648201526084016107da565b60028260405161088891906112f4565b90815260405190819003602001812080546001600160a01b03191690557f03c7566b5f4959b890c1a6d38f39df053c6737c9965d9c0ddf612c86100a838b906108d49084908490611310565b60405180910390a15050565b6108e8610d55565b6108f181610df6565b60006001600160a01b031660028360405161090c91906112f4565b908152604051908190036020019020546001600160a01b0316146109895760405162461bcd60e51b815260206004820152602e60248201527f466c6f77427269646765466163746f72793a204465706c6f79657220616c726560448201526d18591e481c9959da5cdd195c995960921b60648201526084016107da565b8060028360405161099a91906112f4565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557fc0c30f085f0b1397c8bf23f8b851b63b33e13d11832b8320a37fca1c07dcb40f906108d49084908490611310565b600154604051632cf576f760e21b81526001600160a01b038381166004830152606092169063b3d5dbdc90602401600060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d4919081019061133a565b6000610a7782610b5d565b1515610a8283610354565b1515141592915050565b610a94610d55565b610a9d81610df6565b6000600283604051610aaf91906112f4565b908152604051908190036020019020546001600160a01b0316905080610ade57610ad983836108e0565b505050565b81600284604051610aef91906112f4565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557f848576f8a081c5af60d89f0215c8af528186670eefd6349c05014d5b2268864690610b50908590849086906113b1565b60405180910390a1505050565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526000906001600160a01b038316906301ffc9a790602401602060405180830381865afa925050508015610bc7575060408051601f3d908101601f19168201909252610bc4918101906113e4565b60015b6102d457506000919050565b6000610bdd610d55565b6000600288604051610bef91906112f4565b908152604051908190036020019020546001600160a01b03169050610c1381610df6565b60405163476d399760e01b815281906000906001600160a01b0383169063476d399790610c4c908c908c908c908c908c90600401611406565b6020604051808303816000875af1158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f91906112d7565b9050610c9b8682610e68565b9998505050505050505050565b60015460405163a6de610560e01b81526001600160a01b038381166004830152600092169063a6de610590602401602060405180830381865afa158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906113e4565b610d1f610d55565b6001600160a01b038116610d4957604051631e4fbdf760e01b8152600060048201526024016107da565b610d5281610ed3565b50565b6000546001600160a01b03163314610d825760405163118cdaa760e01b81523360048201526024016107da565b565b610d8d81610f23565b610d9e8163976998cb60e01b610f79565b610d525760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c696420726567697360448201526274727960e81b60648201526084016107da565b610dff81610f23565b610e108163476d399760e01b610f79565b610d525760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c6964206465706c6f6044820152623cb2b960e91b60648201526084016107da565b60015460405163522791d160e01b81526001600160a01b0390911690819063522791d190610e9c9086908690600401611310565b600060405180830381600087803b158015610eb657600080fd5b505af1158015610eca573d6000803e3d6000fd5b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116610d525760405162461bcd60e51b815260206004820152601f60248201527f466c6f77427269646765466163746f72793a205a65726f20616464726573730060448201526064016107da565b6040516301ffc9a760e01b81526001600160e01b0319821660048201526000906001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015610fe6575060408051601f3d908101601f19168201909252610fe3918101906113e4565b60015b610ff2575060006102d4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561103857611038610ff9565b604052919050565b600067ffffffffffffffff82111561105a5761105a610ff9565b50601f01601f191660200190565b600082601f83011261107957600080fd5b813561108c61108782611040565b61100f565b8181528460208386010111156110a157600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156110d057600080fd5b813567ffffffffffffffff8111156110e757600080fd5b6110f384828501611068565b949350505050565b6001600160a01b0381168114610d5257600080fd5b60006020828403121561112257600080fd5b8135610ff2816110fb565b6000806040838503121561114057600080fd5b823567ffffffffffffffff81111561115757600080fd5b61116385828601611068565b9250506020830135611174816110fb565b809150509250929050565b60005b8381101561119a578181015183820152602001611182565b50506000910152565b600081518084526111bb81602086016020860161117f565b601f01601f19169290920160200192915050565b602081526000610ff260208301846111a3565b60008060008060008060c087890312156111fb57600080fd5b863567ffffffffffffffff8082111561121357600080fd5b61121f8a838b01611068565b9750602089013591508082111561123557600080fd5b6112418a838b01611068565b9650604089013591508082111561125757600080fd5b6112638a838b01611068565b9550606089013591508082111561127957600080fd5b6112858a838b01611068565b9450608089013591508082111561129b57600080fd5b6112a78a838b01611068565b935060a08901359150808211156112bd57600080fd5b506112ca89828a01611068565b9150509295509295509295565b6000602082840312156112e957600080fd5b8151610ff2816110fb565b6000825161130681846020870161117f565b9190910192915050565b60408152600061132360408301856111a3565b905060018060a01b03831660208301529392505050565b60006020828403121561134c57600080fd5b815167ffffffffffffffff81111561136357600080fd5b8201601f8101841361137457600080fd5b805161138261108782611040565b81815285602083850101111561139757600080fd5b6113a882602083016020860161117f565b95945050505050565b6060815260006113c460608301866111a3565b6001600160a01b0394851660208401529290931660409091015292915050565b6000602082840312156113f657600080fd5b81518015158114610ff257600080fd5b60a08152600061141960a08301886111a3565b828103602084015261142b81886111a3565b9050828103604084015261143f81876111a3565b9050828103606084015261145381866111a3565b9050828103608084015261146781856111a3565b9897505050505050505056fea2646970667358221220e0d76d0c752ff86406f8ac3921cf855c8f764fa507449f3d0c65bfdf59ca891864736f6c63430008180033" }, { "type": "UInt64", diff --git a/cadence/contracts/bridge/FlowEVMBridge.cdc b/cadence/contracts/bridge/FlowEVMBridge.cdc index ba531058..f65b3251 100644 --- a/cadence/contracts/bridge/FlowEVMBridge.cdc +++ b/cadence/contracts/bridge/FlowEVMBridge.cdc @@ -42,7 +42,7 @@ contract FlowEVMBridge : IFlowEVMNFTBridge, IFlowEVMTokenBridge { /// Emitted any time a new asset type is onboarded to the bridge access(all) - event Onboarded(type: Type, cadenceContractAddress: Address, evmContractAddress: String) + event Onboarded(type: String, cadenceContractAddress: Address, evmContractAddress: String) /// Denotes a defining contract was deployed to the bridge account access(all) event BridgeDefiningContractDeployed( @@ -118,7 +118,7 @@ contract FlowEVMBridge : IFlowEVMNFTBridge, IFlowEVMTokenBridge { ) emit Onboarded( - type: type, + type: type.identifier, cadenceContractAddress: FlowEVMBridgeUtils.getContractAddress(fromType: type)!, evmContractAddress: onboardingValues.evmContractAddress.toString() ) @@ -182,6 +182,7 @@ contract FlowEVMBridge : IFlowEVMNFTBridge, IFlowEVMTokenBridge { !FlowEVMBridgeConfig.isPaused(): "Bridge operations are currently paused" !token.isInstance(Type<@{FungibleToken.Vault}>()): "Mixed asset types are not yet supported" self.typeRequiresOnboarding(token.getType()) == false: "NFT must first be onboarded" + FlowEVMBridgeConfig.isTypePaused(token.getType()) == false: "Bridging is currently paused for this NFT" } /* Gather identifying information */ // @@ -266,6 +267,7 @@ contract FlowEVMBridge : IFlowEVMNFTBridge, IFlowEVMTokenBridge { !FlowEVMBridgeConfig.isPaused(): "Bridge operations are currently paused" !type.isSubtype(of: Type<@{FungibleToken.Vault}>()): "Mixed asset types are not yet supported" self.typeRequiresOnboarding(type) == false: "NFT must first be onboarded" + FlowEVMBridgeConfig.isTypePaused(type) == false: "Bridging is currently paused for this NFT" } /* Provision fee */ // @@ -339,6 +341,7 @@ contract FlowEVMBridge : IFlowEVMNFTBridge, IFlowEVMTokenBridge { !FlowEVMBridgeConfig.isPaused(): "Bridge operations are currently paused" !vault.isInstance(Type<@{NonFungibleToken.NFT}>()): "Mixed asset types are not yet supported" self.typeRequiresOnboarding(vault.getType()) == false: "FT must first be onboarded" + FlowEVMBridgeConfig.isTypePaused(vault.getType()) == false: "Bridging is currently paused for this token" } /* Handle $FLOW requests via EVM interface & return */ // @@ -438,6 +441,7 @@ contract FlowEVMBridge : IFlowEVMNFTBridge, IFlowEVMTokenBridge { !type.isSubtype(of: Type<@{NonFungibleToken.Collection}>()): "Mixed asset types are not yet supported" !type.isInstance(Type<@FlowToken.Vault>()): "Must use the CadenceOwnedAccount interface to bridge $FLOW from EVM" self.typeRequiresOnboarding(type) == false: "NFT must first be onboarded" + FlowEVMBridgeConfig.isTypePaused(type) == false: "Bridging is currently paused for this token" } /* Provision fees */ // @@ -501,7 +505,7 @@ contract FlowEVMBridge : IFlowEVMNFTBridge, IFlowEVMTokenBridge { signature: "burn(uint256)", targetEVMAddress: associatedAddress, args: [amount], - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(burnResult.status == EVM.Status.successful, message: "Burn of EVM tokens failed") diff --git a/cadence/contracts/bridge/FlowEVMBridgeAccessor.cdc b/cadence/contracts/bridge/FlowEVMBridgeAccessor.cdc index 2db55957..492b1b0e 100644 --- a/cadence/contracts/bridge/FlowEVMBridgeAccessor.cdc +++ b/cadence/contracts/bridge/FlowEVMBridgeAccessor.cdc @@ -4,6 +4,7 @@ import "FlowToken" import "EVM" +import "FlowEVMBridgeConfig" import "FlowEVMBridge" /// This contract defines a mechanism for routing bridge requests from the EVM contract to the Flow-EVM bridge contract @@ -66,7 +67,7 @@ contract FlowEVMBridgeAccessor { "safeTransferFrom(address,address,uint256)", [caller.address(), FlowEVMBridge.getBridgeCOAEVMAddress(), id] ), - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: EVM.Balance(attoflow: 0) ) } @@ -128,7 +129,7 @@ contract FlowEVMBridgeAccessor { "transfer(address,uint256)", [FlowEVMBridge.getBridgeCOAEVMAddress(), amount] ), - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: EVM.Balance(attoflow: 0) ) } diff --git a/cadence/contracts/bridge/FlowEVMBridgeConfig.cdc b/cadence/contracts/bridge/FlowEVMBridgeConfig.cdc index f48ae20c..be03a483 100644 --- a/cadence/contracts/bridge/FlowEVMBridgeConfig.cdc +++ b/cadence/contracts/bridge/FlowEVMBridgeConfig.cdc @@ -13,6 +13,7 @@ contract FlowEVMBridgeConfig { Entitlements *******************/ + access(all) entitlement Gas access(all) entitlement Fee access(all) entitlement Pause @@ -29,13 +30,15 @@ contract FlowEVMBridgeConfig { /// Default ERC20.decimals() value access(all) let defaultDecimals: UInt8 + access(all) + var gasLimit: UInt64 /// Flag enabling pausing of bridge operations access(self) var paused: Bool - /// Mapping of Type to its associated EVMAddress as relevant to the bridge - access(self) - let typeToEVMAddress: {Type: EVM.EVMAddress} - /// Reverse mapping of typeToEVMAddress. Note the EVMAddress is stored as a hex string since the EVMAddress type + /// Mapping of Type to its associated EVMAddress. The contained struct values also store the operational status of + /// the association, allowing for pausing of operations by Type + access(self) let registeredTypes: {Type: TypeEVMAssociation} + /// Reverse mapping of registeredTypes. Note the EVMAddress is stored as a hex string since the EVMAddress type /// as of contract development is not a hashable or equatable type and making it so is not supported by Cadence access(self) let evmAddressHexToType: {String: Type} @@ -71,27 +74,49 @@ contract FlowEVMBridgeConfig { /// Emitted whenever a TokenHandler is configured /// access(all) - event HandlerConfigured(targetType: Type, targetEVMAddress: String?, isEnabled: Bool) - /// Emitted whenever the bridge is paused + event HandlerConfigured(targetType: String, targetEVMAddress: String?, isEnabled: Bool) + /// Emitted whenever the bridge is paused or unpaused globally - true for paused, false for unpaused + /// + access(all) + event BridgePauseStatusUpdated(paused: Bool) + /// Emitted whenever a specific asset is paused or unpaused - true for paused, false for unpaused + /// + access(all) + event AssetPauseStatusUpdated(paused: Bool, type: String, evmAddress: String) + /// Emitted whenever an association is updated /// access(all) - event PauseStatusUpdated(paused: Bool) + event AssociationUpdated(type: String, evmAddress: String) /************* Getters *************/ - /// Returns whether the bridge is paused + /// Returns whether all bridge operations are currently paused or active + /// access(all) view fun isPaused(): Bool { return self.paused } + /// Returns whether operations for a given Type are paused. A return value of nil indicates the Type is not yet + /// onboarded to the bridge. + /// + access(all) + view fun isTypePaused(_ type: Type): Bool? { + if !self.typeHasTokenHandler(type) { + // Most all assets will fall into this block - check if the asset is onboarded and paused + return self.registeredTypes[type]?.isPaused ?? nil + } + // If the asset has a TokenHandler, return true if either the Handler is paused or the type is paused + return self.borrowTokenHandler(type)!.isEnabled() == false || self.registeredTypes[type]?.isPaused == true + } + /// Retrieves the EVMAddress associated with a given Type if it has been onboarded to the bridge /// access(all) view fun getEVMAddressAssociated(with type: Type): EVM.EVMAddress? { - return self.typeToEVMAddress[type] + return self.registeredTypes[type]?.evmAddress } /// Retrieves the type associated with a given EVMAddress if it has been onboarded to the bridge @@ -106,13 +131,19 @@ contract FlowEVMBridgeConfig { Bridge Account Methods ****************************/ - /// Enables bridge contracts to update the typeToEVMAddress mapping + /// Enables bridge contracts to add new associations between types and EVM addresses /// access(account) fun associateType(_ type: Type, with evmAddress: EVM.EVMAddress) { - self.typeToEVMAddress[type] = evmAddress + pre { + self.getEVMAddressAssociated(with: type) == nil: "Type already associated with an EVMAddress" + self.getTypeAssociated(with: evmAddress) == nil: "EVMAddress already associated with a Type" + } + self.registeredTypes[type] = TypeEVMAssociation(associated: evmAddress) let evmAddressHex = evmAddress.toString() self.evmAddressHexToType[evmAddressHex] = type + + emit AssociationUpdated(type: type.identifier, evmAddress: evmAddressHex) } /// Returns whether the given Type has a TokenHandler configured @@ -127,7 +158,7 @@ contract FlowEVMBridgeConfig { access(account) view fun evmAddressHasTokenHandler(_ evmAddress: EVM.EVMAddress): Bool { let associatedType = self.getTypeAssociated(with: evmAddress) - return associatedType == nil ? self.typeHasTokenHandler(associatedType!) : false + return associatedType != nil ? self.typeHasTokenHandler(associatedType!) : false } /// Adds a TokenHandler to the bridge configuration @@ -155,7 +186,7 @@ contract FlowEVMBridgeConfig { } emit HandlerConfigured( - targetType: type, + targetType: type.identifier, targetEVMAddress: targetEVMAddressHex, isEnabled: handler.isEnabled() ) @@ -181,6 +212,38 @@ contract FlowEVMBridgeConfig { return &self.typeToTokenHandlers[type] } + /***************** + Constructs + *****************/ + + /// Entry in the registeredTypes mapping, associating a Type with an EVMAddress and its operational status. Since + /// the registeredTypes mapping is indexed on Type, this struct does not additionally store the Type to reduce + /// redundant storage. + /// + access(all) struct TypeEVMAssociation { + /// The EVMAddress associated with the Type + access(all) let evmAddress: EVM.EVMAddress + /// Flag indicating whether operations for the associated Type are paused + access(all) var isPaused: Bool + + init(associated evmAddress: EVM.EVMAddress) { + self.evmAddress = evmAddress + self.isPaused = false + } + + /// Pauses operations for this association + /// + access(contract) fun pause() { + self.isPaused = true + } + + /// Unpauses operations for this association + /// + access(contract) fun unpause() { + self.isPaused = false + } + } + /***************** Config Admin *****************/ @@ -202,12 +265,21 @@ contract FlowEVMBridgeConfig { pre { FlowEVMBridgeConfig.typeHasTokenHandler(targetType): "Cannot set minter for Type that does not have a TokenHandler configured" + FlowEVMBridgeConfig.borrowTokenHandlerAdmin(targetType) != nil: + "No handler found for target Type" + FlowEVMBridgeConfig.borrowTokenHandlerAdmin(targetType)!.getExpectedMinterType() == minter.getType(): + "Invalid minter type" } - let handler = FlowEVMBridgeConfig.borrowTokenHandlerAdmin(targetType) - ?? panic("No handler found for target Type") - assert(minter.getType() == handler.getExpectedMinterType(), message: "Invalid minter type") + FlowEVMBridgeConfig.borrowTokenHandlerAdmin(targetType)!.setMinter(<-minter) + } - handler.setMinter(<-minter) + /// Sets the gas limit for all EVM calls related to bridge operations + /// + /// @param lim the new gas limit + /// + access(Gas) + fun setGasLimit(_ limit: UInt64) { + FlowEVMBridgeConfig.gasLimit = limit } /// Updates the onboarding fee @@ -242,7 +314,7 @@ contract FlowEVMBridgeConfig { return } FlowEVMBridgeConfig.paused = true - emit PauseStatusUpdated(paused: true) + emit BridgePauseStatusUpdated(paused: true) } /// Unpauses the bridge, allowing bridge operations to resume @@ -253,7 +325,40 @@ contract FlowEVMBridgeConfig { return } FlowEVMBridgeConfig.paused = false - emit PauseStatusUpdated(paused: false) + emit BridgePauseStatusUpdated(paused: false) + } + + /// Pauses all operations for a given asset type + /// + access(Pause) + fun pauseType(_ type: Type) { + let association = &FlowEVMBridgeConfig.registeredTypes[type] as &TypeEVMAssociation? + ?? panic("Type not associated with an EVM Address") + + if association.isPaused { + return + } + + association.pause() + + let evmAddress = association.evmAddress.toString() + emit AssetPauseStatusUpdated(paused: true, type: type.identifier, evmAddress: evmAddress) + } + + /// Unpauses all operations for a given asset type + /// + access(Pause) + fun unpauseType(_ type: Type) { + let association = &FlowEVMBridgeConfig.registeredTypes[type] as &TypeEVMAssociation? + ?? panic("Type not associated with an EVM Address") + + if !association.isPaused { + return + } + + association.unpause() + let evmAddress = association.evmAddress.toString() + emit AssetPauseStatusUpdated(paused: false, type: type.identifier, evmAddress: evmAddress) } /// Sets the target EVM contract address on the handler for a given Type, associating the Cadence type with the @@ -267,6 +372,8 @@ contract FlowEVMBridgeConfig { access(FlowEVMBridgeHandlerInterfaces.Admin) fun setHandlerTargetEVMAddress(targetType: Type, targetEVMAddress: EVM.EVMAddress) { pre { + FlowEVMBridgeConfig.getEVMAddressAssociated(with: targetType) == nil: + "Type already associated with an EVM Address" FlowEVMBridgeConfig.getTypeAssociated(with: targetEVMAddress) == nil: "EVM Address already associated with another Type" } @@ -274,16 +381,16 @@ contract FlowEVMBridgeConfig { ?? panic("No handler found for target Type") handler.setTargetEVMAddress(targetEVMAddress) - if FlowEVMBridgeConfig.getEVMAddressAssociated(with: targetType) == nil { - FlowEVMBridgeConfig.associateType(targetType, with: targetEVMAddress) - } + // Get the EVM address currently associated with the target Type. If the association does not exist or the + // EVM address is different, update the association + FlowEVMBridgeConfig.associateType(targetType, with: targetEVMAddress) assert( FlowEVMBridgeConfig.getEVMAddressAssociated(with: targetType)!.bytes == targetEVMAddress.bytes, message: "Problem associating target Type and target EVM Address" ) emit HandlerConfigured( - targetType: targetType, + targetType: targetType.identifier, targetEVMAddress: targetEVMAddress.toString(), isEnabled: handler.isEnabled() ) @@ -306,7 +413,7 @@ contract FlowEVMBridgeConfig { ?? panic("Handler cannot be enabled without a target EVM Address") emit HandlerConfigured( - targetType: handler.getTargetType()!, + targetType: handler.getTargetType()!.identifier, targetEVMAddress: targetEVMAddressHex, isEnabled: handler.isEnabled() ) @@ -317,6 +424,7 @@ contract FlowEVMBridgeConfig { self.onboardFee = 0.0 self.baseFee = 0.0 self.defaultDecimals = 18 + self.gasLimit = 15_000_000 self.paused = false // Although $FLOW does not have ERC20 address, we associate the the Vault with the EVM address from which @@ -327,7 +435,7 @@ contract FlowEVMBridgeConfig { ) let flowVaultType = Type<@FlowToken.Vault>() let flowOriginationAddressHex = flowOriginationAddress.toString() - self.typeToEVMAddress = { flowVaultType: flowOriginationAddress } + self.registeredTypes = { flowVaultType: TypeEVMAssociation(associated: flowOriginationAddress) } self.evmAddressHexToType = { flowOriginationAddressHex: flowVaultType } self.typeToTokenHandlers <- {} diff --git a/cadence/contracts/bridge/FlowEVMBridgeNFTEscrow.cdc b/cadence/contracts/bridge/FlowEVMBridgeNFTEscrow.cdc index ac4aef33..f8de4b72 100644 --- a/cadence/contracts/bridge/FlowEVMBridgeNFTEscrow.cdc +++ b/cadence/contracts/bridge/FlowEVMBridgeNFTEscrow.cdc @@ -90,7 +90,7 @@ access(all) contract FlowEVMBridgeNFTEscrow { let lockerPath = FlowEVMBridgeUtils.deriveEscrowStoragePath(fromType: forType) ?? panic("Problem deriving locker path") if self.account.storage.type(at: lockerPath) != nil { - return + panic("Locker already stored at storage path: ".concat(lockerPath.toString())) } let locker <- create Locker(name: name, symbol: symbol, lockedType: forType, erc721Address: erc721Address) diff --git a/cadence/contracts/bridge/FlowEVMBridgeUtils.cdc b/cadence/contracts/bridge/FlowEVMBridgeUtils.cdc index 508823e5..bcb24167 100644 --- a/cadence/contracts/bridge/FlowEVMBridgeUtils.cdc +++ b/cadence/contracts/bridge/FlowEVMBridgeUtils.cdc @@ -126,8 +126,7 @@ contract FlowEVMBridgeUtils { return true } - /// Returns whether the given address has opted out of enabling bridging for its defined assets. Reverts on EVM call - /// failure. + /// Returns whether the given address has opted out of enabling bridging for its defined assets /// /// @param address: The EVM contract address to check /// @@ -139,7 +138,7 @@ contract FlowEVMBridgeUtils { signature: "allowsBridging()", targetEVMAddress: address, args: [], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) // Contract doesn't support the method - proceed permissionlessly @@ -190,7 +189,7 @@ contract FlowEVMBridgeUtils { signature: "isBridgeDeployed(address)", targetEVMAddress: self.bridgeFactoryEVMAddress, args: [evmContractAddress], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) @@ -213,7 +212,7 @@ contract FlowEVMBridgeUtils { signature: "isERC721(address)", targetEVMAddress: self.bridgeFactoryEVMAddress, args: [evmContractAddress], - gasLimit: 100000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) @@ -224,7 +223,8 @@ contract FlowEVMBridgeUtils { return decodedResult[0] as! Bool } - /// Identifies if an asset is ERC20 + /// Identifies if an asset is ERC20 as far as is possible without true EVM type introspection. Reverts on EVM call + /// failure. /// /// @param evmContractAddress: The EVM contract address to check /// @@ -236,7 +236,7 @@ contract FlowEVMBridgeUtils { signature: "isERC20(address)", targetEVMAddress: self.bridgeFactoryEVMAddress, args: [evmContractAddress], - gasLimit: 100000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) @@ -259,7 +259,7 @@ contract FlowEVMBridgeUtils { signature: "isValidAsset(address)", targetEVMAddress: self.bridgeFactoryEVMAddress, args: [evmContractAddress], - gasLimit: 100000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) let decodedResult = EVM.decodeABI(types: [Type()], data: callResult.data) @@ -396,8 +396,12 @@ contract FlowEVMBridgeUtils { // Derive the contract name from the ERC721 contract cadenceContractName = self.deriveBridgedNFTContractName(from: evmContractAddress) } else { - // Otherwise, treat as ERC20. Upstream bridge calls would have confirmed the contract is either ERC20 or - // ERC721 + // Otherwise, treat as ERC20 + let isERC20 = self.isERC20(evmContractAddress: evmContractAddress) + assert( + isERC20, + message: "Contract ".concat(evmContractAddress.toString()).concat("defines an asset that is not currently supported by the bridge") + ) cadenceContractName = self.deriveBridgedTokenContractName(from: evmContractAddress) decimals = self.getTokenDecimals(evmContractAddress: evmContractAddress) } @@ -430,7 +434,7 @@ contract FlowEVMBridgeUtils { signature: "name()", targetEVMAddress: evmContractAddress, args: [], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) @@ -454,7 +458,7 @@ contract FlowEVMBridgeUtils { signature: "symbol()", targetEVMAddress: evmContractAddress, args: [], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(callResult.status == EVM.Status.successful, message: "Call for EVM asset symbol failed") @@ -477,7 +481,7 @@ contract FlowEVMBridgeUtils { signature: "tokenURI(uint256)", targetEVMAddress: evmContractAddress, args: [id], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) @@ -488,7 +492,7 @@ contract FlowEVMBridgeUtils { return decodedResult[0] as! String } - /// Retrieves the contract URI from the given EVM contract address. Reverts on EVM call failure. + /// Retrieves the contract URI from the given EVM contract address. Returns nil on EVM call failure. /// /// @param evmContractAddress: The EVM contract address to retrieve the contractURI from /// @@ -500,7 +504,7 @@ contract FlowEVMBridgeUtils { signature: "contractURI()", targetEVMAddress: evmContractAddress, args: [], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) if callResult.status != EVM.Status.successful { @@ -522,7 +526,7 @@ contract FlowEVMBridgeUtils { signature: "decimals()", targetEVMAddress: evmContractAddress, args: [], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) @@ -562,7 +566,7 @@ contract FlowEVMBridgeUtils { let callResult = self.borrowCOA().call( to: evmContractAddress, data: calldata, - gasLimit: 12000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: EVM.Balance(attoflow: 0) ) assert(callResult.status == EVM.Status.successful, message: "Call to ERC721.ownerOf(uint256) failed") @@ -588,7 +592,7 @@ contract FlowEVMBridgeUtils { signature: "getApproved(uint256)", targetEVMAddress: evmContractAddress, args: [ofNFT], - gasLimit: 12000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(callResult.status == EVM.Status.successful, message: "Call to ERC721.getApproved(uint256) failed") @@ -617,7 +621,7 @@ contract FlowEVMBridgeUtils { signature: "exists(uint256)", targetEVMAddress: erc721Address, args: [id], - gasLimit: 12000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ).data, ) @@ -639,7 +643,7 @@ contract FlowEVMBridgeUtils { signature: "balanceOf(address)", targetEVMAddress: evmContractAddress, args: [owner], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(callResult.status == EVM.Status.successful, message: "Call to ERC20.balanceOf(address) failed") @@ -674,7 +678,7 @@ contract FlowEVMBridgeUtils { signature: "totalSupply()", targetEVMAddress: evmContractAddress, args: [], - gasLimit: 60000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(callResult.status == EVM.Status.successful, message: "Call to ERC20.totalSupply() failed") @@ -684,7 +688,8 @@ contract FlowEVMBridgeUtils { } /// Converts the given amount of ERC20 tokens to the equivalent amount in FLOW tokens based on the ERC20s decimals - /// value. Reverts on EVM call failure. + /// value. Note that may be some loss of decimal precision as UFix64 supports precision for 8 decimal places. + /// Reverts on EVM call failure. /// /// @param amount: The amount of ERC20 tokens to convert /// @param erc20Address: The EVM contract address of the ERC20 token @@ -700,7 +705,8 @@ contract FlowEVMBridgeUtils { } /// Converts the given amount of Cadence fungible tokens to the equivalent amount in ERC20 tokens based on the - /// ERC20s decimals. Reverts on EVM call failure. + /// ERC20s decimals. Note that there may be some loss of decimal precision as UFix64 supports precision for 8 + /// decimal places. Reverts on EVM call failure. /// /// @param amount: The amount of Cadence fungible tokens to convert /// @param erc20Address: The EVM contract address of the ERC20 token @@ -1025,8 +1031,8 @@ contract FlowEVMBridgeUtils { /// Enables other bridge contracts to orchestrate bridge operations from contract-owned COA /// access(account) - view fun borrowCOA(): auth(EVM.Owner) &EVM.CadenceOwnedAccount { - return self.account.storage.borrow( + view fun borrowCOA(): auth(EVM.Call) &EVM.CadenceOwnedAccount { + return self.account.storage.borrow( from: FlowEVMBridgeConfig.coaStoragePath ) ?? panic("Could not borrow COA reference") } @@ -1068,7 +1074,7 @@ contract FlowEVMBridgeUtils { signature: "safeTransferFrom(address,address,uint256)", targetEVMAddress: erc721Address, args: [bridgeCOAAddress, to, id], - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert( @@ -1093,7 +1099,7 @@ contract FlowEVMBridgeUtils { signature: "safeMint(address,uint256,string)", targetEVMAddress: erc721Address, args: [to, id, uri], - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(mintResult.status == EVM.Status.successful, message: "Mint to bridge recipient failed") @@ -1114,7 +1120,7 @@ contract FlowEVMBridgeUtils { signature: "updateTokenURI(uint256,string)", targetEVMAddress: erc721Address, args: [id, uri], - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(updateResult.status == EVM.Status.successful, message: "URI update failed") @@ -1154,7 +1160,7 @@ contract FlowEVMBridgeUtils { signature: "mint(address,uint256)", targetEVMAddress: erc20Address, args: [to, amount], - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(mintResult.status == EVM.Status.successful, message: "Mint to bridge ERC20 contract failed") @@ -1184,7 +1190,7 @@ contract FlowEVMBridgeUtils { signature: "transfer(address,uint256)", targetEVMAddress: erc20Address, args: [to, amount], - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(transferResult.status == EVM.Status.successful, message: "transfer call to ERC20 contract failed") @@ -1263,7 +1269,7 @@ contract FlowEVMBridgeUtils { signature: "deploy(string,string,string,string,string,string)", targetEVMAddress: self.bridgeFactoryEVMAddress, args: [deployerTag, name, symbol, cadenceAddress.toString(), flowIdentifier, contractURI], - gasLimit: 15000000, + gasLimit: FlowEVMBridgeConfig.gasLimit, value: 0.0 ) assert(deployResult.status == EVM.Status.successful, message: "EVM Token contract deployment failed") diff --git a/cadence/contracts/bridge/interfaces/FlowEVMBridgeHandlerInterfaces.cdc b/cadence/contracts/bridge/interfaces/FlowEVMBridgeHandlerInterfaces.cdc index 941d1229..9cf21aa7 100644 --- a/cadence/contracts/bridge/interfaces/FlowEVMBridgeHandlerInterfaces.cdc +++ b/cadence/contracts/bridge/interfaces/FlowEVMBridgeHandlerInterfaces.cdc @@ -27,7 +27,8 @@ access(all) contract FlowEVMBridgeHandlerInterfaces { **************/ /// Event emitted when a handler is enabled between a Cadence type and an EVM address - access(all) event HandlerEnabled(handlerType: Type, targetType: Type, targetEVMAddress: EVM.EVMAddress) + access(all) event HandlerEnabled(handlerType: String, handlerUUID: UInt64, targetType: String, targetEVMAddress: String) + access(all) event MinterSet(handlerType: String, targetType: String?, targetEVMAddress: String?, minterType: String, minterUUID: UInt64) /**************** Constructs @@ -70,6 +71,14 @@ access(all) contract FlowEVMBridgeHandlerInterfaces { access(Admin) fun setMinter(_ minter: @{FlowEVMBridgeHandlerInterfaces.TokenMinter}) { pre { self.getExpectedMinterType() == minter.getType(): "Minter is not of the expected type" + minter.getMintedType() == self.getTargetType(): "Minter does not mint the target type" + emit MinterSet( + handlerType: self.getType().identifier, + targetType: self.getTargetType()?.identifier, + targetEVMAddress: self.getTargetEVMAddress()?.toString(), + minterType: minter.getType().identifier, + minterUUID: minter.uuid + ) } } /// Enables the Handler to fulfill bridge requests for the configured targets. If implementers utilize a minter, @@ -83,9 +92,10 @@ access(all) contract FlowEVMBridgeHandlerInterfaces { post { self.isEnabled(): "Problem enabling Handler" emit HandlerEnabled( - handlerType: self.getType(), - targetType: self.getTargetType()!, - targetEVMAddress: self.getTargetEVMAddress()! + handlerType: self.getType().identifier, + handlerUUID: self.uuid, + targetType: self.getTargetType()!.identifier, + targetEVMAddress: self.getTargetEVMAddress()!.toString() ) } } @@ -96,7 +106,7 @@ access(all) contract FlowEVMBridgeHandlerInterfaces { access(all) resource interface TokenMinter { /// Returns the Cadence type minted by this resource access(all) view fun getMintedType(): Type - /// Mints the specified amount of the Cadence + /// Mints the specified amount of tokens access(Mint) fun mint(amount: UFix64): @{FungibleToken.Vault} { pre { amount > 0.0: "Amount must be greater than 0" diff --git a/cadence/contracts/bridge/interfaces/IEVMBridgeNFTMinter.cdc b/cadence/contracts/bridge/interfaces/IEVMBridgeNFTMinter.cdc index 802c7e10..b88b18cd 100644 --- a/cadence/contracts/bridge/interfaces/IEVMBridgeNFTMinter.cdc +++ b/cadence/contracts/bridge/interfaces/IEVMBridgeNFTMinter.cdc @@ -5,7 +5,7 @@ import "NonFungibleToken" access(all) contract interface IEVMBridgeNFTMinter { - access(all) event Minted(type: Type, id: UInt64, evmID: UInt256, tokenURI: String, minter: Address) + access(all) event Minted(type: Type, id: UInt64, uuid: UInt64, evmID: UInt256, tokenURI: String, minter: Address) access(all) event TokenURIUpdated(evmID: UInt256, newURI: String, updater: Address) /// Account-only method to mint an NFT @@ -16,6 +16,7 @@ contract interface IEVMBridgeNFTMinter { emit Minted( type: result.getType(), id: result.id, + uuid: result.uuid, evmID: id, tokenURI: tokenURI, minter: self.account.address diff --git a/cadence/contracts/bridge/interfaces/IEVMBridgeTokenMinter.cdc b/cadence/contracts/bridge/interfaces/IEVMBridgeTokenMinter.cdc index 90409063..ed3640ee 100644 --- a/cadence/contracts/bridge/interfaces/IEVMBridgeTokenMinter.cdc +++ b/cadence/contracts/bridge/interfaces/IEVMBridgeTokenMinter.cdc @@ -6,7 +6,7 @@ access(all) contract interface IEVMBridgeTokenMinter { /// Emitted whenever tokens are minted, identifying the type, amount, and minter - access(all) event Minted(type: Type, amount: UFix64, minter: Address) + access(all) event Minted(type: Type, amount: UFix64, mintedUUID: UInt64, minter: Address) /// Account-only method to mint a fungible token of the specified amount. /// @@ -14,7 +14,7 @@ contract interface IEVMBridgeTokenMinter { fun mintTokens(amount: UFix64): @{FungibleToken.Vault} { post { result.balance == amount: "Result does not contained specified amount" - emit Minted(type: result.getType(), amount: amount, minter: self.account.address) + emit Minted(type: result.getType(), amount: amount, mintedUUID: result.uuid, minter: self.account.address) } } } diff --git a/cadence/contracts/bridge/interfaces/IFlowEVMNFTBridge.cdc b/cadence/contracts/bridge/interfaces/IFlowEVMNFTBridge.cdc index 7cbad77c..9a925b0e 100644 --- a/cadence/contracts/bridge/interfaces/IFlowEVMNFTBridge.cdc +++ b/cadence/contracts/bridge/interfaces/IFlowEVMNFTBridge.cdc @@ -15,8 +15,9 @@ access(all) contract interface IFlowEVMNFTBridge { /// Broadcasts an NFT was bridged from Cadence to EVM access(all) event BridgedNFTToEVM( - type: Type, + type: String, id: UInt64, + uuid: UInt64, evmID: UInt256, to: String, evmContractAddress: String, @@ -25,8 +26,9 @@ access(all) contract interface IFlowEVMNFTBridge { /// Broadcasts an NFT was bridged from EVM to Cadence access(all) event BridgedNFTFromEVM( - type: Type, + type: String, id: UInt64, + uuid: UInt64, evmID: UInt256, caller: String, evmContractAddress: String, @@ -65,8 +67,9 @@ access(all) contract interface IFlowEVMNFTBridge { ) { pre { emit BridgedNFTToEVM( - type: token.getType(), + type: token.getType().identifier, id: token.id, + uuid: token.uuid, evmID: CrossVMNFT.getEVMID(from: &token as &{NonFungibleToken.NFT}) ?? UInt256(token.id), to: to.toString(), evmContractAddress: self.getAssociatedEVMAddress(with: token.getType())?.toString() @@ -99,8 +102,9 @@ access(all) contract interface IFlowEVMNFTBridge { ): @{NonFungibleToken.NFT} { post { emit BridgedNFTFromEVM( - type: result.getType(), + type: result.getType().identifier, id: result.id, + uuid: result.uuid, evmID: id, caller: owner.toString(), evmContractAddress: self.getAssociatedEVMAddress(with: result.getType())?.toString() diff --git a/cadence/contracts/bridge/interfaces/IFlowEVMTokenBridge.cdc b/cadence/contracts/bridge/interfaces/IFlowEVMTokenBridge.cdc index 4397c0b4..e6b20971 100644 --- a/cadence/contracts/bridge/interfaces/IFlowEVMTokenBridge.cdc +++ b/cadence/contracts/bridge/interfaces/IFlowEVMTokenBridge.cdc @@ -12,8 +12,9 @@ access(all) contract interface IFlowEVMTokenBridge { /// Broadcasts fungible tokens were bridged from Cadence to EVM access(all) event BridgedTokensToEVM( - type: Type, + type: String, amount: UFix64, + bridgedUUID: UInt64, to: String, evmContractAddress: String, bridgeAddress: Address @@ -21,8 +22,9 @@ access(all) contract interface IFlowEVMTokenBridge { /// Broadcasts fungible tokens were bridged from EVM to Cadence access(all) event BridgedTokensFromEVM( - type: Type, + type: String, amount: UInt256, + bridgedUUID: UInt64, caller: String, evmContractAddress: String, bridgeAddress: Address @@ -60,8 +62,9 @@ access(all) contract interface IFlowEVMTokenBridge { ) { pre { emit BridgedTokensToEVM( - type: vault.getType(), + type: vault.getType().identifier, amount: vault.balance, + bridgedUUID: vault.uuid, to: to.toString(), evmContractAddress: self.getAssociatedEVMAddress(with: vault.getType())?.toString() ?? panic("Could not find EVM Contract address associated with provided NFT"), @@ -93,8 +96,9 @@ access(all) contract interface IFlowEVMTokenBridge { ): @{FungibleToken.Vault} { post { emit BridgedTokensFromEVM( - type: result.getType(), + type: result.getType().identifier, amount: amount, + bridgedUUID: result.uuid, caller: owner.toString(), evmContractAddress: self.getAssociatedEVMAddress(with: result.getType())?.toString() ?? panic("Could not find EVM Contract address associated with provided Vault"), diff --git a/cadence/contracts/standards/EVM.cdc b/cadence/contracts/standards/EVM.cdc index 87e92adc..aa347311 100644 --- a/cadence/contracts/standards/EVM.cdc +++ b/cadence/contracts/standards/EVM.cdc @@ -50,6 +50,8 @@ contract EVM { payload: String, // code indicating a specific validation (201-300) or execution (301-400) error errorCode: UInt16, + // a human-readable message about the error (if any) + errorMessage: String, // the amount of gas transaction used gasConsumed: UInt64, // if transaction was a deployment contains a newly deployed contract address @@ -59,23 +61,30 @@ contract EVM { // block height in which transaction was inclued blockHeight: UInt64, // block hash in which transaction was included - blockHash: String + blockHash: String, + /// captures the hex encoded data that is returned from + /// the evm. For contract deployments + /// it returns the code deployed to + /// the address provided in the contractAddress field. + /// in case of revert, the smart contract custom error message + /// is also returned here (see EIP-140 for more details). + returnedData: String ) access(all) - event CadenceOwnedAccountCreated(addressBytes: [UInt8; 20]) + event CadenceOwnedAccountCreated(address: String) /// FLOWTokensDeposited is emitted when FLOW tokens is bridged /// into the EVM environment. Note that this event is not emitted /// for transfer of flow tokens between two EVM addresses. access(all) - event FLOWTokensDeposited(addressBytes: [UInt8; 20], amount: UFix64) + event FLOWTokensDeposited(address: String, amount: UFix64) /// FLOWTokensWithdrawn is emitted when FLOW tokens are bridged /// out of the EVM environment. Note that this event is not emitted /// for transfer of flow tokens between two EVM addresses. access(all) - event FLOWTokensWithdrawn(addressBytes: [UInt8; 20], amount: UFix64) + event FLOWTokensWithdrawn(address: String, amount: UFix64) /// BridgeAccessorUpdated is emitted when the BridgeAccessor Capability /// is updated in the stored BridgeRouter along with identifying @@ -147,7 +156,7 @@ contract EVM { from: <-from, to: self.bytes ) - emit FLOWTokensDeposited(addressBytes: self.bytes, amount: amount) + emit FLOWTokensDeposited(address: self.toString(), amount: amount) } /// Serializes the address to a hex string without the 0x prefix @@ -258,6 +267,10 @@ contract EVM { access(all) let errorCode: UInt64 + /// error message + access(all) + let errorMessage: String + /// returns the amount of gas metered during /// evm execution access(all) @@ -267,6 +280,8 @@ contract EVM { /// the evm for the call. For coa.deploy /// calls it returns the code deployed to /// the address provided in the contractAddress field. + /// in case of revert, the smart contract custom error message + /// is also returned here (see EIP-140 for more details). access(all) let data: [UInt8] @@ -279,12 +294,14 @@ contract EVM { init( status: Status, errorCode: UInt64, + errorMessage: String, gasUsed: UInt64, data: [UInt8], contractAddress: [UInt8; 20]? ) { self.status = status self.errorCode = errorCode + self.errorMessage = errorMessage self.gasUsed = gasUsed self.data = data @@ -366,7 +383,7 @@ contract EVM { from: self.addressBytes, amount: balance.attoflow ) as! @FlowToken.Vault - emit FLOWTokensWithdrawn(addressBytes: self.addressBytes, amount: balance.inFLOW()) + emit FLOWTokensWithdrawn(address: self.address().toString(), amount: balance.inFLOW()) return <-vault } @@ -465,7 +482,8 @@ contract EVM { let acc <-create CadenceOwnedAccount() let addr = InternalEVM.createCadenceOwnedAccount(uuid: acc.uuid) acc.initAddress(addressBytes: addr) - emit CadenceOwnedAccountCreated(addressBytes: addr) + + emit CadenceOwnedAccountCreated(address: acc.address().toString()) return <-acc } @@ -608,8 +626,20 @@ contract EVM { // constructing key list let keyList = Crypto.KeyList() for signature in signatureSet { - let key = acc.keys.get(keyIndex: signature.keyIndex)! - assert(!key.isRevoked, message: "revoked key is used") + let keyRef = acc.keys.get(keyIndex: signature.keyIndex) + if keyRef == nil { + return ValidationResult( + isValid: false, + problem: "invalid key index" + ) + } + let key = keyRef! + if key.isRevoked { + return ValidationResult( + isValid: false, + problem: "account key is revoked" + ) + } keyList.add( key.publicKey, hashAlgorithm: key.hashAlgorithm, @@ -753,4 +783,4 @@ contract EVM { ?.borrowBridgeAccessor() ?? panic("Could not borrow reference to the EVM bridge") } -} +} \ No newline at end of file diff --git a/cadence/contracts/templates/emulator/EVMBridgedNFTTemplate.cdc b/cadence/contracts/templates/emulator/EVMBridgedNFTTemplate.cdc index 8acafa44..3a3ff9d4 100644 --- a/cadence/contracts/templates/emulator/EVMBridgedNFTTemplate.cdc +++ b/cadence/contracts/templates/emulator/EVMBridgedNFTTemplate.cdc @@ -204,9 +204,15 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi return self.evmIDToFlowID.keys } - /// Returns the Cadence NFT.id for the given EVM NFT ID if + /// Returns the Cadence NFT.id for the given EVM NFT ID if it exists in the collection access(all) view fun getCadenceID(from evmID: UInt256): UInt64? { - return self.evmIDToFlowID[evmID] ?? UInt64(evmID) + if self.evmIDToFlowID[evmID] != nil { + return self.evmIDToFlowID[evmID] + } else if evmID < UInt256(UInt64.max) && self.borrowNFT(UInt64(evmID)) != nil { + return UInt64(evmID) + } else { + return nil + } } /// Returns the EVM NFT ID associated with the Cadence NFT ID. The goal is to retrieve the ERC721 ID value. @@ -309,9 +315,9 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi mediaType: "image/svg+xml" ) return MetadataViews.NFTCollectionDisplay( - name: "The FlowVM Bridged NFT Collection", + name: self.name, description: "This collection was bridged from Flow EVM.", - externalURL: MetadataViews.ExternalURL("https://bridge.flow.com/nft"), + externalURL: MetadataViews.ExternalURL("https://port.flow.com/"), squareImage: media, bannerImage: media, socials: {} diff --git a/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc b/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc index 0506affb..82934ae7 100644 --- a/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc +++ b/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc @@ -204,9 +204,15 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi return self.evmIDToFlowID.keys } - /// Returns the Cadence NFT.id for the given EVM NFT ID if + /// Returns the Cadence NFT.id for the given EVM NFT ID if it exists in the collection access(all) view fun getCadenceID(from evmID: UInt256): UInt64? { - return self.evmIDToFlowID[evmID] ?? UInt64(evmID) + if self.evmIDToFlowID[evmID] != nil { + return self.evmIDToFlowID[evmID] + } else if evmID < UInt256(UInt64.max) && self.borrowNFT(UInt64(evmID)) != nil { + return UInt64(evmID) + } else { + return nil + } } /// Returns the EVM NFT ID associated with the Cadence NFT ID. The goal is to retrieve the ERC721 ID value. @@ -309,9 +315,9 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi mediaType: "image/svg+xml" ) return MetadataViews.NFTCollectionDisplay( - name: "The FlowVM Bridged NFT Collection", + name: self.name, description: "This collection was bridged from Flow EVM.", - externalURL: MetadataViews.ExternalURL("https://bridge.flow.com/nft"), + externalURL: MetadataViews.ExternalURL("https://port.flow.com/"), squareImage: media, bannerImage: media, socials: {} diff --git a/cadence/contracts/templates/testing/EVMBridgedNFTTemplate.cdc b/cadence/contracts/templates/testing/EVMBridgedNFTTemplate.cdc index fdac4cf7..e1485370 100644 --- a/cadence/contracts/templates/testing/EVMBridgedNFTTemplate.cdc +++ b/cadence/contracts/templates/testing/EVMBridgedNFTTemplate.cdc @@ -204,9 +204,15 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi return self.evmIDToFlowID.keys } - /// Returns the Cadence NFT.id for the given EVM NFT ID if + /// Returns the Cadence NFT.id for the given EVM NFT ID if it exists in the collection access(all) view fun getCadenceID(from evmID: UInt256): UInt64? { - return self.evmIDToFlowID[evmID] ?? UInt64(evmID) + if self.evmIDToFlowID[evmID] != nil { + return self.evmIDToFlowID[evmID] + } else if evmID < UInt256(UInt64.max) && self.borrowNFT(UInt64(evmID)) != nil { + return UInt64(evmID) + } else { + return nil + } } /// Returns the EVM NFT ID associated with the Cadence NFT ID. The goal is to retrieve the ERC721 ID value. @@ -309,9 +315,9 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi mediaType: "image/svg+xml" ) return MetadataViews.NFTCollectionDisplay( - name: "The FlowVM Bridged NFT Collection", + name: self.name, description: "This collection was bridged from Flow EVM.", - externalURL: MetadataViews.ExternalURL("https://bridge.flow.com/nft"), + externalURL: MetadataViews.ExternalURL("https://port.flow.com/"), squareImage: media, bannerImage: media, socials: {} diff --git a/cadence/contracts/templates/testnet/EVMBridgedNFTTemplate.cdc b/cadence/contracts/templates/testnet/EVMBridgedNFTTemplate.cdc index f90e68be..52e6c0a3 100644 --- a/cadence/contracts/templates/testnet/EVMBridgedNFTTemplate.cdc +++ b/cadence/contracts/templates/testnet/EVMBridgedNFTTemplate.cdc @@ -204,9 +204,15 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi return self.evmIDToFlowID.keys } - /// Returns the Cadence NFT.id for the given EVM NFT ID if + /// Returns the Cadence NFT.id for the given EVM NFT ID if it exists in the collection access(all) view fun getCadenceID(from evmID: UInt256): UInt64? { - return self.evmIDToFlowID[evmID] ?? UInt64(evmID) + if self.evmIDToFlowID[evmID] != nil { + return self.evmIDToFlowID[evmID] + } else if evmID < UInt256(UInt64.max) && self.borrowNFT(UInt64(evmID)) != nil { + return UInt64(evmID) + } else { + return nil + } } /// Returns the EVM NFT ID associated with the Cadence NFT ID. The goal is to retrieve the ERC721 ID value. @@ -309,9 +315,9 @@ access(all) contract {{CONTRACT_NAME}} : ICrossVM, IEVMBridgeNFTMinter, NonFungi mediaType: "image/svg+xml" ) return MetadataViews.NFTCollectionDisplay( - name: "The FlowVM Bridged NFT Collection", + name: self.name, description: "This collection was bridged from Flow EVM.", - externalURL: MetadataViews.ExternalURL("https://bridge.flow.com/nft"), + externalURL: MetadataViews.ExternalURL("https://port.flow.com/"), squareImage: media, bannerImage: media, socials: {} diff --git a/cadence/contracts/utils/Serialize.cdc b/cadence/contracts/utils/Serialize.cdc index 19347bc1..0e2dc9ef 100644 --- a/cadence/contracts/utils/Serialize.cdc +++ b/cadence/contracts/utils/Serialize.cdc @@ -83,7 +83,6 @@ contract Serialize { default: return nil } - } /// Returns a serialized representation of the given array or nil if the value is not serializable @@ -91,12 +90,18 @@ contract Serialize { access(all) fun arrayToJSONString(_ arr: [AnyStruct]): String? { var serializedArr = "[" + let arrLength = arr.length for i, element in arr { let serializedElement = self.tryToJSONString(element) if serializedElement == nil { - return nil + if i == arrLength - 1 && serializedArr.length > 1 && serializedArr[serializedArr.length - 2] == "," { + // Remove trailing comma as this element could not be serialized + serializedArr = serializedArr.slice(from: 0, upTo: serializedArr.length - 2) + } + continue } serializedArr = serializedArr.concat(serializedElement!) + // Add a comma if there are more elements to serialize if i < arr.length - 1 { serializedArr = serializedArr.concat(", ") } @@ -116,10 +121,15 @@ contract Serialize { } } var serializedDict = "{" + let dictLength = dict.length for i, key in dict.keys { let serializedValue = self.tryToJSONString(dict[key]!) if serializedValue == nil { - return nil + if i == dictLength - 1 && serializedDict.length > 1 && serializedDict[serializedDict.length - 2] == "," { + // Remove trailing comma as this element could not be serialized + serializedDict = serializedDict.slice(from: 0, upTo: serializedDict.length - 2) + } + continue } serializedDict = serializedDict.concat(self.tryToJSONString(key)!).concat(": ").concat(serializedValue!) if i < dict.length - 1 { diff --git a/cadence/contracts/utils/SerializeMetadata.cdc b/cadence/contracts/utils/SerializeMetadata.cdc index 4cdba1de..3cff96de 100644 --- a/cadence/contracts/utils/SerializeMetadata.cdc +++ b/cadence/contracts/utils/SerializeMetadata.cdc @@ -118,9 +118,14 @@ access(all) contract SerializeMetadata { fun serializeNFTTraitsAsAttributes(_ traits: MetadataViews.Traits): String { // Serialize each trait as an attribute, building the serialized JSON compatible string var serializedResult = "\"attributes\": [" - for i, trait in traits!.traits { + let traitsLength = traits.traits.length + for i, trait in traits.traits { let value = Serialize.tryToJSONString(trait.value) if value == nil { + // Remove trailing comma if last trait is not serializable + if i == traitsLength - 1 && serializedResult[serializedResult.length - 1] == "," { + serializedResult = serializedResult.slice(from: 0, upTo: serializedResult.length - 1) + } continue } serializedResult = serializedResult.concat("{") @@ -173,12 +178,18 @@ access(all) contract SerializeMetadata { access(all) view fun deriveSymbol(fromString: String): String { let defaultLen = 4 let len = fromString.length < defaultLen ? fromString.length : defaultLen - return self.toUpper(fromString, upTo: len) + return self.toUpperAlphaNumerical(fromString, upTo: len) } - /// Returns the uppercase alphanumeric version of a given string. + /// Returns the uppercase alphanumeric version of a given string. If upTo is nil or exceeds the length of the string, + /// the entire string is converted to uppercase. /// - access(self) view fun toUpper(_ str: String, upTo: Int?): String { + /// @param str: The string to convert to uppercase + /// @param upTo: The maximum number of characters to convert to uppercase + /// + /// @returns: The uppercase version of the given string + /// + access(all) view fun toUpperAlphaNumerical(_ str: String, upTo: Int?): String { let len = upTo ?? str.length var upper: String = "" for char in str { @@ -189,12 +200,19 @@ access(all) contract SerializeMetadata { if bytes.length != 1 { continue } - if bytes[0] >= 97 && bytes[0] <= 122 { - let upperChar = String.fromUTF8([bytes[0] - UInt8(32)])! + let byte = bytes[0] + if byte >= 97 && byte <= 122 { + // Convert lower case to upper case + let upperChar = String.fromUTF8([byte - UInt8(32)])! upper = upper.concat(upperChar) - } else if bytes[0] >= 65 && bytes[0] <= 90 { + } else if byte >= 65 && byte <= 90 { + // Keep upper case upper = upper.concat(char.toString()) + } else if byte >= 48 && byte <= 57 { + // Keep numbers + upper = upper.concat(String.fromCharacters([char])) } else { + // Skip non-alphanumeric characters continue } } diff --git a/cadence/scripts/bridge/is_type_paused.cdc b/cadence/scripts/bridge/is_type_paused.cdc new file mode 100644 index 00000000..5aa86c20 --- /dev/null +++ b/cadence/scripts/bridge/is_type_paused.cdc @@ -0,0 +1,8 @@ +import "FlowEVMBridgeConfig" + +access(all) +fun main(typeIdentifier: String): Bool? { + return FlowEVMBridgeConfig.isTypePaused( + CompositeType(typeIdentifier) ?? panic("Invalid type identifier provided: ".concat(typeIdentifier)) + ) +} diff --git a/cadence/tests/flow_evm_bridge_tests.cdc b/cadence/tests/flow_evm_bridge_tests.cdc index 7a3a7c69..992b60e5 100644 --- a/cadence/tests/flow_evm_bridge_tests.cdc +++ b/cadence/tests/flow_evm_bridge_tests.cdc @@ -337,9 +337,8 @@ fun testDeployERC721Succeeds() { // Get ERC721 & ERC20 deployed contract addresses let evts = Test.eventsOfType(Type()) - Test.assertEqual(15, evts.length) - erc721AddressHex = getEVMAddressHexFromEvents(evts, idx: 14) - + Test.assertEqual(21, evts.length) + erc721AddressHex = getEVMAddressHexFromEvents(evts, idx: 20) } access(all) @@ -353,8 +352,8 @@ fun testDeployERC20Succeeds() { // Get ERC721 & ERC20 deployed contract addresses let evts = Test.eventsOfType(Type()) - Test.assertEqual(16, evts.length) - erc20AddressHex = getEVMAddressHexFromEvents(evts, idx: 15) + Test.assertEqual(22, evts.length) + erc20AddressHex = getEVMAddressHexFromEvents(evts, idx: 21) } @@ -758,7 +757,6 @@ access(all) fun testOnboardERC721ByEVMAddressSucceeds() { snapshot = getCurrentBlockHeight() - var requiresOnboarding = evmAddressRequiresOnboarding(erc721AddressHex) ?? panic("Problem getting onboarding requirement") Test.assertEqual(true, requiresOnboarding) @@ -990,6 +988,54 @@ fun testBridgeEVMNativeNFTFromEVMSucceeds() { Test.assertEqual(erc721ID, evmID) } + +access(all) +fun testPauseByTypeSucceeds() { + // Pause the bridge + let pauseResult = executeTransaction( + "../transactions/bridge/admin/pause/update_type_pause_status.cdc", + [exampleNFTIdentifier, true], + bridgeAccount + ) + Test.expect(pauseResult, Test.beSucceeded()) + var isPausedResult = executeScript( + "../scripts/bridge/is_type_paused.cdc", + [exampleNFTIdentifier] + ) + Test.expect(isPausedResult, Test.beSucceeded()) + Test.assertEqual(true, isPausedResult.returnValue as! Bool? ?? panic("Problem getting pause status")) + + var aliceOwnedIDs = getIDs(ownerAddr: alice.address, storagePathIdentifier: "cadenceExampleNFTCollection") + Test.assertEqual(1, aliceOwnedIDs.length) + + var aliceCOAAddressHex = getCOAAddressHex(atFlowAddress: alice.address) + + // Execute bridge to EVM - should fail after pausing + bridgeNFTToEVM( + signer: alice, + contractAddr: exampleNFTAccount.address, + contractName: "ExampleNFT", + nftID: aliceOwnedIDs[0], + bridgeAccountAddr: bridgeAccount.address, + beFailed: true + ) + + // Unpause bridging + let unpauseResult = executeTransaction( + "../transactions/bridge/admin/pause/update_type_pause_status.cdc", + [exampleNFTIdentifier, false], + bridgeAccount + ) + Test.expect(unpauseResult, Test.beSucceeded()) + + isPausedResult = executeScript( + "../scripts/bridge/is_type_paused.cdc", + [exampleNFTIdentifier] + ) + Test.expect(isPausedResult, Test.beSucceeded()) + Test.assertEqual(false, isPausedResult.returnValue as! Bool? ?? panic("Problem getting pause status")) +} + access(all) fun testBridgeEVMNativeNFTToEVMSucceeds() { diff --git a/cadence/tests/scripts/get_block_height.cdc b/cadence/tests/scripts/get_block_height.cdc deleted file mode 100644 index cd95b66d..00000000 --- a/cadence/tests/scripts/get_block_height.cdc +++ /dev/null @@ -1,4 +0,0 @@ -access(all) -fun main(): UInt64 { - return getCurrentBlock().height -} \ No newline at end of file diff --git a/cadence/tests/scripts/is_bridge_router_configured.cdc b/cadence/tests/scripts/is_bridge_router_configured.cdc deleted file mode 100644 index eed254f1..00000000 --- a/cadence/tests/scripts/is_bridge_router_configured.cdc +++ /dev/null @@ -1,14 +0,0 @@ -import "EVMBridgeRouter" - -access(all) -fun main(): Bool { - let serviceAccount = getAuthAccount(0x0000000000000001) - let router = serviceAccount.storage.borrow<&EVMBridgeRouter.Router>( - from: /storage/evmBridgeRouter - ) ?? panic("Could not borrow Router") - - assert(router.bridgeAddress == 0x0000000000000007) - assert(router.bridgeContractName == "FlowEVMBridge") - - return true -} diff --git a/cadence/tests/serialize_metadata_tests.cdc b/cadence/tests/serialize_metadata_tests.cdc index 26911359..a3968b45 100644 --- a/cadence/tests/serialize_metadata_tests.cdc +++ b/cadence/tests/serialize_metadata_tests.cdc @@ -48,13 +48,7 @@ fun testSerializeNFTSucceeds() { admin ) Test.expect(mintResult, Test.beSucceeded()) - - let heightResult = executeScript( - "./scripts/get_block_height.cdc", - [] - ) - mintedBlockHeight = heightResult.returnValue! as! UInt64 - let heightString = mintedBlockHeight.toString() + let heightString = getCurrentBlockHeight().toString() let expectedPrefix = "data:application/json;utf8,{\"name\": \"ExampleNFT\", \"description\": \"Example NFT Collection\", \"image\": \"https://flow.com/examplenft.jpg\", \"external_url\": \"https://example-nft.onflow.org\", " let altSuffix1 = "\"attributes\": [{\"trait_type\": \"mintedBlock\", \"value\": \"".concat(heightString).concat("\"},{\"trait_type\": \"foo\", \"value\": \"nil\"}]}") @@ -170,3 +164,23 @@ fun testDeriveSymbolFromShortStringSucceeds() { var symbolResult = SerializeMetadata.deriveSymbol(fromString: contractName) Test.assertEqual(expectedSymbol, symbolResult) } + +access(all) +fun testToUpperSucceeds() { + let expected = "BTC2" + + let contractName = " Btc2contract" + + let actual = SerializeMetadata.toUpperAlphaNumerical(contractName, upTo: 4) + Test.assertEqual(expected, actual) +} + +access(all) +fun testToUpperExceedingStringLengthSucceeds() { + let expected = "BTC2CONTRACT" + + let contractName = " Btc2contract" + + let actual = SerializeMetadata.toUpperAlphaNumerical(contractName, upTo: contractName.length + 1) + Test.assertEqual(expected, actual) +} \ No newline at end of file diff --git a/cadence/tests/serialize_tests.cdc b/cadence/tests/serialize_tests.cdc index 99a5b8a8..e472b907 100644 --- a/cadence/tests/serialize_tests.cdc +++ b/cadence/tests/serialize_tests.cdc @@ -3,10 +3,15 @@ import BlockchainHelpers import "Serialize" -access(all) -let admin = Test.getAccount(0x0000000000000007) -access(all) -let alice = Test.createAccount() +access(all) let admin = Test.getAccount(0x0000000000000007) +access(all) let alice = Test.createAccount() + +access(all) struct NonSerializable { + access(all) let foo: String + init() { + self.foo = "foo" + } +} access(all) fun setup() { @@ -189,13 +194,17 @@ fun testBoolTryToJSONStringSucceeds() { access(all) fun testArrayToJSONStringSucceeds() { let arr: [AnyStruct] = [ + NonSerializable(), 127, 255, "Hello, World!", "c", Address(0x0000000000000007), + NonSerializable(), UFix64.max, - true + true, + NonSerializable(), + NonSerializable() ] let expected = "[\"127\", \"255\", \"Hello, World!\", \"c\", \"0x0000000000000007\", \"184467440737.09551615\", \"true\"]" @@ -205,11 +214,24 @@ fun testArrayToJSONStringSucceeds() { Test.assertEqual(expected, actual!) } +access(all) +fun testEmptyArrayToJSONStringSucceeds() { + let arr: [AnyStruct] = [] + + let expected = "[]" + + var actual = Serialize.arrayToJSONString(arr) + + Test.assertEqual(expected, actual!) +} + access(all) fun testDictToJSONStringSucceeds() { let dict: {String: AnyStruct} = { + "bar": NonSerializable(), "bool": true, - "arr": [ 127, "Hello, World!" ] + "arr": [ 127, "Hello, World!" ], + "foo": NonSerializable() } // Mapping values can be indexed in arbitrary order, so we need to check for all possible outputs @@ -226,3 +248,17 @@ fun testDictToJSONStringSucceeds() { expectedOne = "{\"arr\": [\"127\", \"Hello, World!\"]}" Test.assertEqual(true, expectedOne == actual!) } + +access(all) +fun testEmptyDictToJSONStringSucceeds() { + let dict: {String: AnyStruct} = {} + + // Mapping values can be indexed in arbitrary order, so we need to check for all possible outputs + var expected: String = "{}" + + var actual: String? = Serialize.dictToJSONString(dict: dict, excludedNames: nil) + Test.assertEqual(expected, actual!) + + actual = Serialize.tryToJSONString(dict) + Test.assertEqual(expected, actual!) +} diff --git a/cadence/tests/test_helpers.cdc b/cadence/tests/test_helpers.cdc index af8e9c1a..aa42f5f5 100644 --- a/cadence/tests/test_helpers.cdc +++ b/cadence/tests/test_helpers.cdc @@ -11,13 +11,13 @@ import "EVM" /// See the python util `get_code_hex.py` to retrieve the hex-encoded Cadence either with or /// without a separator (`{{CONTRACT_NAME}}` used in templates to "chunk" template code). -access(all) let compiledFactoryBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611452806100a56000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063aff51c3e11610097578063daa09e5411610066578063daa09e5414610216578063db6d56cd14610229578063dfe1ac361461023c578063f2fde38b1461024f57600080fd5b8063aff51c3e146101bd578063b3d5dbdc146101d0578063cc435bf3146101f0578063d974d2381461020357600080fd5b806366cd5014116100d357806366cd50141461017e578063715018a61461019157806383843c9e146101995780638da5cb5b146101ac57600080fd5b806304433bbc1461010557806314902ad314610135578063263e0c1b1461014a5780635ab1bd531461016d575b600080fd5b610118610113366004611067565b610262565b6040516001600160a01b0390911681526020015b60405180910390f35b6101486101433660046110b9565b6102da565b005b61015d6101583660046110b9565b610354565b604051901515815260200161012c565b6001546001600160a01b0316610118565b61011861018c366004611067565b610744565b610148610775565b6101486101a7366004611067565b610789565b6000546001600160a01b0316610118565b6101486101cb3660046110d6565b61088b565b6101e36101de3660046110b9565b6109a4565b60405161012c9190611178565b61015d6101fe3660046110b9565b610a17565b6101486102113660046110d6565b610a37565b61015d6102243660046110b9565b610b08565b61011861023736600461118b565b610b7e565b61015d61024a3660046110b9565b610c53565b61014861025d3660046110b9565b610cc2565b600154604051630110ceef60e21b81526000916001600160a01b0316906304433bbc90610293908590600401611178565b602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d49190611280565b92915050565b6102e2610d00565b6102eb81610d2d565b600154604080516001600160a01b03928316815291831660208301527f61dad6e94cd5c0b65c9265246706a09bd0d11d5330f3e6b659d328151a664e8c910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b1790529051600091829182916001600160a01b0386169161039a919061129d565b600060405180830381855afa9150503d80600081146103d5576040519150601f19603f3d011682016040523d82523d6000602084013e6103da565b606091505b50915091508115806103eb57508051155b156103fa575060009392505050565b604051600060248201526001600160a01b0385169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251610447919061129d565b600060405180830381855afa9150503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50909250905081158061049957508051155b156104a8575060009392505050565b60405160006024820181905260448201526001600160a01b0385169060640160408051601f198184030181529181526020820180516001600160e01b0316636eb1769f60e11b179052516104fc919061129d565b600060405180830381855afa9150503d8060008114610537576040519150601f19603f3d011682016040523d82523d6000602084013e61053c565b606091505b50909250905081158061054e57508051155b1561055d575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516001600160a01b0386169161059b9161129d565b600060405180830381855afa9150503d80600081146105d6576040519150601f19603f3d011682016040523d82523d6000602084013e6105db565b606091505b5090925090508115806105ed57508051155b156105fc575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516001600160a01b0386169161063a9161129d565b600060405180830381855afa9150503d8060008114610675576040519150601f19603f3d011682016040523d82523d6000602084013e61067a565b606091505b50909250905081158061068c57508051155b1561069b575060009392505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516001600160a01b038616916106d99161129d565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905081158061072b57508051155b1561073a575060009392505050565b5060019392505050565b6000600282604051610756919061129d565b908152604051908190036020019020546001600160a01b031692915050565b61077d610d00565b6107876000610d9f565b565b610791610d00565b60006002826040516107a3919061129d565b908152604051908190036020019020546001600160a01b03169050806108235760405162461bcd60e51b815260206004820152602a60248201527f466c6f77427269646765466163746f72793a204465706c6f796572206e6f74206044820152691c9959da5cdd195c995960b21b60648201526084015b60405180910390fd5b600282604051610833919061129d565b90815260405190819003602001812080546001600160a01b03191690557f03c7566b5f4959b890c1a6d38f39df053c6737c9965d9c0ddf612c86100a838b9061087f90849084906112b9565b60405180910390a15050565b610893610d00565b61089c81610def565b60006001600160a01b03166002836040516108b7919061129d565b908152604051908190036020019020546001600160a01b0316146109345760405162461bcd60e51b815260206004820152602e60248201527f466c6f77427269646765466163746f72793a204465706c6f79657220616c726560448201526d18591e481c9959da5cdd195c995960921b606482015260840161081a565b80600283604051610945919061129d565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557fc0c30f085f0b1397c8bf23f8b851b63b33e13d11832b8320a37fca1c07dcb40f9061087f90849084906112b9565b600154604051632cf576f760e21b81526001600160a01b038381166004830152606092169063b3d5dbdc90602401600060405180830381865afa1580156109ef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d491908101906112e3565b6000610a2282610b08565b1515610a2d83610354565b1515141592915050565b610a3f610d00565b610a4881610def565b6000600283604051610a5a919061129d565b908152604051908190036020019020546001600160a01b0316905080610a8957610a84838361088b565b505050565b81600284604051610a9a919061129d565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557f848576f8a081c5af60d89f0215c8af528186670eefd6349c05014d5b2268864690610afb9085908490869061135a565b60405180910390a1505050565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526000906001600160a01b038316906301ffc9a790602401602060405180830381865afa925050508015610b72575060408051601f3d908101601f19168201909252610b6f9181019061138d565b60015b6102d457506000919050565b6000610b88610d00565b6000600288604051610b9a919061129d565b908152604051908190036020019020546001600160a01b03169050610bbe81610def565b60405163476d399760e01b815281906000906001600160a01b0383169063476d399790610bf7908c908c908c908c908c906004016113af565b6020604051808303816000875af1158015610c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190611280565b9050610c468682610e61565b9998505050505050505050565b60015460405163a6de610560e01b81526001600160a01b038381166004830152600092169063a6de610590602401602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d4919061138d565b610cca610d00565b6001600160a01b038116610cf457604051631e4fbdf760e01b81526000600482015260240161081a565b610cfd81610d9f565b50565b6000546001600160a01b031633146107875760405163118cdaa760e01b815233600482015260240161081a565b610d3681610ecc565b610d478163976998cb60e01b610f22565b610cfd5760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c696420726567697360448201526274727960e81b606482015260840161081a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610df881610ecc565b610e098163476d399760e01b610f22565b610cfd5760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c6964206465706c6f6044820152623cb2b960e91b606482015260840161081a565b60015460405163522791d160e01b81526001600160a01b0390911690819063522791d190610e9590869086906004016112b9565b600060405180830381600087803b158015610eaf57600080fd5b505af1158015610ec3573d6000803e3d6000fd5b50505050505050565b6001600160a01b038116610cfd5760405162461bcd60e51b815260206004820152601f60248201527f466c6f77427269646765466163746f72793a205a65726f206164647265737300604482015260640161081a565b6040516301ffc9a760e01b81526001600160e01b0319821660048201526000906001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015610f8f575060408051601f3d908101601f19168201909252610f8c9181019061138d565b60015b610f9b575060006102d4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610fe157610fe1610fa2565b604052919050565b600067ffffffffffffffff82111561100357611003610fa2565b50601f01601f191660200190565b600082601f83011261102257600080fd5b813561103561103082610fe9565b610fb8565b81815284602083860101111561104a57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561107957600080fd5b813567ffffffffffffffff81111561109057600080fd5b61109c84828501611011565b949350505050565b6001600160a01b0381168114610cfd57600080fd5b6000602082840312156110cb57600080fd5b8135610f9b816110a4565b600080604083850312156110e957600080fd5b823567ffffffffffffffff81111561110057600080fd5b61110c85828601611011565b925050602083013561111d816110a4565b809150509250929050565b60005b8381101561114357818101518382015260200161112b565b50506000910152565b60008151808452611164816020860160208601611128565b601f01601f19169290920160200192915050565b602081526000610f9b602083018461114c565b60008060008060008060c087890312156111a457600080fd5b863567ffffffffffffffff808211156111bc57600080fd5b6111c88a838b01611011565b975060208901359150808211156111de57600080fd5b6111ea8a838b01611011565b9650604089013591508082111561120057600080fd5b61120c8a838b01611011565b9550606089013591508082111561122257600080fd5b61122e8a838b01611011565b9450608089013591508082111561124457600080fd5b6112508a838b01611011565b935060a089013591508082111561126657600080fd5b5061127389828a01611011565b9150509295509295509295565b60006020828403121561129257600080fd5b8151610f9b816110a4565b600082516112af818460208701611128565b9190910192915050565b6040815260006112cc604083018561114c565b905060018060a01b03831660208301529392505050565b6000602082840312156112f557600080fd5b815167ffffffffffffffff81111561130c57600080fd5b8201601f8101841361131d57600080fd5b805161132b61103082610fe9565b81815285602083850101111561134057600080fd5b611351826020830160208601611128565b95945050505050565b60608152600061136d606083018661114c565b6001600160a01b0394851660208401529290931660409091015292915050565b60006020828403121561139f57600080fd5b81518015158114610f9b57600080fd5b60a0815260006113c260a083018861114c565b82810360208401526113d4818861114c565b905082810360408401526113e8818761114c565b905082810360608401526113fc818661114c565b90508281036080840152611410818561114c565b9897505050505050505056fea264697066735822122026be7d4ef13534833344abdcc736e8876603e1f9d3463f0047ddca092a98cc2d64736f6c63430008170033" +access(all) let compiledFactoryBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114a9806100a56000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063aff51c3e11610097578063daa09e5411610066578063daa09e5414610216578063db6d56cd14610229578063dfe1ac361461023c578063f2fde38b1461024f57600080fd5b8063aff51c3e146101bd578063b3d5dbdc146101d0578063cc435bf3146101f0578063d974d2381461020357600080fd5b806366cd5014116100d357806366cd50141461017e578063715018a61461019157806383843c9e146101995780638da5cb5b146101ac57600080fd5b806304433bbc1461010557806314902ad314610135578063263e0c1b1461014a5780635ab1bd531461016d575b600080fd5b6101186101133660046110be565b610262565b6040516001600160a01b0390911681526020015b60405180910390f35b610148610143366004611110565b6102da565b005b61015d610158366004611110565b610354565b604051901515815260200161012c565b6001546001600160a01b0316610118565b61011861018c3660046110be565b610744565b610148610775565b6101486101a73660046110be565b6107e3565b6000546001600160a01b0316610118565b6101486101cb36600461112d565b6108e0565b6101e36101de366004611110565b6109f9565b60405161012c91906111cf565b61015d6101fe366004611110565b610a6c565b61014861021136600461112d565b610a8c565b61015d610224366004611110565b610b5d565b6101186102373660046111e2565b610bd3565b61015d61024a366004611110565b610ca8565b61014861025d366004611110565b610d17565b600154604051630110ceef60e21b81526000916001600160a01b0316906304433bbc906102939085906004016111cf565b602060405180830381865afa1580156102b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906112d7565b92915050565b6102e2610d55565b6102eb81610d84565b600154604080516001600160a01b03928316815291831660208301527f61dad6e94cd5c0b65c9265246706a09bd0d11d5330f3e6b659d328151a664e8c910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b60408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b1790529051600091829182916001600160a01b0386169161039a91906112f4565b600060405180830381855afa9150503d80600081146103d5576040519150601f19603f3d011682016040523d82523d6000602084013e6103da565b606091505b50915091508115806103eb57508051155b156103fa575060009392505050565b604051600060248201526001600160a01b0385169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b1790525161044791906112f4565b600060405180830381855afa9150503d8060008114610482576040519150601f19603f3d011682016040523d82523d6000602084013e610487565b606091505b50909250905081158061049957508051155b156104a8575060009392505050565b60405160006024820181905260448201526001600160a01b0385169060640160408051601f198184030181529181526020820180516001600160e01b0316636eb1769f60e11b179052516104fc91906112f4565b600060405180830381855afa9150503d8060008114610537576040519150601f19603f3d011682016040523d82523d6000602084013e61053c565b606091505b50909250905081158061054e57508051155b1561055d575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516001600160a01b0386169161059b916112f4565b600060405180830381855afa9150503d80600081146105d6576040519150601f19603f3d011682016040523d82523d6000602084013e6105db565b606091505b5090925090508115806105ed57508051155b156105fc575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516001600160a01b0386169161063a916112f4565b600060405180830381855afa9150503d8060008114610675576040519150601f19603f3d011682016040523d82523d6000602084013e61067a565b606091505b50909250905081158061068c57508051155b1561069b575060009392505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516001600160a01b038616916106d9916112f4565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905081158061072b57508051155b1561073a575060009392505050565b5060019392505050565b600060028260405161075691906112f4565b908152604051908190036020019020546001600160a01b031692915050565b61077d610d55565b60405162461bcd60e51b815260206004820152603060248201527f466c6f77427269646765466163746f72793a204f776e6572736869702063616e60448201526f1b9bdd081899481c995b9bdd5b98d95960821b60648201526084015b60405180910390fd5b6107eb610d55565b60006002826040516107fd91906112f4565b908152604051908190036020019020546001600160a01b03169050806108785760405162461bcd60e51b815260206004820152602a60248201527f466c6f77427269646765466163746f72793a204465706c6f796572206e6f74206044820152691c9959da5cdd195c995960b21b60648201526084016107da565b60028260405161088891906112f4565b90815260405190819003602001812080546001600160a01b03191690557f03c7566b5f4959b890c1a6d38f39df053c6737c9965d9c0ddf612c86100a838b906108d49084908490611310565b60405180910390a15050565b6108e8610d55565b6108f181610df6565b60006001600160a01b031660028360405161090c91906112f4565b908152604051908190036020019020546001600160a01b0316146109895760405162461bcd60e51b815260206004820152602e60248201527f466c6f77427269646765466163746f72793a204465706c6f79657220616c726560448201526d18591e481c9959da5cdd195c995960921b60648201526084016107da565b8060028360405161099a91906112f4565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557fc0c30f085f0b1397c8bf23f8b851b63b33e13d11832b8320a37fca1c07dcb40f906108d49084908490611310565b600154604051632cf576f760e21b81526001600160a01b038381166004830152606092169063b3d5dbdc90602401600060405180830381865afa158015610a44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102d4919081019061133a565b6000610a7782610b5d565b1515610a8283610354565b1515141592915050565b610a94610d55565b610a9d81610df6565b6000600283604051610aaf91906112f4565b908152604051908190036020019020546001600160a01b0316905080610ade57610ad983836108e0565b505050565b81600284604051610aef91906112f4565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b0319909316929092179091557f848576f8a081c5af60d89f0215c8af528186670eefd6349c05014d5b2268864690610b50908590849086906113b1565b60405180910390a1505050565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526000906001600160a01b038316906301ffc9a790602401602060405180830381865afa925050508015610bc7575060408051601f3d908101601f19168201909252610bc4918101906113e4565b60015b6102d457506000919050565b6000610bdd610d55565b6000600288604051610bef91906112f4565b908152604051908190036020019020546001600160a01b03169050610c1381610df6565b60405163476d399760e01b815281906000906001600160a01b0383169063476d399790610c4c908c908c908c908c908c90600401611406565b6020604051808303816000875af1158015610c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8f91906112d7565b9050610c9b8682610e68565b9998505050505050505050565b60015460405163a6de610560e01b81526001600160a01b038381166004830152600092169063a6de610590602401602060405180830381865afa158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d491906113e4565b610d1f610d55565b6001600160a01b038116610d4957604051631e4fbdf760e01b8152600060048201526024016107da565b610d5281610ed3565b50565b6000546001600160a01b03163314610d825760405163118cdaa760e01b81523360048201526024016107da565b565b610d8d81610f23565b610d9e8163976998cb60e01b610f79565b610d525760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c696420726567697360448201526274727960e81b60648201526084016107da565b610dff81610f23565b610e108163476d399760e01b610f79565b610d525760405162461bcd60e51b815260206004820152602360248201527f466c6f77427269646765466163746f72793a20496e76616c6964206465706c6f6044820152623cb2b960e91b60648201526084016107da565b60015460405163522791d160e01b81526001600160a01b0390911690819063522791d190610e9c9086908690600401611310565b600060405180830381600087803b158015610eb657600080fd5b505af1158015610eca573d6000803e3d6000fd5b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116610d525760405162461bcd60e51b815260206004820152601f60248201527f466c6f77427269646765466163746f72793a205a65726f20616464726573730060448201526064016107da565b6040516301ffc9a760e01b81526001600160e01b0319821660048201526000906001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015610fe6575060408051601f3d908101601f19168201909252610fe3918101906113e4565b60015b610ff2575060006102d4565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561103857611038610ff9565b604052919050565b600067ffffffffffffffff82111561105a5761105a610ff9565b50601f01601f191660200190565b600082601f83011261107957600080fd5b813561108c61108782611040565b61100f565b8181528460208386010111156110a157600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156110d057600080fd5b813567ffffffffffffffff8111156110e757600080fd5b6110f384828501611068565b949350505050565b6001600160a01b0381168114610d5257600080fd5b60006020828403121561112257600080fd5b8135610ff2816110fb565b6000806040838503121561114057600080fd5b823567ffffffffffffffff81111561115757600080fd5b61116385828601611068565b9250506020830135611174816110fb565b809150509250929050565b60005b8381101561119a578181015183820152602001611182565b50506000910152565b600081518084526111bb81602086016020860161117f565b601f01601f19169290920160200192915050565b602081526000610ff260208301846111a3565b60008060008060008060c087890312156111fb57600080fd5b863567ffffffffffffffff8082111561121357600080fd5b61121f8a838b01611068565b9750602089013591508082111561123557600080fd5b6112418a838b01611068565b9650604089013591508082111561125757600080fd5b6112638a838b01611068565b9550606089013591508082111561127957600080fd5b6112858a838b01611068565b9450608089013591508082111561129b57600080fd5b6112a78a838b01611068565b935060a08901359150808211156112bd57600080fd5b506112ca89828a01611068565b9150509295509295509295565b6000602082840312156112e957600080fd5b8151610ff2816110fb565b6000825161130681846020870161117f565b9190910192915050565b60408152600061132360408301856111a3565b905060018060a01b03831660208301529392505050565b60006020828403121561134c57600080fd5b815167ffffffffffffffff81111561136357600080fd5b8201601f8101841361137457600080fd5b805161138261108782611040565b81815285602083850101111561139757600080fd5b6113a882602083016020860161117f565b95945050505050565b6060815260006113c460608301866111a3565b6001600160a01b0394851660208401529290931660409091015292915050565b6000602082840312156113f657600080fd5b81518015158114610ff257600080fd5b60a08152600061141960a08301886111a3565b828103602084015261142b81886111a3565b9050828103604084015261143f81876111a3565b9050828103606084015261145381866111a3565b9050828103608084015261146781856111a3565b9897505050505050505056fea2646970667358221220e0d76d0c752ff86406f8ac3921cf855c8f764fa507449f3d0c65bfdf59ca891864736f6c63430008180033" -access(all) let erc20DeployerBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612096806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d36600462000438565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c936600462000516565b62000180565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002a5565b005b6000546001600160a01b0316620000cf565b620001066200012b366004620005f8565b620002bd565b6200010662000142366004620005f8565b62000367565b60006001600160e01b0319821663476d399760e01b14806200017a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03163314620002095760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a204f6e6c60448201527f792064656c656761746564206465706c6f7965722063616e206465706c6f790060648201526084015b60405180910390fd5b600080546001600160a01b0316878787878760405162000229906200042a565b6200023a969594939291906200066b565b604051809103906000f08015801562000257573d6000803e3d6000fd5b5090507f99a64021330f1af36b3fd5f64a1d12b99b8ddf91fa553618c4df01ffba4c1cee818888888860405162000293959493929190620006f4565b60405180910390a19695505050505050565b620002af620003ab565b620002bb6000620003da565b565b620002c7620003ab565b6001600160a01b038116620003455760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a20496e7660448201527f616c69642064656c656761746564206465706c6f796572206164647265737300606482015260840162000200565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b62000371620003ab565b6001600160a01b0381166200039d57604051631e4fbdf760e01b81526000600482015260240162000200565b620003a881620003da565b50565b6000546001600160a01b03163314620002bb5760405163118cdaa760e01b815233600482015260240162000200565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118fa806200076783390190565b6000602082840312156200044b57600080fd5b81356001600160e01b0319811681146200046457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200049357600080fd5b813567ffffffffffffffff80821115620004b157620004b16200046b565b604051601f8301601f19908116603f01168101908282118183101715620004dc57620004dc6200046b565b81604052838152866020858801011115620004f657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200052f57600080fd5b853567ffffffffffffffff808211156200054857600080fd5b6200055689838a0162000481565b965060208801359150808211156200056d57600080fd5b6200057b89838a0162000481565b955060408801359150808211156200059257600080fd5b620005a089838a0162000481565b94506060880135915080821115620005b757600080fd5b620005c589838a0162000481565b93506080880135915080821115620005dc57600080fd5b50620005eb8882890162000481565b9150509295509295909350565b6000602082840312156200060b57600080fd5b81356001600160a01b03811681146200046457600080fd5b6000815180845260005b818110156200064b576020818501810151868301820152016200062d565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006919083018862000623565b8281036040840152620006a5818862000623565b90508281036060840152620006bb818762000623565b90508281036080840152620006d1818662000623565b905082810360a0840152620006e7818562000623565b9998505050505050505050565b6001600160a01b038616815260a0602082018190526000906200071a9083018762000623565b82810360408401526200072e818762000623565b9050828103606084015262000744818662000623565b905082810360808401526200075a818562000623565b9897505050505050505056fe6101606040523480156200001257600080fd5b50604051620018fa380380620018fa833981016040819052620000359162000357565b6040805180820190915260018152603160f81b6020820152859081908882886003620000628382620004db565b506004620000718282620004db565b5050506001600160a01b038116620000a457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000af816200019f565b50620000bd826006620001f1565b61012052620000ce816007620001f1565b61014052815160208084019190912060e052815190820120610100524660a0526200015c60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506009620001748482620004db565b50600a620001838382620004db565b50600b620001928282620004db565b5050505050505062000601565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602083511015620002115762000209836200022a565b905062000224565b816200021e8482620004db565b5060ff90505b92915050565b600080829050601f8151111562000258578260405163305a27a960e01b81526004016200009b9190620005a7565b80516200026582620005dc565b179392505050565b80516001600160a01b03811681146200028557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002bd578181015183820152602001620002a3565b50506000910152565b600082601f830112620002d857600080fd5b81516001600160401b0380821115620002f557620002f56200028a565b604051601f8301601f19908116603f011681019082821181831017156200032057620003206200028a565b816040528381528660208588010111156200033a57600080fd5b6200034d846020830160208901620002a0565b9695505050505050565b60008060008060008060c087890312156200037157600080fd5b6200037c876200026d565b60208801519096506001600160401b03808211156200039a57600080fd5b620003a88a838b01620002c6565b96506040890151915080821115620003bf57600080fd5b620003cd8a838b01620002c6565b95506060890151915080821115620003e457600080fd5b620003f28a838b01620002c6565b945060808901519150808211156200040957600080fd5b620004178a838b01620002c6565b935060a08901519150808211156200042e57600080fd5b506200043d89828a01620002c6565b9150509295509295509295565b600181811c908216806200045f57607f821691505b6020821081036200048057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004d6576000816000526020600020601f850160051c81016020861015620004b15750805b601f850160051c820191505b81811015620004d257828155600101620004bd565b5050505b505050565b81516001600160401b03811115620004f757620004f76200028a565b6200050f816200050884546200044a565b8462000486565b602080601f8311600181146200054757600084156200052e5750858301515b600019600386901b1c1916600185901b178555620004d2565b600085815260208120601f198616915b82811015620005785788860151825594840194600190910190840162000557565b5085821015620005975787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620005c8816040850160208701620002a0565b601f01601f19169190910160400192915050565b80516020808301519190811015620004805760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161129e6200065c6000396000610a8801526000610a5b01526000610918015260006108f00152600061084b015260006108750152600061089f015261129e6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063a76b4d5611610097578063dc9716eb11610071578063dc9716eb146102f8578063dd62ed3e14610300578063e8a3d48514610339578063f2fde38b1461034157600080fd5b8063a76b4d56146102ca578063a9059cbb146102d2578063d505accf146102e557600080fd5b8063715018a61461025e57806379cc6790146102665780637ecebe001461027957806384b0196e1461028c5780638da5cb5b146102a757806395d89b41146102c257600080fd5b8063313ce56711610130578063313ce567146101ee5780633644e515146101fd5780633fd4d4a81461020557806340c10f191461020d57806342966c681461022257806370a082311461023557600080fd5b806306fdde0314610178578063095ea7b3146101965780630cd9acb7146101b9578063120a88ad146101c157806318160ddd146101c957806323b872dd146101db575b600080fd5b610180610354565b60405161018d9190610fe8565b60405180910390f35b6101a96101a436600461101e565b6103e6565b604051901515815260200161018d565b610180610400565b61018061048e565b6002545b60405190815260200161018d565b6101a96101e9366004611048565b61049d565b6040516012815260200161018d565b6101cd6104c1565b6101806104d0565b61022061021b36600461101e565b6104df565b005b610220610230366004611084565b6104f5565b6101cd61024336600461109d565b6001600160a01b031660009081526020819052604090205490565b610220610502565b61022061027436600461101e565b610516565b6101cd61028736600461109d565b61052b565b610294610549565b60405161018d97969594939291906110b8565b6005546040516001600160a01b03909116815260200161018d565b61018061058f565b61018061059e565b6101a96102e036600461101e565b6105ab565b6102206102f3366004611151565b6105b9565b6101806106f8565b6101cd61030e3660046111c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610180610705565b61022061034f36600461109d565b610714565b606060038054610363906111f7565b80601f016020809104026020016040519081016040528092919081815260200182805461038f906111f7565b80156103dc5780601f106103b1576101008083540402835291602001916103dc565b820191906000526020600020905b8154815290600101906020018083116103bf57829003601f168201915b5050505050905090565b6000336103f481858561074f565b60019150505b92915050565b6009805461040d906111f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610439906111f7565b80156104865780601f1061045b57610100808354040283529160200191610486565b820191906000526020600020905b81548152906001019060200180831161046957829003601f168201915b505050505081565b606060098054610363906111f7565b6000336104ab858285610761565b6104b68585856107df565b506001949350505050565b60006104cb61083e565b905090565b6060600a8054610363906111f7565b6104e7610969565b6104f18282610996565b5050565b6104ff33826109cc565b50565b61050a610969565b6105146000610a02565b565b610521823383610761565b6104f182826109cc565b6001600160a01b0381166000908152600860205260408120546103fa565b60006060806000806000606061055d610a54565b610565610a81565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b606060048054610363906111f7565b600b805461040d906111f7565b6000336103f48185856107df565b834211156105e25760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861062f8c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061068a82610aae565b9050600061069a82878787610adb565b9050896001600160a01b0316816001600160a01b0316146106e1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105d9565b6106ec8a8a8a61074f565b50505050505050505050565b600a805461040d906111f7565b6060600b8054610363906111f7565b61071c610969565b6001600160a01b03811661074657604051631e4fbdf760e01b8152600060048201526024016105d9565b6104ff81610a02565b61075c8383836001610b09565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146107d957818110156107ca57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105d9565b6107d984848484036000610b09565b50505050565b6001600160a01b03831661080957604051634b637e8f60e11b8152600060048201526024016105d9565b6001600160a01b0382166108335760405163ec442f0560e01b8152600060048201526024016105d9565b61075c838383610bde565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561089757507f000000000000000000000000000000000000000000000000000000000000000046145b156108c157507f000000000000000000000000000000000000000000000000000000000000000090565b6104cb604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6005546001600160a01b031633146105145760405163118cdaa760e01b81523360048201526024016105d9565b6001600160a01b0382166109c05760405163ec442f0560e01b8152600060048201526024016105d9565b6104f160008383610bde565b6001600160a01b0382166109f657604051634b637e8f60e11b8152600060048201526024016105d9565b6104f182600083610bde565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606104cb7f00000000000000000000000000000000000000000000000000000000000000006006610d08565b60606104cb7f00000000000000000000000000000000000000000000000000000000000000006007610d08565b60006103fa610abb61083e565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610aed88888888610db3565b925092509250610afd8282610e82565b50909695505050505050565b6001600160a01b038416610b335760405163e602df0560e01b8152600060048201526024016105d9565b6001600160a01b038316610b5d57604051634a1406b160e11b8152600060048201526024016105d9565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156107d957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bd091815260200190565b60405180910390a350505050565b6001600160a01b038316610c09578060026000828254610bfe9190611231565b90915550610c7b9050565b6001600160a01b03831660009081526020819052604090205481811015610c5c5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105d9565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610c9757600280548290039055610cb6565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cfb91815260200190565b60405180910390a3505050565b606060ff8314610d2257610d1b83610f3b565b90506103fa565b818054610d2e906111f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a906111f7565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505090506103fa565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610dee5750600091506003905082610e78565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e42573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e6e57506000925060019150829050610e78565b9250600091508190505b9450945094915050565b6000826003811115610e9657610e96611252565b03610e9f575050565b6001826003811115610eb357610eb3611252565b03610ed15760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ee557610ee5611252565b03610f065760405163fce698f760e01b8152600481018290526024016105d9565b6003826003811115610f1a57610f1a611252565b036104f1576040516335e2f38360e21b8152600481018290526024016105d9565b60606000610f4883610f7a565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f8111156103fa57604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610fc857602081850181015186830182015201610fac565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ffb6020830184610fa2565b9392505050565b80356001600160a01b038116811461101957600080fd5b919050565b6000806040838503121561103157600080fd5b61103a83611002565b946020939093013593505050565b60008060006060848603121561105d57600080fd5b61106684611002565b925061107460208501611002565b9150604084013590509250925092565b60006020828403121561109657600080fd5b5035919050565b6000602082840312156110af57600080fd5b610ffb82611002565b60ff60f81b881681526000602060e060208401526110d960e084018a610fa2565b83810360408501526110eb818a610fa2565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561113f57835183529284019291840191600101611123565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561116c57600080fd5b61117588611002565b965061118360208901611002565b95506040880135945060608801359350608088013560ff811681146111a757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156111d757600080fd5b6111e083611002565b91506111ee60208401611002565b90509250929050565b600181811c9082168061120b57607f821691505b60208210810361122b57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103fa57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea26469706673582212206fb41458119173f9f1d07720d0b22fbfacf4726505008b5c43816c9902cd0fc464736f6c63430008170033a26469706673582212201df4bdff78560cbe320524756593933725001e7f7f8e2f575636163e3d9cc87d64736f6c63430008170033" +access(all) let erc20DeployerBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6121ca806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d36600462000484565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c936600462000562565b6200019c565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002c9565b005b6000546001600160a01b0316620000cf565b620001066200012b36600462000644565b620002e1565b620001066200014236600462000644565b620003b3565b60006001600160e01b0319821663476d399760e01b14806200017a57506001600160e01b03198216630704183b60e11b145b806200019657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03163314620002255760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a204f6e6c60448201527f792064656c656761746564206465706c6f7965722063616e206465706c6f790060648201526084015b60405180910390fd5b600080546001600160a01b03168787878787604051620002459062000476565b6200025696959493929190620006b7565b604051809103906000f08015801562000273573d6000803e3d6000fd5b509050806001600160a01b03167fac166d2e64b2aaf94e9dfc7205dc17bc2a537b28fab78dfb70d79325657a8d3f88888888604051620002b7949392919062000740565b60405180910390a29695505050505050565b620002d3620003f7565b620002df600062000426565b565b620002eb620003f7565b6001600160a01b038116620003695760405162461bcd60e51b815260206004820152603f60248201527f466c6f7745564d4272696467656445524332304465706c6f7965723a20496e7660448201527f616c69642064656c656761746564206465706c6f79657220616464726573730060648201526084016200021c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc553df5d2803898b31fac480ec2b45d67b73294d4c94a93f069f47400f76bdbb90600090a250565b620003bd620003f7565b6001600160a01b038116620003e957604051631e4fbdf760e01b8152600060048201526024016200021c565b620003f48162000426565b50565b6000546001600160a01b03163314620002df5760405163118cdaa760e01b81523360048201526024016200021c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6119f480620007a183390190565b6000602082840312156200049757600080fd5b81356001600160e01b031981168114620004b057600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620004df57600080fd5b813567ffffffffffffffff80821115620004fd57620004fd620004b7565b604051601f8301601f19908116603f01168101908282118183101715620005285762000528620004b7565b816040528381528660208588010111156200054257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200057b57600080fd5b853567ffffffffffffffff808211156200059457600080fd5b620005a289838a01620004cd565b96506020880135915080821115620005b957600080fd5b620005c789838a01620004cd565b95506040880135915080821115620005de57600080fd5b620005ec89838a01620004cd565b945060608801359150808211156200060357600080fd5b6200061189838a01620004cd565b935060808801359150808211156200062857600080fd5b506200063788828901620004cd565b9150509295509295909350565b6000602082840312156200065757600080fd5b81356001600160a01b0381168114620004b057600080fd5b6000815180845260005b81811015620006975760208185018101518683018201520162000679565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006dd908301886200066f565b8281036040840152620006f181886200066f565b905082810360608401526200070781876200066f565b905082810360808401526200071d81866200066f565b905082810360a08401526200073381856200066f565b9998505050505050505050565b6080815260006200075560808301876200066f565b82810360208401526200076981876200066f565b905082810360408401526200077f81866200066f565b905082810360608401526200079581856200066f565b97965050505050505056fe6101606040523480156200001257600080fd5b50604051620019f4380380620019f483398101604081905262000035916200035c565b858580604051806040016040528060018152602001603160f81b81525088888160039081620000659190620004e0565b506004620000748282620004e0565b506200008691508390506005620001a4565b6101205262000097816006620001a4565b61014052815160208084019190912060e052815190820120610100524660a0526200012560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b0381166200015f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200016a81620001dd565b506009620001798482620004e0565b50600a620001888382620004e0565b50600b620001978282620004e0565b5050505050505062000606565b6000602083511015620001c457620001bc836200022f565b9050620001d7565b81620001d18482620004e0565b5060ff90505b92915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156200025d578260405163305a27a960e01b8152600401620001569190620005ac565b80516200026a82620005e1565b179392505050565b80516001600160a01b03811681146200028a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002c2578181015183820152602001620002a8565b50506000910152565b600082601f830112620002dd57600080fd5b81516001600160401b0380821115620002fa57620002fa6200028f565b604051601f8301601f19908116603f011681019082821181831017156200032557620003256200028f565b816040528381528660208588010111156200033f57600080fd5b62000352846020830160208901620002a5565b9695505050505050565b60008060008060008060c087890312156200037657600080fd5b620003818762000272565b60208801519096506001600160401b03808211156200039f57600080fd5b620003ad8a838b01620002cb565b96506040890151915080821115620003c457600080fd5b620003d28a838b01620002cb565b95506060890151915080821115620003e957600080fd5b620003f78a838b01620002cb565b945060808901519150808211156200040e57600080fd5b6200041c8a838b01620002cb565b935060a08901519150808211156200043357600080fd5b506200044289828a01620002cb565b9150509295509295509295565b600181811c908216806200046457607f821691505b6020821081036200048557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004db576000816000526020600020601f850160051c81016020861015620004b65750805b601f850160051c820191505b81811015620004d757828155600101620004c2565b5050505b505050565b81516001600160401b03811115620004fc57620004fc6200028f565b62000514816200050d84546200044f565b846200048b565b602080601f8311600181146200054c5760008415620005335750858301515b600019600386901b1c1916600185901b178555620004d7565b600085815260208120601f198616915b828110156200057d578886015182559484019460019091019084016200055c565b50858210156200059c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620005cd816040850160208701620002a5565b601f01601f19169190910160400192915050565b80516020808301519190811015620004855760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051611393620006616000396000610b5301526000610b26015260006109e3015260006109bb01526000610916015260006109400152600061096a01526113936000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806378c13082116100de57806397d9a15911610097578063d505accf11610071578063d505accf14610317578063dd62ed3e1461032a578063e8a3d48514610363578063f2fde38b1461036b57600080fd5b806397d9a159146102f4578063a76b4d56146102fc578063a9059cbb1461030457600080fd5b806378c130821461028857806379cc6790146102905780637ecebe00146102a357806384b0196e146102b65780638da5cb5b146102d157806395d89b41146102ec57600080fd5b8063313ce5671161014b57806340c10f191161012557806340c10f191461022f57806342966c681461024457806370a0823114610257578063715018a61461028057600080fd5b8063313ce567146102105780633644e5151461021f57806338e5d7b31461022757600080fd5b806301ffc9a71461019357806306fdde03146101bb578063095ea7b3146101d057806318160ddd146101e35780631a622896146101f557806323b872dd146101fd575b600080fd5b6101a66101a136600461106d565b61037e565b60405190151581526020015b60405180910390f35b6101c3610421565b6040516101b291906110e4565b6101a66101de366004611113565b6104b3565b6002545b6040519081526020016101b2565b6101c36104cb565b6101a661020b36600461113d565b6104da565b604051601281526020016101b2565b6101e76104fe565b6101c361050d565b61024261023d366004611113565b61059b565b005b610242610252366004611179565b6105b1565b6101e7610265366004611192565b6001600160a01b031660009081526020819052604090205490565b6102426105be565b6101c36105d2565b61024261029e366004611113565b6105df565b6101e76102b1366004611192565b6105f4565b6102be610612565b6040516101b297969594939291906111ad565b6008546040516001600160a01b0390911681526020016101b2565b6101c3610658565b6101c3610667565b6101c3610676565b6101a6610312366004611113565b610683565b610242610325366004611246565b610691565b6101e76103383660046112b9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c36107d0565b610242610379366004611192565b6107df565b60006001600160e01b031982166336372b0760e01b14806103af57506001600160e01b0319821663076b417f60e31b145b806103ca57506001600160e01b03198216630704183b60e11b145b806103e557506001600160e01b03198216634ec7fbed60e11b145b8061040057506001600160e01b03198216638dbb89cf60e01b145b8061041b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610430906112ec565b80601f016020809104026020016040519081016040528092919081815260200182805461045c906112ec565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000336104c181858561081a565b5060019392505050565b606060098054610430906112ec565b6000336104e885828561082c565b6104f38585856108aa565b506001949350505050565b6000610508610909565b905090565b6009805461051a906112ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610546906112ec565b80156105935780601f1061056857610100808354040283529160200191610593565b820191906000526020600020905b81548152906001019060200180831161057657829003601f168201915b505050505081565b6105a3610a34565b6105ad8282610a61565b5050565b6105bb3382610a97565b50565b6105c6610a34565b6105d06000610acd565b565b600a805461051a906112ec565b6105ea82338361082c565b6105ad8282610a97565b6001600160a01b03811660009081526007602052604081205461041b565b600060608060008060006060610626610b1f565b61062e610b4c565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b606060048054610430906112ec565b6060600a8054610430906112ec565b600b805461051a906112ec565b6000336104c18185856108aa565b834211156106ba5760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107078c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061076282610b79565b9050600061077282878787610ba6565b9050896001600160a01b0316816001600160a01b0316146107b9576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016106b1565b6107c48a8a8a61081a565b50505050505050505050565b6060600b8054610430906112ec565b6107e7610a34565b6001600160a01b03811661081157604051631e4fbdf760e01b8152600060048201526024016106b1565b6105bb81610acd565b6108278383836001610bd4565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146108a4578181101561089557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106b1565b6108a484848484036000610bd4565b50505050565b6001600160a01b0383166108d457604051634b637e8f60e11b8152600060048201526024016106b1565b6001600160a01b0382166108fe5760405163ec442f0560e01b8152600060048201526024016106b1565b610827838383610ca9565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561096257507f000000000000000000000000000000000000000000000000000000000000000046145b1561098c57507f000000000000000000000000000000000000000000000000000000000000000090565b610508604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6008546001600160a01b031633146105d05760405163118cdaa760e01b81523360048201526024016106b1565b6001600160a01b038216610a8b5760405163ec442f0560e01b8152600060048201526024016106b1565b6105ad60008383610ca9565b6001600160a01b038216610ac157604051634b637e8f60e11b8152600060048201526024016106b1565b6105ad82600083610ca9565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606105087f00000000000000000000000000000000000000000000000000000000000000006005610dd3565b60606105087f00000000000000000000000000000000000000000000000000000000000000006006610dd3565b600061041b610b86610909565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610bb888888888610e7e565b925092509250610bc88282610f4d565b50909695505050505050565b6001600160a01b038416610bfe5760405163e602df0560e01b8152600060048201526024016106b1565b6001600160a01b038316610c2857604051634a1406b160e11b8152600060048201526024016106b1565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156108a457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c9b91815260200190565b60405180910390a350505050565b6001600160a01b038316610cd4578060026000828254610cc99190611326565b90915550610d469050565b6001600160a01b03831660009081526020819052604090205481811015610d275760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016106b1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610d6257600280548290039055610d81565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610dc691815260200190565b60405180910390a3505050565b606060ff8314610ded57610de683611006565b905061041b565b818054610df9906112ec565b80601f0160208091040260200160405190810160405280929190818152602001828054610e25906112ec565b8015610e725780601f10610e4757610100808354040283529160200191610e72565b820191906000526020600020905b815481529060010190602001808311610e5557829003601f168201915b5050505050905061041b565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610eb95750600091506003905082610f43565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610f0d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f3957506000925060019150829050610f43565b9250600091508190505b9450945094915050565b6000826003811115610f6157610f61611347565b03610f6a575050565b6001826003811115610f7e57610f7e611347565b03610f9c5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610fb057610fb0611347565b03610fd15760405163fce698f760e01b8152600481018290526024016106b1565b6003826003811115610fe557610fe5611347565b036105ad576040516335e2f38360e21b8152600481018290526024016106b1565b6060600061101383611045565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f81111561041b57604051632cd44ac360e21b815260040160405180910390fd5b60006020828403121561107f57600080fd5b81356001600160e01b03198116811461109757600080fd5b9392505050565b6000815180845260005b818110156110c4576020818501810151868301820152016110a8565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611097602083018461109e565b80356001600160a01b038116811461110e57600080fd5b919050565b6000806040838503121561112657600080fd5b61112f836110f7565b946020939093013593505050565b60008060006060848603121561115257600080fd5b61115b846110f7565b9250611169602085016110f7565b9150604084013590509250925092565b60006020828403121561118b57600080fd5b5035919050565b6000602082840312156111a457600080fd5b611097826110f7565b60ff60f81b881681526000602060e060208401526111ce60e084018a61109e565b83810360408501526111e0818a61109e565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561123457835183529284019291840191600101611218565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561126157600080fd5b61126a886110f7565b9650611278602089016110f7565b95506040880135945060608801359350608088013560ff8116811461129c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156112cc57600080fd5b6112d5836110f7565b91506112e3602084016110f7565b90509250929050565b600181811c9082168061130057607f821691505b60208210810361132057634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561041b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220032864074dcac90a9b8186e95e61370c7efb95dabea071111e72945dbebddcb164736f6c63430008180033a2646970667358221220c6ee02d27f55199b8e4cacf6dd7b8bc5e8bf8fd16f217cf26dfb20e09aaabe0864736f6c63430008180033" -access(all) let erc721DeployerBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612657806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d3660046200043c565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c93660046200051a565b62000180565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002a7565b005b6000546001600160a01b0316620000cf565b620001066200012b366004620005fc565b620002bf565b6200010662000142366004620005fc565b6200036b565b60006001600160e01b0319821663476d399760e01b14806200017a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b031633146200020b576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a204f6e60448201527f6c792064656c656761746564206465706c6f7965722063616e206465706c6f7960648201526084015b60405180910390fd5b600080546001600160a01b031687878787876040516200022b906200042e565b6200023c969594939291906200066f565b604051809103906000f08015801562000259573d6000803e3d6000fd5b5090507fbebce54951ebf20c0dcd195a45bb2388d9ac8e38b5974e00bb63c5822dbe65f0818888888860405162000295959493929190620006f8565b60405180910390a19695505050505050565b620002b1620003af565b620002bd6000620003de565b565b620002c9620003af565b6001600160a01b03811662000349576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a20496e60448201527f76616c69642064656c656761746564206465706c6f7965722061646472657373606482015260840162000202565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b62000375620003af565b6001600160a01b038116620003a157604051631e4fbdf760e01b81526000600482015260240162000202565b620003ac81620003de565b50565b6000546001600160a01b03163314620002bd5760405163118cdaa760e01b815233600482015260240162000202565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611eb7806200076b83390190565b6000602082840312156200044f57600080fd5b81356001600160e01b0319811681146200046857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200049757600080fd5b813567ffffffffffffffff80821115620004b557620004b56200046f565b604051601f8301601f19908116603f01168101908282118183101715620004e057620004e06200046f565b81604052838152866020858801011115620004fa57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200053357600080fd5b853567ffffffffffffffff808211156200054c57600080fd5b6200055a89838a0162000485565b965060208801359150808211156200057157600080fd5b6200057f89838a0162000485565b955060408801359150808211156200059657600080fd5b620005a489838a0162000485565b94506060880135915080821115620005bb57600080fd5b620005c989838a0162000485565b93506080880135915080821115620005e057600080fd5b50620005ef8882890162000485565b9150509295509295909350565b6000602082840312156200060f57600080fd5b81356001600160a01b03811681146200046857600080fd5b6000815180845260005b818110156200064f5760208185018101518683018201520162000631565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006959083018862000627565b8281036040840152620006a9818862000627565b90508281036060840152620006bf818762000627565b90508281036080840152620006d5818662000627565b905082810360a0840152620006eb818562000627565b9998505050505050505050565b6001600160a01b038616815260a0602082018190526000906200071e9083018762000627565b828103604084015262000732818762000627565b9050828103606084015262000748818662000627565b905082810360808401526200075e818562000627565b9897505050505050505056fe60806040523480156200001157600080fd5b5060405162001eb738038062001eb7833981016040819052620000349162000202565b858585600062000045838262000386565b50600162000054828262000386565b5050506001600160a01b0381166200008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009181620000cb565b50600c620000a0848262000386565b50600d620000af838262000386565b50600e620000be828262000386565b5050505050505062000452565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200013557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016257600080fd5b81516001600160401b03808211156200017f576200017f6200013a565b604051601f8301601f19908116603f01168101908282118183101715620001aa57620001aa6200013a565b8160405283815260209250866020858801011115620001c857600080fd5b600091505b83821015620001ec5785820183015181830184015290820190620001cd565b6000602085830101528094505050505092915050565b60008060008060008060c087890312156200021c57600080fd5b62000227876200011d565b60208801519096506001600160401b03808211156200024557600080fd5b620002538a838b0162000150565b965060408901519150808211156200026a57600080fd5b620002788a838b0162000150565b955060608901519150808211156200028f57600080fd5b6200029d8a838b0162000150565b94506080890151915080821115620002b457600080fd5b620002c28a838b0162000150565b935060a0890151915080821115620002d957600080fd5b50620002e889828a0162000150565b9150509295509295509295565b600181811c908216806200030a57607f821691505b6020821081036200032b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000381576000816000526020600020601f850160051c810160208610156200035c5750805b601f850160051c820191505b818110156200037d5782815560010162000368565b5050505b505050565b81516001600160401b03811115620003a257620003a26200013a565b620003ba81620003b38454620002f5565b8462000331565b602080601f831160018114620003f25760008415620003d95750858301515b600019600386901b1c1916600185901b1785556200037d565b600085815260208120601f198616915b82811015620004235788860151825594840194600190910190840162000402565b5085821015620004425787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a5580620004626000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a76b4d56116100a2578063cd279c7c11610071578063cd279c7c146103a8578063e8a3d485146103bb578063e985e9c5146103c3578063f2fde38b146103d657600080fd5b8063a76b4d5614610372578063b49bbd941461037a578063b88d4fde14610382578063c87b56dd1461039557600080fd5b806394e29329116100de57806394e293291461034757806395d89b411461034f578063a159047b14610357578063a22cb4651461035f57600080fd5b806370a082311461031b578063715018a61461032e5780638da5cb5b1461033657600080fd5b80632f745c59116101715780634f558e791161014b5780634f558e79146102c25780634f6ccce7146102ed5780635e0a9661146103005780636352211e1461030857600080fd5b80632f745c591461028957806342842e0e1461029c57806342966c68146102af57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c57806318160ddd1461025157806318e97fd11461026357806323b872dd1461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611494565b6103e9565b60405190151581526020015b60405180910390f35b6102046103fa565b6040516101f39190611501565b61022461021f366004611514565b61048c565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611549565b6104b5565b005b6009545b6040519081526020016101f3565b61024f61027136600461161f565b6104c4565b61024f610284366004611666565b6104d6565b610255610297366004611549565b610566565b61024f6102aa366004611666565b6105cb565b61024f6102bd366004611514565b6105eb565b6101e76102d0366004611514565b6000908152600260205260409020546001600160a01b0316151590565b6102556102fb366004611514565b6105f7565b610204610650565b610224610316366004611514565b61065f565b6102556103293660046116a2565b61066a565b61024f6106b2565b600b546001600160a01b0316610224565b6102046106c6565b6102046106d5565b6102046106e4565b61024f61036d3660046116bd565b610772565b61020461077d565b61020461078a565b61024f6103903660046116f9565b610797565b6102046103a3366004611514565b6107ae565b61024f6103b6366004611775565b6107b9565b6102046107d5565b6101e76103d13660046117cc565b6107e4565b61024f6103e43660046116a2565b610812565b60006103f482610850565b92915050565b606060008054610409906117ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610435906117ff565b80156104825780601f1061045757610100808354040283529160200191610482565b820191906000526020600020905b81548152906001019060200180831161046557829003601f168201915b5050505050905090565b600061049782610875565b506000828152600460205260409020546001600160a01b03166103f4565b6104c08282336108ae565b5050565b6104cc6108bb565b6104c082826108e8565b6001600160a01b03821661050557604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610512838333610938565b9050836001600160a01b0316816001600160a01b031614610560576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016104fc565b50505050565b60006105718361066a565b82106105a25760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016104fc565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6105e683838360405180602001604052806000815250610797565b505050565b6104c060008233610938565b600061060260095490565b821061062b5760405163295f44f760e21b815260006004820152602481018390526044016104fc565b6009828154811061063e5761063e611839565b90600052602060002001549050919050565b6060600d8054610409906117ff565b60006103f482610875565b60006001600160a01b038216610696576040516322718ad960e21b8152600060048201526024016104fc565b506001600160a01b031660009081526003602052604090205490565b6106ba6108bb565b6106c4600061094d565b565b6060600c8054610409906117ff565b606060018054610409906117ff565b600d80546106f1906117ff565b80601f016020809104026020016040519081016040528092919081815260200182805461071d906117ff565b801561076a5780601f1061073f5761010080835404028352916020019161076a565b820191906000526020600020905b81548152906001019060200180831161074d57829003601f168201915b505050505081565b6104c033838361099f565b600e80546106f1906117ff565b600c80546106f1906117ff565b6107a28484846104d6565b61056084848484610a3e565b60606103f482610b67565b6107c16108bb565b6107cb8383610c70565b6105e682826108e8565b6060600e8054610409906117ff565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61081a6108bb565b6001600160a01b03811661084457604051631e4fbdf760e01b8152600060048201526024016104fc565b61084d8161094d565b50565b60006001600160e01b0319821663780e9d6360e01b14806103f457506103f482610c8a565b6000818152600260205260408120546001600160a01b0316806103f457604051637e27328960e01b8152600481018490526024016104fc565b6105e68383836001610caf565b600b546001600160a01b031633146106c45760405163118cdaa760e01b81523360048201526024016104fc565b6000828152600660205260409020610900828261189f565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6000610945848484610db5565b949350505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166109d157604051630b61174360e31b81526001600160a01b03831660048201526024016104fc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561056057604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a8090339088908790879060040161195f565b6020604051808303816000875af1925050508015610abb575060408051601f3d908101601f19168201909252610ab89181019061199c565b60015b610b24573d808015610ae9576040519150601f19603f3d011682016040523d82523d6000602084013e610aee565b606091505b508051600003610b1c57604051633250574960e11b81526001600160a01b03851660048201526024016104fc565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b6057604051633250574960e11b81526001600160a01b03851660048201526024016104fc565b5050505050565b6060610b7282610875565b5060008281526006602052604081208054610b8c906117ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb8906117ff565b8015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b505050505090506000610c2360408051602081019091526000815290565b90508051600003610c35575092915050565b815115610c67578082604051602001610c4f9291906119b9565b60405160208183030381529060405292505050919050565b61094584610e82565b6104c0828260405180602001604052806000815250610ef7565b60006001600160e01b03198216632483248360e11b14806103f457506103f482610f0e565b8080610cc357506001600160a01b03821615155b15610d85576000610cd384610875565b90506001600160a01b03831615801590610cff5750826001600160a01b0316816001600160a01b031614155b8015610d125750610d1081846107e4565b155b15610d3b5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016104fc565b8115610d835783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610dc3858585610f5e565b90506001600160a01b038116610e2057610e1b84600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b610e43565b846001600160a01b0316816001600160a01b031614610e4357610e438185611057565b6001600160a01b038516610e5f57610e5a846110e8565b610945565b846001600160a01b0316816001600160a01b031614610945576109458585611197565b6060610e8d82610875565b506000610ea560408051602081019091526000815290565b90506000815111610ec55760405180602001604052806000815250610ef0565b80610ecf846111e7565b604051602001610ee09291906119b9565b6040516020818303038152906040525b9392505050565b610f01838361127a565b6105e66000848484610a3e565b60006001600160e01b031982166380ac58cd60e01b1480610f3f57506001600160e01b03198216635b5e139f60e01b145b806103f457506301ffc9a760e01b6001600160e01b03198316146103f4565b6000828152600260205260408120546001600160a01b0390811690831615610f8b57610f8b8184866112df565b6001600160a01b03811615610fc957610fa8600085600080610caf565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610ff8576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006110628361066a565b6000838152600860205260409020549091508082146110b5576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906110fa906001906119e8565b6000838152600a60205260408120546009805493945090928490811061112257611122611839565b90600052602060002001549050806009838154811061114357611143611839565b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061117b5761117b611a09565b6001900381819060005260206000200160009055905550505050565b600060016111a48461066a565b6111ae91906119e8565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b606060006111f483611343565b600101905060008167ffffffffffffffff81111561121457611214611573565b6040519080825280601f01601f19166020018201604052801561123e576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461124857509392505050565b6001600160a01b0382166112a457604051633250574960e11b8152600060048201526024016104fc565b60006112b283836000610938565b90506001600160a01b038116156105e6576040516339e3563760e11b8152600060048201526024016104fc565b6112ea83838361141b565b6105e6576001600160a01b03831661131857604051637e27328960e01b8152600481018290526024016104fc565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016104fc565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106113825772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106113ae576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106113cc57662386f26fc10000830492506010015b6305f5e10083106113e4576305f5e100830492506008015b61271083106113f857612710830492506004015b6064831061140a576064830492506002015b600a83106103f45760010192915050565b60006001600160a01b038316158015906109455750826001600160a01b0316846001600160a01b03161480611455575061145584846107e4565b806109455750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b03198116811461084d57600080fd5b6000602082840312156114a657600080fd5b8135610ef08161147e565b60005b838110156114cc5781810151838201526020016114b4565b50506000910152565b600081518084526114ed8160208601602086016114b1565b601f01601f19169290920160200192915050565b602081526000610ef060208301846114d5565b60006020828403121561152657600080fd5b5035919050565b80356001600160a01b038116811461154457600080fd5b919050565b6000806040838503121561155c57600080fd5b6115658361152d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156115a4576115a4611573565b604051601f8501601f19908116603f011681019082821181831017156115cc576115cc611573565b816040528093508581528686860111156115e557600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261161057600080fd5b610ef083833560208501611589565b6000806040838503121561163257600080fd5b82359150602083013567ffffffffffffffff81111561165057600080fd5b61165c858286016115ff565b9150509250929050565b60008060006060848603121561167b57600080fd5b6116848461152d565b92506116926020850161152d565b9150604084013590509250925092565b6000602082840312156116b457600080fd5b610ef08261152d565b600080604083850312156116d057600080fd5b6116d98361152d565b9150602083013580151581146116ee57600080fd5b809150509250929050565b6000806000806080858703121561170f57600080fd5b6117188561152d565b93506117266020860161152d565b925060408501359150606085013567ffffffffffffffff81111561174957600080fd5b8501601f8101871361175a57600080fd5b61176987823560208401611589565b91505092959194509250565b60008060006060848603121561178a57600080fd5b6117938461152d565b925060208401359150604084013567ffffffffffffffff8111156117b657600080fd5b6117c2868287016115ff565b9150509250925092565b600080604083850312156117df57600080fd5b6117e88361152d565b91506117f66020840161152d565b90509250929050565b600181811c9082168061181357607f821691505b60208210810361183357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b601f8211156105e6576000816000526020600020601f850160051c810160208610156118785750805b601f850160051c820191505b8181101561189757828155600101611884565b505050505050565b815167ffffffffffffffff8111156118b9576118b9611573565b6118cd816118c784546117ff565b8461184f565b602080601f83116001811461190257600084156118ea5750858301515b600019600386901b1c1916600185901b178555611897565b600085815260208120601f198616915b8281101561193157888601518255948401946001909101908401611912565b508582101561194f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611992908301846114d5565b9695505050505050565b6000602082840312156119ae57600080fd5b8151610ef08161147e565b600083516119cb8184602088016114b1565b8351908301906119df8183602088016114b1565b01949350505050565b818103818111156103f457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122074d34aec07c0da793ce5cac74069bf4177b7594babf4fede87db849ea2f57b3764736f6c63430008170033a2646970667358221220953493586f5fb5670e80849013b6c27540a3f06c628c3046b81886afa405e0c664736f6c63430008170033" +access(all) let erc721DeployerBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612732806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000875760003560e01c8063715018a61162000062578063715018a614620000fc5780638da5cb5b1462000108578063ee2d8496146200011a578063f2fde38b146200013157600080fd5b806301ffc9a7146200008c578063476d399714620000b85780636418e6de14620000e8575b600080fd5b620000a36200009d36600462000488565b62000148565b60405190151581526020015b60405180910390f35b620000cf620000c936600462000566565b6200019c565b6040516001600160a01b039091168152602001620000af565b600154620000cf906001600160a01b031681565b62000106620002cb565b005b6000546001600160a01b0316620000cf565b620001066200012b36600462000648565b620002e3565b620001066200014236600462000648565b620003b7565b60006001600160e01b0319821663476d399760e01b14806200017a57506001600160e01b03198216630704183b60e11b145b806200019657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b0316331462000227576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a204f6e60448201527f6c792064656c656761746564206465706c6f7965722063616e206465706c6f7960648201526084015b60405180910390fd5b600080546001600160a01b0316878787878760405162000247906200047a565b6200025896959493929190620006bb565b604051809103906000f08015801562000275573d6000803e3d6000fd5b509050806001600160a01b03167fac166d2e64b2aaf94e9dfc7205dc17bc2a537b28fab78dfb70d79325657a8d3f88888888604051620002b9949392919062000744565b60405180910390a29695505050505050565b620002d5620003fb565b620002e160006200042a565b565b620002ed620003fb565b6001600160a01b0381166200036d576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d427269646765644552433732314465706c6f7965723a20496e60448201527f76616c69642064656c656761746564206465706c6f796572206164647265737360648201526084016200021e565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fc553df5d2803898b31fac480ec2b45d67b73294d4c94a93f069f47400f76bdbb90600090a250565b620003c1620003fb565b6001600160a01b038116620003ed57604051631e4fbdf760e01b8152600060048201526024016200021e565b620003f8816200042a565b50565b6000546001600160a01b03163314620002e15760405163118cdaa760e01b81523360048201526024016200021e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f5880620007a583390190565b6000602082840312156200049b57600080fd5b81356001600160e01b031981168114620004b457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620004e357600080fd5b813567ffffffffffffffff80821115620005015762000501620004bb565b604051601f8301601f19908116603f011681019082821181831017156200052c576200052c620004bb565b816040528381528660208588010111156200054657600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200057f57600080fd5b853567ffffffffffffffff808211156200059857600080fd5b620005a689838a01620004d1565b96506020880135915080821115620005bd57600080fd5b620005cb89838a01620004d1565b95506040880135915080821115620005e257600080fd5b620005f089838a01620004d1565b945060608801359150808211156200060757600080fd5b6200061589838a01620004d1565b935060808801359150808211156200062c57600080fd5b506200063b88828901620004d1565b9150509295509295909350565b6000602082840312156200065b57600080fd5b81356001600160a01b0381168114620004b457600080fd5b6000815180845260005b818110156200069b576020818501810151868301820152016200067d565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038716815260c060208201819052600090620006e19083018862000673565b8281036040840152620006f5818862000673565b905082810360608401526200070b818762000673565b9050828103608084015262000721818662000673565b905082810360a084015262000737818562000673565b9998505050505050505050565b60808152600062000759608083018762000673565b82810360208401526200076d818762000673565b9050828103604084015262000783818662000673565b9050828103606084015262000799818562000673565b97965050505050505056fe60806040523480156200001157600080fd5b5060405162001f5838038062001f58833981016040819052620000349162000202565b858585600062000045838262000386565b50600162000054828262000386565b5050506001600160a01b0381166200008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009181620000cb565b50600c620000a0848262000386565b50600d620000af838262000386565b50600e620000be828262000386565b5050505050505062000452565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200013557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016257600080fd5b81516001600160401b03808211156200017f576200017f6200013a565b604051601f8301601f19908116603f01168101908282118183101715620001aa57620001aa6200013a565b8160405283815260209250866020858801011115620001c857600080fd5b600091505b83821015620001ec5785820183015181830184015290820190620001cd565b6000602085830101528094505050505092915050565b60008060008060008060c087890312156200021c57600080fd5b62000227876200011d565b60208801519096506001600160401b03808211156200024557600080fd5b620002538a838b0162000150565b965060408901519150808211156200026a57600080fd5b620002788a838b0162000150565b955060608901519150808211156200028f57600080fd5b6200029d8a838b0162000150565b94506080890151915080821115620002b457600080fd5b620002c28a838b0162000150565b935060a0890151915080821115620002d957600080fd5b50620002e889828a0162000150565b9150509295509295509295565b600181811c908216806200030a57607f821691505b6020821081036200032b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000381576000816000526020600020601f850160051c810160208610156200035c5750805b601f850160051c820191505b818110156200037d5782815560010162000368565b5050505b505050565b81516001600160401b03811115620003a257620003a26200013a565b620003ba81620003b38454620002f5565b8462000331565b602080601f831160018114620003f25760008415620003d95750858301515b600019600386901b1c1916600185901b1785556200037d565b600085815260208120601f198616915b82811015620004235788860151825594840194600190910190840162000402565b5085821015620004425787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611af680620004626000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806366bd8dc011610104578063a76b4d56116100a2578063cd279c7c11610071578063cd279c7c146103a8578063e8a3d485146103bb578063e985e9c5146103c3578063f2fde38b146103d657600080fd5b8063a76b4d5614610372578063b88d4fde1461037a578063bef43b9d1461038d578063c87b56dd1461039557600080fd5b80638da5cb5b116100de5780638da5cb5b1461033e57806395d89b411461034f57806397d9a15914610357578063a22cb4651461035f57600080fd5b806366bd8dc01461031b57806370a0823114610323578063715018a61461033657600080fd5b806323b872dd1161017157806342966c681161014b57806342966c68146102b75780634f558e79146102ca5780634f6ccce7146102f55780636352211e1461030857600080fd5b806323b872dd1461027e5780632f745c591461029157806342842e0e146102a457600080fd5b8063095ea7b3116101ad578063095ea7b31461023c57806318160ddd1461025157806318e97fd1146102635780631a6228961461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611535565b6103e9565b60405190151581526020015b60405180910390f35b61020461049b565b6040516101f391906115a2565b61022461021f3660046115b5565b61052d565b6040516001600160a01b0390911681526020016101f3565b61024f61024a3660046115ea565b610556565b005b6009545b6040519081526020016101f3565b61024f6102713660046116c0565b610565565b610204610577565b61024f61028c366004611707565b610586565b61025561029f3660046115ea565b610616565b61024f6102b2366004611707565b61067b565b61024f6102c53660046115b5565b61069b565b6101e76102d83660046115b5565b6000908152600260205260409020546001600160a01b0316151590565b6102556103033660046115b5565b6106a7565b6102246103163660046115b5565b610700565b61020461070b565b610255610331366004611743565b610799565b61024f6107e1565b600b546001600160a01b0316610224565b6102046107f5565b610204610804565b61024f61036d36600461175e565b610813565b61020461081e565b61024f61038836600461179a565b61082b565b610204610842565b6102046103a33660046115b5565b61084f565b61024f6103b6366004611816565b61085a565b610204610876565b6101e76103d136600461186d565b610885565b61024f6103e4366004611743565b6108b3565b60006001600160e01b031982166301ffc9a760e01b148061041a57506001600160e01b03198216635b5e139f60e01b145b8061043557506001600160e01b0319821663780e9d6360e01b145b8061045057506001600160e01b03198216630852cd8d60e31b145b8061046b57506001600160e01b03198216630704183b60e11b145b8061048657506001600160e01b03198216638dbb89cf60e01b145b806104955750610495826108f1565b92915050565b6060600080546104aa906118a0565b80601f01602080910402602001604051908101604052809291908181526020018280546104d6906118a0565b80156105235780601f106104f857610100808354040283529160200191610523565b820191906000526020600020905b81548152906001019060200180831161050657829003601f168201915b5050505050905090565b600061053882610916565b506000828152600460205260409020546001600160a01b0316610495565b61056182823361094f565b5050565b61056d61095c565b6105618282610989565b6060600c80546104aa906118a0565b6001600160a01b0382166105b557604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006105c28383336109d9565b9050836001600160a01b0316816001600160a01b031614610610576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016105ac565b50505050565b600061062183610799565b82106106525760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016105ac565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6106968383836040518060200160405280600081525061082b565b505050565b610561600082336109d9565b60006106b260095490565b82106106db5760405163295f44f760e21b815260006004820152602481018390526044016105ac565b600982815481106106ee576106ee6118da565b90600052602060002001549050919050565b600061049582610916565b600c8054610718906118a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610744906118a0565b80156107915780601f1061076657610100808354040283529160200191610791565b820191906000526020600020905b81548152906001019060200180831161077457829003601f168201915b505050505081565b60006001600160a01b0382166107c5576040516322718ad960e21b8152600060048201526024016105ac565b506001600160a01b031660009081526003602052604090205490565b6107e961095c565b6107f360006109ee565b565b6060600180546104aa906118a0565b6060600d80546104aa906118a0565b610561338383610a40565b600e8054610718906118a0565b610836848484610586565b61061084848484610adf565b600d8054610718906118a0565b606061049582610c08565b61086261095c565b61086c8383610d11565b6106968282610989565b6060600e80546104aa906118a0565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6108bb61095c565b6001600160a01b0381166108e557604051631e4fbdf760e01b8152600060048201526024016105ac565b6108ee816109ee565b50565b60006001600160e01b0319821663780e9d6360e01b1480610495575061049582610d2b565b6000818152600260205260408120546001600160a01b03168061049557604051637e27328960e01b8152600481018490526024016105ac565b6106968383836001610d50565b600b546001600160a01b031633146107f35760405163118cdaa760e01b81523360048201526024016105ac565b60008281526006602052604090206109a18282611940565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006109e6848484610e56565b949350505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610a7257604051630b61174360e31b81526001600160a01b03831660048201526024016105ac565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561061057604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610b21903390889087908790600401611a00565b6020604051808303816000875af1925050508015610b5c575060408051601f3d908101601f19168201909252610b5991810190611a3d565b60015b610bc5573d808015610b8a576040519150601f19603f3d011682016040523d82523d6000602084013e610b8f565b606091505b508051600003610bbd57604051633250574960e11b81526001600160a01b03851660048201526024016105ac565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610c0157604051633250574960e11b81526001600160a01b03851660048201526024016105ac565b5050505050565b6060610c1382610916565b5060008281526006602052604081208054610c2d906118a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c59906118a0565b8015610ca65780601f10610c7b57610100808354040283529160200191610ca6565b820191906000526020600020905b815481529060010190602001808311610c8957829003601f168201915b505050505090506000610cc460408051602081019091526000815290565b90508051600003610cd6575092915050565b815115610d08578082604051602001610cf0929190611a5a565b60405160208183030381529060405292505050919050565b6109e684610f23565b610561828260405180602001604052806000815250610f98565b60006001600160e01b03198216632483248360e11b1480610495575061049582610faf565b8080610d6457506001600160a01b03821615155b15610e26576000610d7484610916565b90506001600160a01b03831615801590610da05750826001600160a01b0316816001600160a01b031614155b8015610db35750610db18184610885565b155b15610ddc5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016105ac565b8115610e245783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610e64858585610fff565b90506001600160a01b038116610ec157610ebc84600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b610ee4565b846001600160a01b0316816001600160a01b031614610ee457610ee481856110f8565b6001600160a01b038516610f0057610efb84611189565b6109e6565b846001600160a01b0316816001600160a01b0316146109e6576109e68585611238565b6060610f2e82610916565b506000610f4660408051602081019091526000815290565b90506000815111610f665760405180602001604052806000815250610f91565b80610f7084611288565b604051602001610f81929190611a5a565b6040516020818303038152906040525b9392505050565b610fa2838361131b565b6106966000848484610adf565b60006001600160e01b031982166380ac58cd60e01b1480610fe057506001600160e01b03198216635b5e139f60e01b145b8061049557506301ffc9a760e01b6001600160e01b0319831614610495565b6000828152600260205260408120546001600160a01b039081169083161561102c5761102c818486611380565b6001600160a01b0381161561106a57611049600085600080610d50565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615611099576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061110383610799565b600083815260086020526040902054909150808214611156576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b60095460009061119b90600190611a89565b6000838152600a6020526040812054600980549394509092849081106111c3576111c36118da565b9060005260206000200154905080600983815481106111e4576111e46118da565b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061121c5761121c611aaa565b6001900381819060005260206000200160009055905550505050565b6000600161124584610799565b61124f9190611a89565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b60606000611295836113e4565b600101905060008167ffffffffffffffff8111156112b5576112b5611614565b6040519080825280601f01601f1916602001820160405280156112df576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846112e957509392505050565b6001600160a01b03821661134557604051633250574960e11b8152600060048201526024016105ac565b6000611353838360006109d9565b90506001600160a01b03811615610696576040516339e3563760e11b8152600060048201526024016105ac565b61138b8383836114bc565b610696576001600160a01b0383166113b957604051637e27328960e01b8152600481018290526024016105ac565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016105ac565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114235772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061144f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061146d57662386f26fc10000830492506010015b6305f5e1008310611485576305f5e100830492506008015b612710831061149957612710830492506004015b606483106114ab576064830492506002015b600a83106104955760010192915050565b60006001600160a01b038316158015906109e65750826001600160a01b0316846001600160a01b031614806114f657506114f68484610885565b806109e65750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b0319811681146108ee57600080fd5b60006020828403121561154757600080fd5b8135610f918161151f565b60005b8381101561156d578181015183820152602001611555565b50506000910152565b6000815180845261158e816020860160208601611552565b601f01601f19169290920160200192915050565b602081526000610f916020830184611576565b6000602082840312156115c757600080fd5b5035919050565b80356001600160a01b03811681146115e557600080fd5b919050565b600080604083850312156115fd57600080fd5b611606836115ce565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561164557611645611614565b604051601f8501601f19908116603f0116810190828211818310171561166d5761166d611614565b8160405280935085815286868601111561168657600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126116b157600080fd5b610f918383356020850161162a565b600080604083850312156116d357600080fd5b82359150602083013567ffffffffffffffff8111156116f157600080fd5b6116fd858286016116a0565b9150509250929050565b60008060006060848603121561171c57600080fd5b611725846115ce565b9250611733602085016115ce565b9150604084013590509250925092565b60006020828403121561175557600080fd5b610f91826115ce565b6000806040838503121561177157600080fd5b61177a836115ce565b91506020830135801515811461178f57600080fd5b809150509250929050565b600080600080608085870312156117b057600080fd5b6117b9856115ce565b93506117c7602086016115ce565b925060408501359150606085013567ffffffffffffffff8111156117ea57600080fd5b8501601f810187136117fb57600080fd5b61180a8782356020840161162a565b91505092959194509250565b60008060006060848603121561182b57600080fd5b611834846115ce565b925060208401359150604084013567ffffffffffffffff81111561185757600080fd5b611863868287016116a0565b9150509250925092565b6000806040838503121561188057600080fd5b611889836115ce565b9150611897602084016115ce565b90509250929050565b600181811c908216806118b457607f821691505b6020821081036118d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b601f821115610696576000816000526020600020601f850160051c810160208610156119195750805b601f850160051c820191505b8181101561193857828155600101611925565b505050505050565b815167ffffffffffffffff81111561195a5761195a611614565b61196e8161196884546118a0565b846118f0565b602080601f8311600181146119a3576000841561198b5750858301515b600019600386901b1c1916600185901b178555611938565b600085815260208120601f198616915b828110156119d2578886015182559484019460019091019084016119b3565b50858210156119f05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611a3390830184611576565b9695505050505050565b600060208284031215611a4f57600080fd5b8151610f918161151f565b60008351611a6c818460208801611552565b835190830190611a80818360208801611552565b01949350505050565b8181038181111561049557634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122065ff7beb447ca14fd56b871e63b2ee2ad2b81577c507c1d9dae77e2a2b3163de64736f6c63430008180033a2646970667358221220a11632f840b5155cba200ee4b221a4661395c62d53afbc1a67e43bc27a0c6a9064736f6c63430008180033" -access(all) let registryBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610058565b50600080546001600160a01b031916331790556100aa565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6108a5806100b96000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063862119ae11610071578063862119ae146101315780638da5cb5b14610144578063a6de610514610155578063b3d5dbdc14610168578063f2fde38b14610188578063faab9d391461019b57600080fd5b806301ffc9a7146100ae57806304433bbc146100d65780632b20e39714610101578063522791d114610114578063715018a614610129575b600080fd5b6100c16100bc36600461051c565b6101ae565b60405190151581526020015b60405180910390f35b6100e96100e43660046105f0565b6101e5565b6040516001600160a01b0390911681526020016100cd565b6000546100e9906001600160a01b031681565b610127610122366004610649565b610216565b005b6101276102b7565b6100c161013f3660046105f0565b6102cb565b6003546001600160a01b03166100e9565b6100c1610163366004610697565b610308565b61017b610176366004610697565b610334565b6040516100cd91906106d6565b610127610196366004610697565b6103e0565b6101276101a9366004610697565b61041e565b60006001600160e01b0319821663976998cb60e01b14806101df57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006001826040516101f79190610709565b908152604051908190036020019020546001600160a01b031692915050565b6000546001600160a01b031633146102a95760405162461bcd60e51b815260206004820152604560248201527f466c6f774272696467654465706c6f796d656e7452656769737472793a204f6e60448201527f6c79207265676973747261722063616e207265676973746572206173736f636960648201526430ba34b7b760d91b608482015260a4015b60405180910390fd5b6102b38282610444565b5050565b6102bf61049d565b6102c960006104ca565b565b6000806001600160a01b03166001836040516102e79190610709565b908152604051908190036020019020546001600160a01b0316141592915050565b6001600160a01b0381166000908152600260205260408120805461032b90610725565b15159392505050565b6001600160a01b038116600090815260026020526040902080546060919061035b90610725565b80601f016020809104026020016040519081016040528092919081815260200182805461038790610725565b80156103d45780601f106103a9576101008083540402835291602001916103d4565b820191906000526020600020905b8154815290600101906020018083116103b757829003601f168201915b50505050509050919050565b6103e861049d565b6001600160a01b03811661041257604051631e4fbdf760e01b8152600060048201526024016102a0565b61041b816104ca565b50565b61042661049d565b600080546001600160a01b0319166001600160a01b03831617905550565b806001836040516104559190610709565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b03948516179055918316600090815260029091522061049883826107af565b505050565b6003546001600160a01b031633146102c95760405163118cdaa760e01b81523360048201526024016102a0565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561052e57600080fd5b81356001600160e01b03198116811461054657600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261057457600080fd5b813567ffffffffffffffff8082111561058f5761058f61054d565b604051601f8301601f19908116603f011681019082821181831017156105b7576105b761054d565b816040528381528660208588010111156105d057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561060257600080fd5b813567ffffffffffffffff81111561061957600080fd5b61062584828501610563565b949350505050565b80356001600160a01b038116811461064457600080fd5b919050565b6000806040838503121561065c57600080fd5b823567ffffffffffffffff81111561067357600080fd5b61067f85828601610563565b92505061068e6020840161062d565b90509250929050565b6000602082840312156106a957600080fd5b6105468261062d565b60005b838110156106cd5781810151838201526020016106b5565b50506000910152565b60208152600082518060208401526106f58160408501602087016106b2565b601f01601f19169190910160400192915050565b6000825161071b8184602087016106b2565b9190910192915050565b600181811c9082168061073957607f821691505b60208210810361075957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610498576000816000526020600020601f850160051c810160208610156107885750805b601f850160051c820191505b818110156107a757828155600101610794565b505050505050565b815167ffffffffffffffff8111156107c9576107c961054d565b6107dd816107d78454610725565b8461075f565b602080601f83116001811461081257600084156107fa5750858301515b600019600386901b1c1916600185901b1785556107a7565b600085815260208120601f198616915b8281101561084157888601518255948401946001909101908401610822565b508582101561085f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212204229c8738eb6a99e2fe8a2cd0be82f006719cf059ff7c5b2f748353eb7c5da4c64736f6c63430008170033" +access(all) let registryBytecode = "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610058565b50600080546001600160a01b031916331790556100aa565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610bbd806100b96000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063862119ae11610071578063862119ae146101315780638da5cb5b14610144578063a6de610514610155578063b3d5dbdc14610168578063f2fde38b14610188578063faab9d391461019b57600080fd5b806301ffc9a7146100ae57806304433bbc146100d65780632b20e39714610101578063522791d114610114578063715018a614610129575b600080fd5b6100c16100bc366004610833565b6101ae565b60405190151581526020015b60405180910390f35b6100e96100e4366004610907565b6101e5565b6040516001600160a01b0390911681526020016100cd565b6000546100e9906001600160a01b031681565b610127610122366004610960565b610216565b005b6101276102b7565b6100c161013f366004610907565b6102cb565b6003546001600160a01b03166100e9565b6100c16101633660046109ae565b610308565b61017b6101763660046109ae565b610334565b6040516100cd91906109ed565b6101276101963660046109ae565b6103e0565b6101276101a93660046109ae565b61041e565b60006001600160e01b0319821663976998cb60e01b14806101df57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006001826040516101f79190610a20565b908152604051908190036020019020546001600160a01b031692915050565b6000546001600160a01b031633146102a95760405162461bcd60e51b815260206004820152604560248201527f466c6f774272696467654465706c6f796d656e7452656769737472793a204f6e60448201527f6c79207265676973747261722063616e207265676973746572206173736f636960648201526430ba34b7b760d91b608482015260a4015b60405180910390fd5b6102b3828261042f565b5050565b6102bf6106fd565b6102c9600061072a565b565b6000806001600160a01b03166001836040516102e79190610a20565b908152604051908190036020019020546001600160a01b0316141592915050565b6001600160a01b0381166000908152600260205260408120805461032b90610a3c565b15159392505050565b6001600160a01b038116600090815260026020526040902080546060919061035b90610a3c565b80601f016020809104026020016040519081016040528092919081815260200182805461038790610a3c565b80156103d45780601f106103a9576101008083540402835291602001916103d4565b820191906000526020600020905b8154815290600101906020018083116103b757829003601f168201915b50505050509050919050565b6103e86106fd565b6001600160a01b03811661041257604051631e4fbdf760e01b8152600060048201526024016102a0565b61041b8161072a565b50565b6104266106fd565b61041b8161077c565b6001600160a01b0381166104ab5760405162461bcd60e51b815260206004820152603760248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436f6e747260448201527f61637420616464726573732063616e6e6f74206265203000000000000000000060648201526084016102a0565b81516000036105225760405162461bcd60e51b815260206004820152603d60248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436164656e60448201527f6365206964656e7469666965722063616e6e6f7420626520656d70747900000060648201526084016102a0565b60006001600160a01b031660018360405161053d9190610a20565b908152604051908190036020019020546001600160a01b0316146105cb576040805162461bcd60e51b81526020600482015260248101919091527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436164656e60448201527f6365206964656e74696669657220616c7265616479207265676973746572656460648201526084016102a0565b6001600160a01b038116600090815260026020526040902080546105ee90610a3c565b1590506106635760405162461bcd60e51b815260206004820152603e60248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20436f6e747260448201527f616374206164647265737320616c72656164792072656769737465726564000060648201526084016102a0565b806001836040516106749190610a20565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b0394851617905591831660009081526002909152206106b78382610ac7565b50806001600160a01b03167f25d7ffc1de7be1c9b0762be63022756c4773f73211c044d668da6bbcba3e7f14836040516106f191906109ed565b60405180910390a25050565b6003546001600160a01b031633146102c95760405163118cdaa760e01b81523360048201526024016102a0565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0381166107eb5760405162461bcd60e51b815260206004820152603060248201527f466c6f7745564d4465706c6f796d656e7452656769737472793a20526567697360448201526f0747261722063616e6e6f7420626520360841b60648201526084016102a0565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff90b3304151c89847ba28c08c86e9391dd12ef3a402cba7d3728776a36f29d1191a250565b60006020828403121561084557600080fd5b81356001600160e01b03198116811461085d57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261088b57600080fd5b813567ffffffffffffffff808211156108a6576108a6610864565b604051601f8301601f19908116603f011681019082821181831017156108ce576108ce610864565b816040528381528660208588010111156108e757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561091957600080fd5b813567ffffffffffffffff81111561093057600080fd5b61093c8482850161087a565b949350505050565b80356001600160a01b038116811461095b57600080fd5b919050565b6000806040838503121561097357600080fd5b823567ffffffffffffffff81111561098a57600080fd5b6109968582860161087a565b9250506109a560208401610944565b90509250929050565b6000602082840312156109c057600080fd5b61085d82610944565b60005b838110156109e45781810151838201526020016109cc565b50506000910152565b6020815260008251806020840152610a0c8160408501602087016109c9565b601f01601f19169190910160400192915050565b60008251610a328184602087016109c9565b9190910192915050565b600181811c90821680610a5057607f821691505b602082108103610a7057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ac2576000816000526020600020601f850160051c81016020861015610a9f5750805b601f850160051c820191505b81811015610abe57828155600101610aab565b5050505b505050565b815167ffffffffffffffff811115610ae157610ae1610864565b610af581610aef8454610a3c565b84610a76565b602080601f831160018114610b2a5760008415610b125750858301515b600019600386901b1c1916600185901b178555610abe565b600085815260208120601f198616915b82811015610b5957888601518255948401946001909101908401610b3a565b5085821015610b775787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea26469706673582212207bc4fe07fbc245f342675c43729c0cf0da0a7b16d24fef9f2aac1a401e334c8964736f6c63430008180033" access(all) let compiledERC721Bytecode = "60806040523480156200001157600080fd5b5033604051806040016040528060048152602001634e414d4560e01b8152506040518060400160405280600681526020016514d6535093d360d21b8152508160009081620000609190620001ac565b5060016200006f8282620001ac565b5050506001600160a01b038116620000a157604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000ac81620000b3565b5062000278565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013057607f821691505b6020821081036200015157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001a7576000816000526020600020601f850160051c81016020861015620001825750805b601f850160051c820191505b81811015620001a3578281556001016200018e565b5050505b505050565b81516001600160401b03811115620001c857620001c862000105565b620001e081620001d984546200011b565b8462000157565b602080601f831160018114620002185760008415620001ff5750858301515b600019600386901b1c1916600185901b178555620001a3565b600085815260208120601f198616915b82811015620002495788860151825594840194600190910190840162000228565b5085821015620002685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61143080620002886000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063b88d4fde11610071578063b88d4fde14610239578063c87b56dd1461024c578063cd279c7c1461025f578063e985e9c514610272578063f2fde38b1461028557600080fd5b8063715018a6146102055780638da5cb5b1461020d57806395d89b411461021e578063a22cb4651461022657600080fd5b806323b872dd116100e957806323b872dd1461019857806342842e0e146101ab57806342966c68146101be5780636352211e146101d157806370a08231146101e457600080fd5b806301ffc9a71461011b57806306fdde0314610143578063081812fc14610158578063095ea7b314610183575b600080fd5b61012e610129366004610f0f565b610298565b60405190151581526020015b60405180910390f35b61014b6102a9565b60405161013a9190610f7c565b61016b610166366004610f8f565b61033b565b6040516001600160a01b03909116815260200161013a565b610196610191366004610fc4565b610364565b005b6101966101a6366004610fee565b610373565b6101966101b9366004610fee565b610403565b6101966101cc366004610f8f565b610423565b61016b6101df366004610f8f565b61042f565b6101f76101f236600461102a565b61043a565b60405190815260200161013a565b610196610482565b6007546001600160a01b031661016b565b61014b610496565b610196610234366004611045565b6104a5565b61019661024736600461110d565b6104b0565b61014b61025a366004610f8f565b6104c7565b61019661026d366004611189565b6104d2565b61012e6102803660046111f4565b6104ee565b61019661029336600461102a565b61051c565b60006102a38261055a565b92915050565b6060600080546102b890611227565b80601f01602080910402602001604051908101604052809291908181526020018280546102e490611227565b80156103315780601f1061030657610100808354040283529160200191610331565b820191906000526020600020905b81548152906001019060200180831161031457829003601f168201915b5050505050905090565b60006103468261057f565b506000828152600460205260409020546001600160a01b03166102a3565b61036f8282336105b8565b5050565b6001600160a01b0382166103a257604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103af8383336105c5565b9050836001600160a01b0316816001600160a01b0316146103fd576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610399565b50505050565b61041e838383604051806020016040528060008152506104b0565b505050565b61036f600082336105c5565b60006102a38261057f565b60006001600160a01b038216610466576040516322718ad960e21b815260006004820152602401610399565b506001600160a01b031660009081526003602052604090205490565b61048a6106be565b61049460006106eb565b565b6060600180546102b890611227565b61036f33838361073d565b6104bb848484610373565b6103fd848484846107dc565b60606102a382610905565b6104da6106be565b6104e48383610a16565b61041e8282610a30565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6105246106be565b6001600160a01b03811661054e57604051631e4fbdf760e01b815260006004820152602401610399565b610557816106eb565b50565b60006001600160e01b03198216632483248360e11b14806102a357506102a382610a80565b6000818152600260205260408120546001600160a01b0316806102a357604051637e27328960e01b815260048101849052602401610399565b61041e8383836001610ad0565b6000828152600260205260408120546001600160a01b03908116908316156105f2576105f2818486610bd6565b6001600160a01b038116156106305761060f600085600080610ad0565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b0385161561065f576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6007546001600160a01b031633146104945760405163118cdaa760e01b8152336004820152602401610399565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661076f57604051630b61174360e31b81526001600160a01b0383166004820152602401610399565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156103fd57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061081e903390889087908790600401611261565b6020604051808303816000875af1925050508015610859575060408051601f3d908101601f191682019092526108569181019061129e565b60015b6108c2573d808015610887576040519150601f19603f3d011682016040523d82523d6000602084013e61088c565b606091505b5080516000036108ba57604051633250574960e11b81526001600160a01b0385166004820152602401610399565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b146108fe57604051633250574960e11b81526001600160a01b0385166004820152602401610399565b5050505050565b60606109108261057f565b506000828152600660205260408120805461092a90611227565b80601f016020809104026020016040519081016040528092919081815260200182805461095690611227565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b5050505050905060006109c160408051602081019091526000815290565b905080516000036109d3575092915050565b815115610a055780826040516020016109ed9291906112bb565b60405160208183030381529060405292505050919050565b610a0e84610c3a565b949350505050565b61036f828260405180602001604052806000815250610caf565b6000828152600660205260409020610a48828261133a565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006001600160e01b031982166380ac58cd60e01b1480610ab157506001600160e01b03198216635b5e139f60e01b145b806102a357506301ffc9a760e01b6001600160e01b03198316146102a3565b8080610ae457506001600160a01b03821615155b15610ba6576000610af48461057f565b90506001600160a01b03831615801590610b205750826001600160a01b0316816001600160a01b031614155b8015610b335750610b3181846104ee565b155b15610b5c5760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610399565b8115610ba45783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b610be1838383610cc6565b61041e576001600160a01b038316610c0f57604051637e27328960e01b815260048101829052602401610399565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610399565b6060610c458261057f565b506000610c5d60408051602081019091526000815290565b90506000815111610c7d5760405180602001604052806000815250610ca8565b80610c8784610d29565b604051602001610c989291906112bb565b6040516020818303038152906040525b9392505050565b610cb98383610dbc565b61041e60008484846107dc565b60006001600160a01b03831615801590610a0e5750826001600160a01b0316846001600160a01b03161480610d005750610d0084846104ee565b80610a0e5750506000908152600460205260409020546001600160a01b03908116911614919050565b60606000610d3683610e21565b600101905060008167ffffffffffffffff811115610d5657610d56611081565b6040519080825280601f01601f191660200182016040528015610d80576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610d8a57509392505050565b6001600160a01b038216610de657604051633250574960e11b815260006004820152602401610399565b6000610df4838360006105c5565b90506001600160a01b0381161561041e576040516339e3563760e11b815260006004820152602401610399565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310610e605772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310610e8c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610eaa57662386f26fc10000830492506010015b6305f5e1008310610ec2576305f5e100830492506008015b6127108310610ed657612710830492506004015b60648310610ee8576064830492506002015b600a83106102a35760010192915050565b6001600160e01b03198116811461055757600080fd5b600060208284031215610f2157600080fd5b8135610ca881610ef9565b60005b83811015610f47578181015183820152602001610f2f565b50506000910152565b60008151808452610f68816020860160208601610f2c565b601f01601f19169290920160200192915050565b602081526000610ca86020830184610f50565b600060208284031215610fa157600080fd5b5035919050565b80356001600160a01b0381168114610fbf57600080fd5b919050565b60008060408385031215610fd757600080fd5b610fe083610fa8565b946020939093013593505050565b60008060006060848603121561100357600080fd5b61100c84610fa8565b925061101a60208501610fa8565b9150604084013590509250925092565b60006020828403121561103c57600080fd5b610ca882610fa8565b6000806040838503121561105857600080fd5b61106183610fa8565b91506020830135801515811461107657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156110b2576110b2611081565b604051601f8501601f19908116603f011681019082821181831017156110da576110da611081565b816040528093508581528686860111156110f357600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561112357600080fd5b61112c85610fa8565b935061113a60208601610fa8565b925060408501359150606085013567ffffffffffffffff81111561115d57600080fd5b8501601f8101871361116e57600080fd5b61117d87823560208401611097565b91505092959194509250565b60008060006060848603121561119e57600080fd5b6111a784610fa8565b925060208401359150604084013567ffffffffffffffff8111156111ca57600080fd5b8401601f810186136111db57600080fd5b6111ea86823560208401611097565b9150509250925092565b6000806040838503121561120757600080fd5b61121083610fa8565b915061121e60208401610fa8565b90509250929050565b600181811c9082168061123b57607f821691505b60208210810361125b57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061129490830184610f50565b9695505050505050565b6000602082840312156112b057600080fd5b8151610ca881610ef9565b600083516112cd818460208801610f2c565b8351908301906112e1818360208801610f2c565b01949350505050565b601f82111561041e576000816000526020600020601f850160051c810160208610156113135750805b601f850160051c820191505b818110156113325782815560010161131f565b505050505050565b815167ffffffffffffffff81111561135457611354611081565b611368816113628454611227565b846112ea565b602080601f83116001811461139d57600084156113855750858301515b600019600386901b1c1916600185901b178555611332565b600085815260208120601f198616915b828110156113cc578886015182559484019460019091019084016113ad565b50858210156113ea5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122046da1d9cfc7c225e4655204f464e2ecbb316a6284c51c9c338433a1abb5919f864736f6c63430008170033" @@ -41,7 +41,7 @@ access(all) let bridgedNFTCodeChunks = [ "2e73796d626f6c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732061206c697374206f66204e46542074797065732074686174207468697320726563656976657220616363657074730a202020202020202061636365737328616c6c2920766965772066756e20676574537570706f727465644e4654547970657328293a207b547970653a20426f6f6c7d207b0a20202020202020202020202072657475726e207b20547970653c40", "2e4e46543e28293a2074727565207d0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732077686574686572206f72206e6f742074686520676976656e20747970652069732061636365707465642062792074686520636f6c6c656374696f6e0a20202020202020202f2f2f204120636f6c6c656374696f6e20746861742063616e2061636365707420616e7920747970652073686f756c64206a7573742072657475726e20747275652062792064656661756c740a202020202020202061636365737328616c6c2920766965772066756e206973537570706f727465644e46545479706528747970653a2054797065293a20426f6f6c207b0a202020202020202020202072657475726e2074797065203d3d20547970653c40", "2e4e46543e28290a20202020202020207d0a0a20202020202020202f2f2f2052656d6f76657320616e204e46542066726f6d2074686520636f6c6c656374696f6e20616e64206d6f76657320697420746f207468652063616c6c65720a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e20776974686472617728776974686472617749443a2055496e743634293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a2020202020202020202020206c657420746f6b656e203c2d2073656c662e6f776e65644e4654732e72656d6f7665286b65793a2077697468647261774944290a202020202020202020202020202020203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642049442066726f6d2074686520636f6c6c656374696f6e22290a0a20202020202020202020202072657475726e203c2d746f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2057697468647261777320616e204e46542066726f6d2074686520636f6c6c656374696f6e206279206974732045564d2049440a2020202020202020616363657373284e6f6e46756e6769626c65546f6b656e2e5769746864726177292066756e207769746864726177427945564d4944285f2069643a2055496e74323536293a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d207b0a20202020202020202020202072657475726e203c2d2073656c662e776974686472617728776974686472617749443a200a2020202020202020202020202020202073656c662e676574436164656e636549442866726f6d3a20696429203f3f2070616e69632822436f756c64206e6f7420776974686472617720616e204e46542077697468207468652070726f76696465642045564d2049442066726f6d2074686520636f6c6c656374696f6e22290a202020202020202020202020290a20202020202020207d0a0a20202020202020202f2f2f205474616b65732061204e465420616e64206164647320697420746f2074686520636f6c6c656374696f6e732064696374696f6e61727920616e6420616464732074686520494420746f207468652065766d4944546f466c6f774944206d617070696e670a202020202020202061636365737328616c6c292066756e206465706f73697428746f6b656e3a20407b4e6f6e46756e6769626c65546f6b656e2e4e46547d29207b0a2020202020202020202020206c657420746f6b656e203c2d20746f6b656e206173212040", - "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069660a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d203f3f2055496e7436342865766d4944290a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20", + "2e4e46540a0a2020202020202020202020202f2f2061646420746865206e657720746f6b656e20746f207468652064696374696f6e6172792077686963682072656d6f76657320746865206f6c64206f6e650a20202020202020202020202073656c662e65766d4944546f466c6f7749445b746f6b656e2e65766d49445d203d20746f6b656e2e69640a2020202020202020202020206c6574206f6c64546f6b656e203c2d2073656c662e6f776e65644e4654735b746f6b656e2e69645d203c2d20746f6b656e0a0a20202020202020202020202064657374726f79206f6c64546f6b656e0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657449447328293a205b55496e7436345d207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320616e206172726179206f66207468652045564d2049447320746861742061726520696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49447328293a205b55496e743235365d207b0a20202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749442e6b6579730a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520436164656e6365204e46542e696420666f722074686520676976656e2045564d204e46542049442069662069742065786973747320696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e20676574436164656e636549442866726f6d2065766d49443a2055496e74323536293a2055496e7436343f207b0a20202020202020202020202069662073656c662e65766d4944546f466c6f7749445b65766d49445d20213d206e696c207b0a2020202020202020202020202020202072657475726e2073656c662e65766d4944546f466c6f7749445b65766d49445d0a2020202020202020202020207d20656c73652069662065766d4944203c2055496e743235362855496e7436342e6d6178292026262073656c662e626f72726f774e46542855496e7436342865766d4944292920213d206e696c207b0a2020202020202020202020202020202072657475726e2055496e7436342865766d4944290a2020202020202020202020207d20656c7365207b0a2020202020202020202020202020202072657475726e206e696c0a2020202020202020202020207d0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e73207468652045564d204e4654204944206173736f63696174656420776974682074686520436164656e6365204e46542049442e2054686520676f616c20697320746f20726574726965766520746865204552433732312049442076616c75652e0a20202020202020202f2f2f20417320666172206173207468652062726964676520697320636f6e6365726e65642c20616e2045524337323120646566696e6564206279207468652062726964676520697320746865204e46542773204944206174207468652074696d65206f66206272696467696e670a20202020202020202f2f2f206f72207468652076616c7565206f6620746865204e46542e65766d494420696620697420696d706c656d656e7473207468652043726f7373564d4e46542e45564d4e465420696e74657266616365207768656e20627269646765642e0a20202020202020202f2f2f20466f6c6c6f77696e672074686973207061747465726e2c206966206c6f636b65642c20746865204e465420697320636865636b656420666f722045564d4e465420636f6e666f726d616e63652072657475726e696e67202e65766d494420696620736f2c0a20202020202020202f2f2f206f746865727769736520746865204e465427732049442069732072657475726e656420617320612055496e743235362073696e63652074686174277320686f77207468652062726964676520776f756c642068616e646c65206d696e74696e6720696e207468650a20202020202020202f2f2f20636f72726573706f6e64696e672045524337323120636f6e74726163742e0a20202020202020202f2f2f0a202020202020202061636365737328616c6c2920766965772066756e2067657445564d49442866726f6d20636164656e636549443a2055496e743634293a2055496e743235363f207b0a2020202020202020202020206966206c6574206e6674203d2073656c662e626f72726f774e465428636164656e6365494429207b0a202020202020202020202020202020206966206c65742065766d4e4654203d2043726f7373564d4e46542e67657445564d49442866726f6d3a206e667429207b0a202020202020202020202020202020202020202072657475726e2065766d4e46540a202020202020202020202020202020207d0a2020202020202020202020202020202072657475726e2055496e74323536286e66742e6964290a2020202020202020202020207d0a20202020202020202020202072657475726e206e696c0a20202020202020207d0a0a20202020202020202f2f2f2052657475726e732074686520636f6e747261637455524920666f7220746865204e465420636f6c6c656374696f6e20617320646566696e656420696e2074686520736f757263652045524337323120636f6e74726163742e204966206e6f6e65207761730a20202020202020202f2f2f20646566696e6564206174207468652074696d65206f66206272696467696e672c20616e20656d70747920737472696e672069732072657475726e65642e0a202020202020202061636365737328616c6c2920766965772066756e20636f6e747261637455524928293a20537472696e673f207b0a20202020202020202020202072657475726e20", "2e636f6e74726163745552490a20202020202020207d0a0a20202020202020202f2f2f20476574732074686520616d6f756e74206f66204e4654732073746f72656420696e2074686520636f6c6c656374696f6e0a202020202020202061636365737328616c6c2920766965772066756e206765744c656e67746828293a20496e74207b0a20202020202020202020202072657475726e2073656c662e6f776e65644e4654732e6b6579732e6c656e6774680a20202020202020207d0a0a20202020202020202f2f2f205265747269657665732061207265666572656e636520746f20746865204e46542073746f72656420696e2074686520636f6c6c656374696f6e206279206974732049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f774e4654285f2069643a2055496e743634293a20267b4e6f6e46756e6769626c65546f6b656e2e4e46547d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d0a20202020202020207d0a0a20202020202020202f2f2f20426f72726f77207468652076696577207265736f6c76657220666f722074686520737065636966696564204e46542049440a202020202020202061636365737328616c6c2920766965772066756e20626f72726f77566965775265736f6c7665722869643a2055496e743634293a20267b566965775265736f6c7665722e5265736f6c7665727d3f207b0a20202020202020202020202072657475726e202673656c662e6f776e65644e4654735b69645d20617320267b566965775265736f6c7665722e5265736f6c7665727d3f203f3f206e696c0a20202020202020207d0a0a20202020202020202f2f2f204372656174657320616e20656d70747920636f6c6c656374696f6e0a202020202020202061636365737328616c6c292066756e20637265617465456d707479436f6c6c656374696f6e28293a20407b4e6f6e46756e6769626c65546f6b656e2e436f6c6c656374696f6e7d20207b0a20202020202020202020202072657475726e203c2d", "2e637265617465456d707479436f6c6c656374696f6e286e6674547970653a20547970653c40", "2e4e46543e2829290a20202020202020207d0a202020207d0a0a202020202f2f2f20637265617465456d707479436f6c6c656374696f6e206372656174657320616e20656d70747920436f6c6c656374696f6e20666f722074686520737065636966696564204e465420747970650a202020202f2f2f20616e642072657475726e7320697420746f207468652063616c6c657220736f207468617420746865792063616e206f776e204e4654730a2020202061636365737328616c6c292066756e20637265617465456d707479436f6c6c656374696f6e286e6674547970653a2054797065293a20407b4e6f6e46756e6769626c65546f6b656e2e436f6c6c656374696f6e7d207b0a202020202020202072657475726e203c2d2063726561746520436f6c6c656374696f6e28290a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a202020202020202020202020476574746572730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f2052657475726e73207468652045564d20636f6e74726163742061646472657373206f6620746865204e4654207468697320636f6e747261637420726570726573656e74730a202020202f2f2f0a2020202061636365737328616c6c2920766965772066756e2067657445564d436f6e74726163744164647265737328293a2045564d2e45564d41646472657373207b0a202020202020202072657475726e2073656c662e65766d4e4654436f6e7472616374416464726573730a202020207d0a0a202020202f2f2f2046756e6374696f6e20746861742072657475726e7320616c6c20746865204d6574616461746120566965777320696d706c656d656e7465642062792061204e6f6e2046756e6769626c6520546f6b656e0a202020202f2f2f0a202020202f2f2f204072657475726e20416e206172726179206f6620547970657320646566696e696e672074686520696d706c656d656e7465642076696577732e20546869732076616c75652077696c6c20626520757365642062790a202020202f2f2f202020202020202020646576656c6f7065727320746f206b6e6f7720776869636820706172616d6574657220746f207061737320746f20746865207265736f6c7665566965772829206d6574686f642e0a202020202f2f2f0a2020202061636365737328616c6c2920766965772066756e20676574436f6e74726163745669657773287265736f75726365547970653a20547970653f293a205b547970655d207b0a202020202020202072657475726e205b0a202020202020202020202020547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446174613e28292c0a202020202020202020202020547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28292c0a202020202020202020202020547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28290a20202020202020205d0a202020207d0a0a202020202f2f2f2046756e6374696f6e2074686174207265736f6c7665732061206d65746164617461207669657720666f72207468697320636f6e74726163742e0a202020202f2f2f0a202020202f2f2f2040706172616d20766965773a205468652054797065206f6620746865206465736972656420766965772e0a202020202f2f2f204072657475726e20412073747275637475726520726570726573656e74696e67207468652072657175657374656420766965772e0a202020202f2f2f0a2020202061636365737328616c6c292066756e207265736f6c7665436f6e747261637456696577287265736f75726365547970653a20547970653f2c2076696577547970653a2054797065293a20416e795374727563743f207b0a2020202020202020737769746368207669657754797065207b0a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446174613e28293a0a202020202020202020202020202020206c6574206964656e746966696572203d2022", @@ -49,7 +49,7 @@ access(all) let bridgedNFTCodeChunks = [ "2e436f6c6c656374696f6e3e28292c0a20202020202020202020202020202020202020207075626c69634c696e6b6564547970653a20547970653c26", "2e436f6c6c656374696f6e3e28292c0a2020202020202020202020202020202020202020637265617465456d707479436f6c6c656374696f6e46756e6374696f6e3a202866756e28293a20407b4e6f6e46756e6769626c65546f6b656e2e436f6c6c656374696f6e7d207b0a20202020202020202020202020202020202020202020202072657475726e203c2d", "2e637265617465456d707479436f6c6c656374696f6e286e6674547970653a20547970653c40", - "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a202254686520466c6f77564d2042726964676564204e465420436f6c6c656374696f6e222c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f6272696467652e666c6f772e636f6d2f6e667422292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40", + "2e4e46543e2829290a20202020202020202020202020202020202020207d290a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e20636f6c6c656374696f6e446174610a2020202020202020202020206361736520547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28293a0a202020202020202020202020202020206c6574206d65646961203d204d6574616461746156696577732e4d65646961280a202020202020202020202020202020202020202066696c653a204d6574616461746156696577732e4854545046696c65280a20202020202020202020202020202020202020202020202075726c3a202268747470733a2f2f6173736574732e776562736974652d66696c65732e636f6d2f3566363239346330633761386364643634336231633832302f3566363239346330633761386364613535636231633933365f466c6f775f576f72646d61726b2e737667220a2020202020202020202020202020202020202020292c0a20202020202020202020202020202020202020206d65646961547970653a2022696d6167652f7376672b786d6c220a20202020202020202020202020202020290a2020202020202020202020202020202072657475726e204d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c6179280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a20202020202020202020202020202020202020206465736372697074696f6e3a20225468697320636f6c6c656374696f6e2077617320627269646765642066726f6d20466c6f772045564d2e222c0a202020202020202020202020202020202020202065787465726e616c55524c3a204d6574616461746156696577732e45787465726e616c55524c282268747470733a2f2f706f72742e666c6f772e636f6d2f22292c0a2020202020202020202020202020202020202020737175617265496d6167653a206d656469612c0a202020202020202020202020202020202020202062616e6e6572496d6167653a206d656469612c0a2020202020202020202020202020202020202020736f6369616c733a207b7d0a20202020202020202020202020202020290a2020202020202020202020206361736520547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28293a0a2020202020202020202020202020202072657475726e204d6574616461746156696577732e45564d427269646765644d65746164617461280a20202020202020202020202020202020202020206e616d653a2073656c662e6e616d652c0a202020202020202020202020202020202020202073796d626f6c3a2073656c662e73796d626f6c2c0a20202020202020202020202020202020202020207572693a2073656c662e636f6e747261637455524920213d206e696c203f204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a2073656c662e636f6e74726163745552492129203a204d6574616461746156696577732e55524928626173655552493a206e696c2c2076616c75653a202222290a20202020202020202020202020202020290a20202020202020207d0a202020202020202072657475726e206e696c0a202020207d0a0a202020202f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a0a2020202020202020496e7465726e616c204d6574686f64730a202020202a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2f0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f206d696e74204e4654732066726f6d206272696467652d646566696e6564204e465420636f6e7472616374730a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e206d696e744e46542869643a2055496e743235362c20746f6b656e5552493a20537472696e67293a20404e4654207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b69645d203d3d206e696c3a20224120746f6b656e20776974682074686520676976656e2045524337323120494420616c726561647920657869737473220a20202020202020207d0a202020202020202073656c662e746f6b656e555249735b69645d203d20746f6b656e5552490a202020202020202072657475726e203c2d637265617465204e4654280a20202020202020202020202065766d49443a2069642c0a2020202020202020202020206d657461646174613a207b0a20202020202020202020202020202020224272696467656420426c6f636b223a2067657443757272656e74426c6f636b28292e6865696768742c0a2020202020202020202020202020202022427269646765642054696d657374616d70223a2067657443757272656e74426c6f636b28292e74696d657374616d700a2020202020202020202020207d0a2020202020202020290a202020207d0a0a202020202f2f2f20416c6c6f7773207468652062726964676520746f207570646174652074686520555249206f662062726964676564204e4654732e205468697320617373756d65732074686174207468652045564d2d646566696e696e672070726f6a656374206d617920636f6e7461696e0a202020202f2f2f206c6f67696320286f6e636861696e206f72206f6666636861696e292077686963682075706461746573204e4654206d6574616461746120696e2074686520736f757263652045524337323120636f6e74726163742e204f6e206272696467696e672c20746865205552492063616e0a202020202f2f2f207468656e206265207570646174656420696e207468697320636f6e747261637420746f207265666c6563742074686520736f757263652045524337323120636f6e74726163742773206d657461646174612e0a202020202f2f2f0a20202020616363657373286163636f756e74290a2020202066756e20757064617465546f6b656e5552492865766d49443a2055496e743235362c206e65775552493a20537472696e6729207b0a2020202020202020707265207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d20213d206e696c3a20224e6f20746f6b656e20776974682074686520676976656e2045524337323120494420657869737473220a20202020202020207d0a202020202020202069662073656c662e746f6b656e555249735b65766d49445d20213d206e6577555249207b0a20202020202020202020202073656c662e746f6b656e555249735b65766d49445d203d206e65775552490a20202020202020207d0a202020207d0a0a20202020696e6974286e616d653a20537472696e672c2073796d626f6c3a20537472696e672c2065766d436f6e7472616374416464726573733a2045564d2e45564d416464726573732c20636f6e74726163745552493a20537472696e673f29207b0a202020202020202073656c662e65766d4e4654436f6e747261637441646472657373203d2065766d436f6e7472616374416464726573730a202020202020202073656c662e6e616d65203d206e616d650a202020202020202073656c662e73796d626f6c203d2073796d626f6c0a202020202020202073656c662e636f6e7472616374555249203d20636f6e74726163745552490a202020202020202073656c662e746f6b656e55524973203d207b7d0a202020202020202073656c662e636f6c6c656374696f6e203c2d2063726561746520436f6c6c656374696f6e28290a0a2020202020202020466c6f7745564d427269646765436f6e6669672e6173736f63696174655479706528547970653c40", "2e4e46543e28292c20776974683a2073656c662e65766d4e4654436f6e747261637441646472657373290a2020202020202020466c6f7745564d4272696467654e4654457363726f772e696e697469616c697a65457363726f77280a202020202020202020202020666f72547970653a20547970653c40", "2e4e46543e28292c0a2020202020202020202020206e616d653a206e616d652c0a20202020202020202020202073796d626f6c3a2073796d626f6c2c0a202020202020202020202020657263373231416464726573733a2073656c662e65766d4e4654436f6e7472616374416464726573730a2020202020202020290a202020207d0a7d0a" ] diff --git a/cadence/tests/transactions/add_contract.cdc b/cadence/tests/transactions/add_contract.cdc deleted file mode 100644 index a9faa2a4..00000000 --- a/cadence/tests/transactions/add_contract.cdc +++ /dev/null @@ -1,5 +0,0 @@ -transaction(name: String, codeHex: String, arg0: AnyStruct, arg1: AnyStruct) { - prepare(signer: auth(AddContract) &Account) { - signer.contracts.add(name: name, code: codeHex.decodeHex(), arg0, arg1) - } -} \ No newline at end of file diff --git a/cadence/tests/transactions/deploy_using_evm_deployer.cdc b/cadence/tests/transactions/deploy_using_evm_deployer.cdc deleted file mode 100644 index 4421e777..00000000 --- a/cadence/tests/transactions/deploy_using_evm_deployer.cdc +++ /dev/null @@ -1,9 +0,0 @@ -import "EVMDeployer" - -transaction(name: String, bytecode: String, value: UInt) { - prepare(signer: &Account) {} - - execute { - EVMDeployer.deploy(name: name, bytecode: bytecode, value: value) - } -} diff --git a/cadence/tests/transactions/update_contract.cdc b/cadence/tests/transactions/update_contract.cdc deleted file mode 100644 index 7f2ceb85..00000000 --- a/cadence/tests/transactions/update_contract.cdc +++ /dev/null @@ -1,5 +0,0 @@ -transaction(name: String, codeHex: String) { - prepare(signer: auth(UpdateContract) &Account) { - signer.contracts.update(name: name, code: codeHex.decodeHex()) - } -} \ No newline at end of file diff --git a/cadence/transactions/bridge/admin/dry_run.cdc b/cadence/transactions/bridge/admin/dry_run.cdc new file mode 100644 index 00000000..fd0314e8 --- /dev/null +++ b/cadence/transactions/bridge/admin/dry_run.cdc @@ -0,0 +1,5 @@ +transaction { + prepare(signer: &Account) { + log("SUCCESS") + } +} \ No newline at end of file diff --git a/cadence/transactions/bridge/admin/evm/add_deployer.cdc b/cadence/transactions/bridge/admin/evm/add_deployer.cdc index 7f3f70f0..47bbfda3 100644 --- a/cadence/transactions/bridge/admin/evm/add_deployer.cdc +++ b/cadence/transactions/bridge/admin/evm/add_deployer.cdc @@ -9,17 +9,20 @@ import "FlowEVMBridgeUtils" /// @param deployerEVMAddressHex: The EVM address of the deployer contract as a hex string /// transaction(deployerTag: String, deployerEVMAddressHex: String) { - + let coa: auth(EVM.Call) &EVM.CadenceOwnedAccount - + var postDeployer: EVM.EVMAddress? + prepare(signer: auth(BorrowValue) &Account) { self.coa = signer.storage.borrow(from: /storage/evm) ?? panic("Could not borrow COA from provided gateway address") + + self.postDeployer = nil } execute { + // Execute the call let deployerEVMAddress = EVM.addressFromString(deployerEVMAddressHex) - let callResult = self.coa.call( to: FlowEVMBridgeUtils.bridgeFactoryEVMAddress, data: EVM.encodeABIWithSignature( @@ -30,5 +33,28 @@ transaction(deployerTag: String, deployerEVMAddressHex: String) { value: EVM.Balance(attoflow: 0) ) assert(callResult.status == EVM.Status.successful, message: "Failed to add deployer") + + // Confirm the deployer was added under the tag + let postDeployerResult = self.coa.call( + to: FlowEVMBridgeUtils.bridgeFactoryEVMAddress, + data: EVM.encodeABIWithSignature( + "getDeployer(string)", + [deployerTag] + ), + gasLimit: 15_000_000, + value: EVM.Balance(attoflow: 0) + ) + assert(postDeployerResult.status == EVM.Status.successful, message: "Failed to get deployer") + + let decodedResult = EVM.decodeABI( + types: [Type()], + data: postDeployerResult.data + ) as! [AnyStruct] + assert(decodedResult.length == 1, message: "Invalid response from getDeployer call") + self.postDeployer = decodedResult[0] as! EVM.EVMAddress + } + + post { + self.postDeployer!.toString() == deployerEVMAddressHex: "Deployer was not properly configured" } } diff --git a/cadence/transactions/bridge/admin/evm/set_delegated_deployer.cdc b/cadence/transactions/bridge/admin/evm/set_delegated_deployer.cdc index c5839ff8..8cbde1f4 100644 --- a/cadence/transactions/bridge/admin/evm/set_delegated_deployer.cdc +++ b/cadence/transactions/bridge/admin/evm/set_delegated_deployer.cdc @@ -8,17 +8,20 @@ import "FlowEVMBridgeUtils" /// @param deployerEVMAddressHex The EVM address of the deployer contract as a hex string /// transaction(deployerEVMAddressHex: String) { - + let coa: auth(EVM.Call) &EVM.CadenceOwnedAccount - + var postDelegatedDeployer: EVM.EVMAddress? + prepare(signer: auth(BorrowValue) &Account) { self.coa = signer.storage.borrow(from: /storage/evm) ?? panic("Could not borrow COA from provided gateway address") + + self.postDelegatedDeployer = nil } execute { + // Execute the call let deployerEVMAddress = EVM.addressFromString(deployerEVMAddressHex) - let callResult = self.coa.call( to: deployerEVMAddress, data: EVM.encodeABIWithSignature( @@ -29,5 +32,29 @@ transaction(deployerEVMAddressHex: String) { value: EVM.Balance(attoflow: 0) ) assert(callResult.status == EVM.Status.successful, message: "Failed to set delegated deployer") + + // Confirm the delegated deployer was set + let postDelegatedDeployerResult = self.coa.call( + to: deployerEVMAddress, + data: EVM.encodeABIWithSignature("delegatedDeployer()", []), + gasLimit: 15_000_000, + value: EVM.Balance(attoflow: 0) + ) + assert(postDelegatedDeployerResult.status == EVM.Status.successful, message: "Failed to get delegated deployer") + + let decodedResult = EVM.decodeABI( + types: [Type()], + data: postDelegatedDeployerResult.data + ) as! [AnyStruct] + assert(decodedResult.length == 1, message: "Invalid response from delegatedDeployer() call") + self.postDelegatedDeployer = decodedResult[0] as! EVM.EVMAddress + } + + post { + self.postDelegatedDeployer!.toString() == FlowEVMBridgeUtils.bridgeFactoryEVMAddress.toString(): + "FlowBridgeFactory address " + .concat(FlowEVMBridgeUtils.bridgeFactoryEVMAddress.toString()) + .concat(" was not set as the delegated deployer in the deployer contract ") + .concat(deployerEVMAddressHex) } } diff --git a/cadence/transactions/bridge/admin/evm/set_deployment_registry.cdc b/cadence/transactions/bridge/admin/evm/set_deployment_registry.cdc index 2c15eff3..9f03e8a4 100644 --- a/cadence/transactions/bridge/admin/evm/set_deployment_registry.cdc +++ b/cadence/transactions/bridge/admin/evm/set_deployment_registry.cdc @@ -12,17 +12,19 @@ import "FlowEVMBridgeUtils" /// @param registryEVMAddressHex The EVM address of the registry contract as a hex string /// transaction(registryEVMAddressHex: String) { - + let coa: auth(EVM.Call) &EVM.CadenceOwnedAccount - + var postRegistry: EVM.EVMAddress? + prepare(signer: auth(BorrowValue) &Account) { self.coa = signer.storage.borrow(from: /storage/evm) ?? panic("Could not borrow COA from provided gateway address") + self.postRegistry = nil } execute { + // Execute call let registryEVMAddress = EVM.addressFromString(registryEVMAddressHex) - let callResult = self.coa.call( to: FlowEVMBridgeUtils.bridgeFactoryEVMAddress, data: EVM.encodeABIWithSignature( @@ -32,6 +34,33 @@ transaction(registryEVMAddressHex: String) { gasLimit: 15_000_000, value: EVM.Balance(attoflow: 0) ) - assert(callResult.status == EVM.Status.successful, message: "Failed to set delegated deployer") + assert(callResult.status == EVM.Status.successful, message: "Failed to set registry in FlowBridgeFactory contract") + + // Confirm the registry address was set + let postRegistryResult = self.coa.call( + to: FlowEVMBridgeUtils.bridgeFactoryEVMAddress, + data: EVM.encodeABIWithSignature("getRegistry()", []), + gasLimit: 15_000_000, + value: EVM.Balance(attoflow: 0) + ) + assert( + postRegistryResult.status == EVM.Status.successful, + message: "Failed to get registry address from FlowBridgeFactory contract" + ) + + let decodedResult = EVM.decodeABI( + types: [Type()], + data: postRegistryResult.data + ) as! [AnyStruct] + assert(decodedResult.length == 1, message: "Invalid response from getRegistry() call to FlowBridgeFactory contract") + self.postRegistry = decodedResult[0] as! EVM.EVMAddress + } + + post { + self.postRegistry!.toString() == registryEVMAddressHex: + "Registry address " + .concat(registryEVMAddressHex) + .concat(" was not set in the FlowBridgeFactory contract ") + .concat(FlowEVMBridgeUtils.bridgeFactoryEVMAddress.toString()) } } diff --git a/cadence/transactions/bridge/admin/evm/set_registrar.cdc b/cadence/transactions/bridge/admin/evm/set_registrar.cdc index ebe9a0cf..40c1c61c 100644 --- a/cadence/transactions/bridge/admin/evm/set_registrar.cdc +++ b/cadence/transactions/bridge/admin/evm/set_registrar.cdc @@ -8,17 +8,19 @@ import "FlowEVMBridgeUtils" /// @param registryEVMAddressHex The EVM address of the FlowBridgeDeploymentRegistry contract. /// transaction(registryEVMAddressHex: String) { - + let coa: auth(EVM.Call) &EVM.CadenceOwnedAccount - + var postRegistrar: EVM.EVMAddress? + prepare(signer: auth(BorrowValue) &Account) { self.coa = signer.storage.borrow(from: /storage/evm) ?? panic("Could not borrow COA from provided gateway address") + self.postRegistrar = nil } execute { let registryEVMAddress = EVM.addressFromString(registryEVMAddressHex) - + let callResult = self.coa.call( to: registryEVMAddress, data: EVM.encodeABIWithSignature( @@ -29,5 +31,29 @@ transaction(registryEVMAddressHex: String) { value: EVM.Balance(attoflow: 0) ) assert(callResult.status == EVM.Status.successful, message: "Failed to set registrar") + + // Confirm the registrar was set + let postRegistrarResult = self.coa.call( + to: registryEVMAddress, + data: EVM.encodeABIWithSignature("registrar()", []), + gasLimit: 15_000_000, + value: EVM.Balance(attoflow: 0) + ) + assert(postRegistrarResult.status == EVM.Status.successful, message: "Failed to get registrar") + + let decodedResult = EVM.decodeABI( + types: [Type()], + data: postRegistrarResult.data + ) as! [AnyStruct] + assert(decodedResult.length == 1, message: "Invalid response from registrar() call to registry contract") + self.postRegistrar = decodedResult[0] as! EVM.EVMAddress + } + + post { + self.postRegistrar!.toString() == FlowEVMBridgeUtils.bridgeFactoryEVMAddress.toString(): + "FlowBridgeFactory address " + .concat(FlowEVMBridgeUtils.bridgeFactoryEVMAddress.toString()) + .concat(" was not set as the registrar in the registry contract ") + .concat(registryEVMAddressHex) } } diff --git a/cadence/transactions/bridge/admin/fee/update_base_fee.cdc b/cadence/transactions/bridge/admin/fee/update_base_fee.cdc index 10533292..3de7690f 100644 --- a/cadence/transactions/bridge/admin/fee/update_base_fee.cdc +++ b/cadence/transactions/bridge/admin/fee/update_base_fee.cdc @@ -7,9 +7,20 @@ import "FlowEVMBridgeConfig" /// @emits FlowEVMBridgeConfig.BridgeFeeUpdated(old: FlowEVMBridgeConfig.onboardFee, new: newFee, isOnboarding: false) /// transaction(newFee: UFix64) { + + let admin: auth(FlowEVMBridgeConfig.Fee) &FlowEVMBridgeConfig.Admin + prepare(signer: auth(BorrowValue) &Account) { - signer.storage.borrow(from: FlowEVMBridgeConfig.adminStoragePath) - ?.updateBaseFee(newFee) - ?? panic("Could not borrow FlowEVMBridgeConfig Admin reference") + self.admin = signer.storage.borrow( + from: FlowEVMBridgeConfig.adminStoragePath + ) ?? panic("Could not borrow FlowEVMBridgeConfig Admin reference") + } + + execute { + self.admin.updateBaseFee(newFee) + } + + post { + FlowEVMBridgeConfig.baseFee == newFee: "Fee was not set correctly" } } diff --git a/cadence/transactions/bridge/admin/fee/update_onboard_fee.cdc b/cadence/transactions/bridge/admin/fee/update_onboard_fee.cdc index 8ec09318..f086504b 100644 --- a/cadence/transactions/bridge/admin/fee/update_onboard_fee.cdc +++ b/cadence/transactions/bridge/admin/fee/update_onboard_fee.cdc @@ -7,9 +7,20 @@ import "FlowEVMBridgeConfig" /// @emits FlowEVMBridgeConfig.BridgeFeeUpdated(old: FlowEVMBridgeConfig.onboardFee, new: newFee, isOnboarding: true) /// transaction(newFee: UFix64) { + + let admin: auth(FlowEVMBridgeConfig.Fee) &FlowEVMBridgeConfig.Admin + prepare(signer: auth(BorrowValue) &Account) { - signer.storage.borrow(from: FlowEVMBridgeConfig.adminStoragePath) - ?.updateOnboardingFee(newFee) - ?? panic("Could not borrow FlowEVMBridgeConfig Admin reference") + self.admin = signer.storage.borrow( + from: FlowEVMBridgeConfig.adminStoragePath + ) ?? panic("Could not borrow FlowEVMBridgeConfig Admin reference") + } + + execute { + self.admin.updateOnboardingFee(newFee) + } + + post { + FlowEVMBridgeConfig.onboardFee == newFee: "Fee was not set correctly" } } diff --git a/cadence/transactions/bridge/admin/pause/update_bridge_pause_status.cdc b/cadence/transactions/bridge/admin/pause/update_bridge_pause_status.cdc index 92a742e8..ae04a9ff 100644 --- a/cadence/transactions/bridge/admin/pause/update_bridge_pause_status.cdc +++ b/cadence/transactions/bridge/admin/pause/update_bridge_pause_status.cdc @@ -1,10 +1,10 @@ import "FlowEVMBridgeConfig" -/// Sets the pause status of the FlowEVM Bridge as specified. +/// Sets the pause status of the FlowEVM Bridge as specified, affecting cross-VM bridging globally via FlowEVMBridge. /// /// @param pause: A boolean indicating whether the FlowEVM Bridge should be paused or unpaused. /// -/// @emits FlowEVMBridgeConfig.PauseStatusUpdated(paused: true) +/// @emits FlowEVMBridgeConfig.BridgePauseStatusUpdated(paused: true) /// transaction(pause: Bool) { @@ -22,4 +22,8 @@ transaction(pause: Bool) { self.admin.unpauseBridge() } } + + post { + FlowEVMBridgeConfig.isPaused() == pause: "Problem updating pause status in FlowEVMBridgeConfig" + } } diff --git a/cadence/transactions/bridge/admin/pause/update_type_pause_status.cdc b/cadence/transactions/bridge/admin/pause/update_type_pause_status.cdc new file mode 100644 index 00000000..011f4571 --- /dev/null +++ b/cadence/transactions/bridge/admin/pause/update_type_pause_status.cdc @@ -0,0 +1,32 @@ +import "FlowEVMBridgeConfig" + +/// Sets the pause status of the specified asset type as either paused or unpaused. +/// +/// @param typeIdentifier: The type identifier of the asset to pause or unpause. +/// @param pause: A boolean indicating whether the FlowEVM Bridge should be paused or unpaused. +/// +/// @emits FlowEVMBridgeConfig.TypePauseStatusUpdated(paused: true) +/// +transaction(typeIdentifier: String, pause: Bool) { + + let admin: auth(FlowEVMBridgeConfig.Pause) &FlowEVMBridgeConfig.Admin + let type: Type + + prepare(signer: auth(BorrowValue) &Account) { + self.admin = signer.storage.borrow(from: FlowEVMBridgeConfig.adminStoragePath) + ?? panic("Could not borrow FlowEVMBridgeConfig Admin reference") + self.type = CompositeType(typeIdentifier) ?? panic("Invalid type identifier provided: ".concat(typeIdentifier)) + } + + execute { + if pause { + self.admin.pauseType(self.type) + } else { + self.admin.unpauseType(self.type) + } + } + + post { + FlowEVMBridgeConfig.isTypePaused(self.type) == pause: "Problem updating pause status for provided type" + } +} diff --git a/cadence/transactions/bridge/onboarding/onboard_by_type.cdc b/cadence/transactions/bridge/onboarding/onboard_by_type.cdc index 26c852c7..651bdf05 100644 --- a/cadence/transactions/bridge/onboarding/onboard_by_type.cdc +++ b/cadence/transactions/bridge/onboarding/onboard_by_type.cdc @@ -48,4 +48,9 @@ transaction(type: Type) { ) destroy self.scopedProvider } + + post { + FlowEVMBridge.typeRequiresOnboarding(type) == false: + "Asset ".concat(type.identifier).concat(" was not onboarded to the bridge.") + } } diff --git a/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc b/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc index 45ecbb01..35f7e790 100644 --- a/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc +++ b/cadence/transactions/bridge/onboarding/onboard_by_type_identifier.cdc @@ -52,4 +52,9 @@ transaction(identifier: String) { ) destroy self.scopedProvider } + + post { + FlowEVMBridge.typeRequiresOnboarding(self.type) == false: + "Asset ".concat(identifier).concat(" was not onboarded to the bridge.") + } } diff --git a/cadence/transactions/evm/deploy.cdc b/cadence/transactions/evm/deploy.cdc index 6709e078..ad389f15 100644 --- a/cadence/transactions/evm/deploy.cdc +++ b/cadence/transactions/evm/deploy.cdc @@ -49,7 +49,7 @@ transaction(bytecode: String, gasLimit: UInt64, value: UFix64) { ) assert( evmResult.status == EVM.Status.successful && evmResult.deployedContract != nil, - message: "Bridge factory deployment failed" + message: "EVM deployment failed with error code: ".concat(evmResult.errorCode.toString()) ) } } diff --git a/main.go b/main.go index bf6ce45e..d515d93a 100644 --- a/main.go +++ b/main.go @@ -179,6 +179,16 @@ func main() { contractCode, err := os.ReadFile(contractPath) checkNoErr(err) + // If the contract is already deployed as-is, skip deployment + a, err := o.GetAccount(ctx, "flow-evm-bridge") + checkNoErr(err) + log.Printf("Checking if contract %s is already deployed...", name) + if a.Contracts[name] != nil { + log.Printf("Contract %s already deployed, skipping...", name) + continue + } + log.Printf("Contract %s not found on %s, deploying...", name, network) + var args []cadence.Value if name == "FlowEVMBridgeUtils" { args = []cadence.Value{cadence.String(factoryAddr)} @@ -197,23 +207,8 @@ func main() { WithArg("pause", true), ) checkNoErr(pauseResult.Err) - log.Printf("Bridge paused, configuring token handlers...") - - // TODO: Blocked on FiatToken staging - uncomment once the updated contract is staged & migrated - // Add TokenHandler for specified Types - // fiatToken, err := o.State.Config().Contracts.ByName("FiatToken") - // checkNoErr(err) - // fiatTokenAddress := fiatToken.Aliases.ByNetwork(o.GetNetwork()).Address - // fiatTokenVaultIdentifier := "A." + fiatTokenAddress.String() + ".FiatToken.Vault" - // fiatTokenMinterIdentifier := "A." + fiatTokenAddress.String() + ".FiatToken.MinterResource" - // handlerCreationResult := o.Tx("bridge/admin/token-handler/create_cadence_native_token_handler", - // WithSigner("flow-evm-bridge"), - // WithArg("vaultIdentifier", fiatTokenVaultIdentifier), - // WithArg("minterIdentifier", fiatTokenMinterIdentifier), - // ) - // checkNoErr(handlerCreationResult.Err) - - log.Printf("Token handlers configured...continuing EVM setup...") + + // TODO: Add any TokenHandlers here if needed /* --- Finish EVM Contract Setup --- */ diff --git a/solidity/lib/forge-std b/solidity/lib/forge-std index ae570fec..978ac6fa 160000 --- a/solidity/lib/forge-std +++ b/solidity/lib/forge-std @@ -1 +1 @@ -Subproject commit ae570fec082bfe1c1f45b0acca4a2b4f84d345ce +Subproject commit 978ac6fadb62f5f0b723c996f64be52eddba6801 diff --git a/solidity/lib/openzeppelin-contracts b/solidity/lib/openzeppelin-contracts index 01ef4489..dbb6104c 160000 --- a/solidity/lib/openzeppelin-contracts +++ b/solidity/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 01ef448981be9d20ca85f2faf6ebdf591ce409f3 +Subproject commit dbb6104ce834628e473d2173bbc9d47f81a9eec3 diff --git a/solidity/src/FlowBridgeDeploymentRegistry.sol b/solidity/src/FlowBridgeDeploymentRegistry.sol index ff34f937..6d6e22a7 100644 --- a/solidity/src/FlowBridgeDeploymentRegistry.sol +++ b/solidity/src/FlowBridgeDeploymentRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; @@ -7,7 +7,7 @@ import {FlowEVMDeploymentRegistry} from "./interfaces/FlowEVMDeploymentRegistry. /** * @title FlowBridgeDeploymentRegistry - * @dev A contract to manage the association between bridged Flow EVM contracts and a corresponding Cadence resource type. + * @dev A contract to manage the association between bridged Flow EVM contracts and a corresponding Cadence resource type. * Deployment of new bridged Flow EVM contracts is handled in `FlowBridgeFactory`. */ contract FlowBridgeDeploymentRegistry is FlowEVMDeploymentRegistry, Ownable { diff --git a/solidity/src/FlowBridgeFactory.sol b/solidity/src/FlowBridgeFactory.sol index 2e3a306c..cc88b265 100644 --- a/solidity/src/FlowBridgeFactory.sol +++ b/solidity/src/FlowBridgeFactory.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; @@ -263,6 +263,14 @@ contract FlowBridgeFactory is Ownable { emit DeployerRemoved(tag, oldAddress); } + /** + * @dev Overrides Ownable.renounceOwnership function to prevent ownership renouncement as it is required to retain + * bridge functionality + */ + function renounceOwnership() public virtual override onlyOwner { + revert("FlowBridgeFactory: Ownership cannot be renounced"); + } + /** * @dev Registers a new deployment in the deployment registry * diff --git a/solidity/src/FlowEVMBridgedERC20Deployer.sol b/solidity/src/FlowEVMBridgedERC20Deployer.sol index 6d1aa8e2..3cf94b14 100644 --- a/solidity/src/FlowEVMBridgedERC20Deployer.sol +++ b/solidity/src/FlowEVMBridgedERC20Deployer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; @@ -13,17 +13,10 @@ import {FlowEVMBridgedERC20} from "./templates/FlowEVMBridgedERC20.sol"; * delegated deployer can deploy new contracts. This contract is used by the Flow EVM bridge to deploy and define * bridged ERC20 tokens which are defined natively in Cadence. */ -contract FlowEVMBridgedERC20Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable { +contract FlowEVMBridgedERC20Deployer is ERC165, IFlowEVMBridgeDeployer, Ownable { // The address of the delegated deployer who can deploy new contracts address public delegatedDeployer; - /** - * @dev Event emitted when a new ERC20 contract is deployed via this deployer - */ - event ERC20Deployed( - address contractAddress, string name, string symbol, string cadenceTokenAddress, string cadenceVaultIdentifier - ); - constructor() Ownable(msg.sender) {} /** @@ -38,7 +31,8 @@ contract FlowEVMBridgedERC20Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable * @dev ERC165 introspection */ function supportsInterface(bytes4 interfaceId) public view override(IERC165, ERC165) returns (bool) { - return interfaceId == type(IFlowEVMBridgeDeployer).interfaceId || super.supportsInterface(interfaceId); + return interfaceId == type(IFlowEVMBridgeDeployer).interfaceId || interfaceId == type(Ownable).interfaceId + || super.supportsInterface(interfaceId); } /** @@ -63,7 +57,7 @@ contract FlowEVMBridgedERC20Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable FlowEVMBridgedERC20 newERC20 = new FlowEVMBridgedERC20(super.owner(), name, symbol, cadenceAddress, cadenceIdentifier, contractURI); - emit ERC20Deployed(address(newERC20), name, symbol, cadenceAddress, cadenceIdentifier); + emit Deployed(address(newERC20), name, symbol, cadenceAddress, cadenceIdentifier); return address(newERC20); } @@ -77,5 +71,7 @@ contract FlowEVMBridgedERC20Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable function setDelegatedDeployer(address _delegatedDeployer) external onlyOwner { require(_delegatedDeployer != address(0), "FlowEVMBridgedERC20Deployer: Invalid delegated deployer address"); delegatedDeployer = _delegatedDeployer; + + emit DeployerAuthorized(_delegatedDeployer); } } diff --git a/solidity/src/FlowEVMBridgedERC721Deployer.sol b/solidity/src/FlowEVMBridgedERC721Deployer.sol index 7f55cde0..4ae0375d 100644 --- a/solidity/src/FlowEVMBridgedERC721Deployer.sol +++ b/solidity/src/FlowEVMBridgedERC721Deployer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; @@ -14,17 +14,10 @@ import {FlowEVMBridgedERC721} from "./templates/FlowEVMBridgedERC721.sol"; * delegated deployer can deploy new contracts. This contract is used by the Flow EVM bridge to deploy and define * bridged ERC721 tokens which are defined natively in Cadence. */ -contract FlowEVMBridgedERC721Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable { +contract FlowEVMBridgedERC721Deployer is ERC165, IFlowEVMBridgeDeployer, Ownable { // The address of the delegated deployer who can deploy new contracts address public delegatedDeployer; - /** - * @dev Event emitted when a new ERC721 contract is deployed via this deployer - */ - event ERC721Deployed( - address contractAddress, string name, string symbol, string cadenceNFTAddress, string cadenceNFTIdentifier - ); - constructor() Ownable(msg.sender) {} /** @@ -39,7 +32,8 @@ contract FlowEVMBridgedERC721Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable * @dev ERC165 introspection */ function supportsInterface(bytes4 interfaceId) public view override(IERC165, ERC165) returns (bool) { - return interfaceId == type(IFlowEVMBridgeDeployer).interfaceId || super.supportsInterface(interfaceId); + return interfaceId == type(IFlowEVMBridgeDeployer).interfaceId || interfaceId == type(Ownable).interfaceId + || super.supportsInterface(interfaceId); } /** @@ -64,7 +58,7 @@ contract FlowEVMBridgedERC721Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable FlowEVMBridgedERC721 newERC721 = new FlowEVMBridgedERC721(super.owner(), name, symbol, cadenceAddress, cadenceIdentifier, contractURI); - emit ERC721Deployed(address(newERC721), name, symbol, cadenceAddress, cadenceIdentifier); + emit Deployed(address(newERC721), name, symbol, cadenceAddress, cadenceIdentifier); return address(newERC721); } @@ -77,5 +71,7 @@ contract FlowEVMBridgedERC721Deployer is IFlowEVMBridgeDeployer, ERC165, Ownable function setDelegatedDeployer(address _delegatedDeployer) external onlyOwner { require(_delegatedDeployer != address(0), "FlowEVMBridgedERC721Deployer: Invalid delegated deployer address"); delegatedDeployer = _delegatedDeployer; + + emit DeployerAuthorized(_delegatedDeployer); } } diff --git a/solidity/src/interfaces/BridgePermissions.sol b/solidity/src/interfaces/BridgePermissions.sol index 92069ac3..0247ee84 100644 --- a/solidity/src/interfaces/BridgePermissions.sol +++ b/solidity/src/interfaces/BridgePermissions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; @@ -46,7 +46,7 @@ abstract contract BridgePermissions is ERC165, IBridgePermissions { * Emits a {PermissionsUpdated} event. */ function _setPermissions(bool permissions) internal { - permissions = permissions; + _permissions = permissions; emit PermissionsUpdated(permissions); } } diff --git a/solidity/src/interfaces/FlowEVMDeploymentRegistry.sol b/solidity/src/interfaces/FlowEVMDeploymentRegistry.sol index dcdfd7f8..849a173b 100644 --- a/solidity/src/interfaces/FlowEVMDeploymentRegistry.sol +++ b/solidity/src/interfaces/FlowEVMDeploymentRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; @@ -93,14 +93,30 @@ abstract contract FlowEVMDeploymentRegistry is IFlowEVMDeploymentRegistry, ERC16 * @param contractAddr The address of the deployed contract */ function _registerDeployment(string memory cadenceIdentifier, address contractAddr) internal { + require(contractAddr != address(0), "FlowEVMDeploymentRegistry: Contract address cannot be 0"); + require(bytes(cadenceIdentifier).length != 0, "FlowEVMDeploymentRegistry: Cadence identifier cannot be empty"); + require( + cadenceIdentifierToContract[cadenceIdentifier] == address(0), + "FlowEVMDeploymentRegistry: Cadence identifier already registered" + ); + require( + bytes(contractToCadenceIdentifier[contractAddr]).length == 0, + "FlowEVMDeploymentRegistry: Contract address already registered" + ); + cadenceIdentifierToContract[cadenceIdentifier] = contractAddr; contractToCadenceIdentifier[contractAddr] = cadenceIdentifier; + + emit DeploymentRegistered(contractAddr, cadenceIdentifier); } /** * @dev Set the registrar address as the entity that can register new deployments. Only the owner can execute this. */ function _setRegistrar(address _registrar) internal { + require(_registrar != address(0), "FlowEVMDeploymentRegistry: Registrar cannot be 0"); registrar = _registrar; + + emit RegistrarAuthorized(_registrar); } } diff --git a/solidity/src/interfaces/IBridgePermissions.sol b/solidity/src/interfaces/IBridgePermissions.sol index ccce6404..d8d9b929 100644 --- a/solidity/src/interfaces/IBridgePermissions.sol +++ b/solidity/src/interfaces/IBridgePermissions.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; diff --git a/solidity/src/interfaces/ICrossVM.sol b/solidity/src/interfaces/ICrossVM.sol new file mode 100644 index 00000000..9c7ad3a8 --- /dev/null +++ b/solidity/src/interfaces/ICrossVM.sol @@ -0,0 +1,6 @@ +pragma solidity 0.8.24; + +interface ICrossVM { + function getCadenceAddress() external view returns (string memory); + function getCadenceIdentifier() external view returns (string memory); +} diff --git a/solidity/src/interfaces/IFlowEVMBridgeDeployer.sol b/solidity/src/interfaces/IFlowEVMBridgeDeployer.sol index 6e65236a..6a011406 100644 --- a/solidity/src/interfaces/IFlowEVMBridgeDeployer.sol +++ b/solidity/src/interfaces/IFlowEVMBridgeDeployer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; @@ -8,6 +8,18 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; * @dev Interface contracts on FlowEVM which deploys EVM contracts with named associations to Cadence contracts. */ interface IFlowEVMBridgeDeployer is IERC165 { + /** + * @dev Event emitted when a new contract is deployed via this deployer + */ + event Deployed( + address indexed contractAddress, string name, string symbol, string cadenceAddress, string cadenceIdentifier + ); + + /** + * @dev Event emitted when a new deployer is authorized + */ + event DeployerAuthorized(address indexed deployer); + /** * @dev Deploy a new EVM contract with the given name, symbol, and association to a Cadence contract. * diff --git a/solidity/src/interfaces/IFlowEVMDeploymentRegistry.sol b/solidity/src/interfaces/IFlowEVMDeploymentRegistry.sol index 110f8a0f..5af5d3b8 100644 --- a/solidity/src/interfaces/IFlowEVMDeploymentRegistry.sol +++ b/solidity/src/interfaces/IFlowEVMDeploymentRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; @@ -9,6 +9,16 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; * associations between Flow EVM contracts and Cadence contracts. */ interface IFlowEVMDeploymentRegistry is IERC165 { + /** + * @dev Event emitted when a new entity is authorized to register deployments + */ + event RegistrarAuthorized(address indexed registrar); + + /** + * @dev Event emitted when a new deployment is registered + */ + event DeploymentRegistered(address indexed contractAddr, string cadenceIdentifier); + /** * @dev Get the Cadence type identifier associated with a contract address */ diff --git a/solidity/src/templates/FlowEVMBridgedERC20.sol b/solidity/src/templates/FlowEVMBridgedERC20.sol index fca09940..9ec8a77a 100644 --- a/solidity/src/templates/FlowEVMBridgedERC20.sol +++ b/solidity/src/templates/FlowEVMBridgedERC20.sol @@ -1,43 +1,52 @@ // SPDX-License-Identifier: MIT -// Compatible with OpenZeppelin Contracts ^5.0.0 -pragma solidity ^0.8.17; +pragma solidity 0.8.24; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {ICrossVM} from "../interfaces/ICrossVM.sol"; -contract FlowEVMBridgedERC20 is ERC20, ERC20Burnable, Ownable, ERC20Permit { - string public flowTokenAddress; - string public flowTokenIdentifier; +contract FlowEVMBridgedERC20 is ERC165, ERC20, ERC20Burnable, ERC20Permit, Ownable, ICrossVM { + string public cadenceTokenAddress; + string public cadenceTokenIdentifier; string public contractMetadata; constructor( address owner, string memory name, string memory symbol, - string memory _flowTokenAddress, - string memory _flowTokenIdentifier, + string memory _cadenceTokenAddress, + string memory _cadenceTokenIdentifier, string memory _contractMetadata ) ERC20(name, symbol) Ownable(owner) ERC20Permit(name) { - flowTokenAddress = _flowTokenAddress; - flowTokenIdentifier = _flowTokenIdentifier; + cadenceTokenAddress = _cadenceTokenAddress; + cadenceTokenIdentifier = _cadenceTokenIdentifier; contractMetadata = _contractMetadata; } - function mint(address to, uint256 amount) public onlyOwner { - _mint(to, amount); + function getCadenceAddress() external view returns (string memory) { + return cadenceTokenAddress; } - function getFlowTokenAddress() public view returns (string memory) { - return flowTokenAddress; + function getCadenceIdentifier() external view returns (string memory) { + return cadenceTokenIdentifier; } - function getFlowTokenIdentifier() public view returns (string memory) { - return flowTokenIdentifier; + function mint(address to, uint256 amount) public onlyOwner { + _mint(to, amount); } function contractURI() public view returns (string memory) { return contractMetadata; } + + function supportsInterface(bytes4 interfaceId) public view override(ERC165) returns (bool) { + return interfaceId == type(IERC20).interfaceId || interfaceId == type(ERC20Burnable).interfaceId + || interfaceId == type(Ownable).interfaceId || interfaceId == type(ERC20Permit).interfaceId + || interfaceId == type(ICrossVM).interfaceId || super.supportsInterface(interfaceId); + } } diff --git a/solidity/src/templates/FlowEVMBridgedERC721.sol b/solidity/src/templates/FlowEVMBridgedERC721.sol index a9ff920c..9af62692 100644 --- a/solidity/src/templates/FlowEVMBridgedERC721.sol +++ b/solidity/src/templates/FlowEVMBridgedERC721.sol @@ -1,30 +1,44 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.17; +pragma solidity 0.8.24; +import {IERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import {IERC721Metadata} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import {ERC721URIStorage} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import {ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; +import {IERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import {ERC721Burnable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {ICrossVM} from "../interfaces/ICrossVM.sol"; +import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -contract FlowEVMBridgedERC721 is ERC721, ERC721URIStorage, ERC721Burnable, ERC721Enumerable, Ownable { - string public flowNFTAddress; - string public flowNFTIdentifier; +contract FlowEVMBridgedERC721 is ERC721, ERC721URIStorage, ERC721Burnable, ERC721Enumerable, Ownable, ICrossVM { + string public cadenceNFTAddress; + string public cadenceNFTIdentifier; string public contractMetadata; constructor( address owner, string memory name, string memory symbol, - string memory _flowNFTAddress, - string memory _flowNFTIdentifier, + string memory _cadenceNFTAddress, + string memory _cadenceNFTIdentifier, string memory _contractMetadata ) ERC721(name, symbol) Ownable(owner) { - flowNFTAddress = _flowNFTAddress; - flowNFTIdentifier = _flowNFTIdentifier; + cadenceNFTAddress = _cadenceNFTAddress; + cadenceNFTIdentifier = _cadenceNFTIdentifier; contractMetadata = _contractMetadata; } + function getCadenceAddress() external view returns (string memory) { + return cadenceNFTAddress; + } + + function getCadenceIdentifier() external view returns (string memory) { + return cadenceNFTIdentifier; + } + function safeMint(address to, uint256 tokenId, string memory uri) public onlyOwner { _safeMint(to, tokenId); _setTokenURI(tokenId, uri); @@ -38,14 +52,6 @@ contract FlowEVMBridgedERC721 is ERC721, ERC721URIStorage, ERC721Burnable, ERC72 return contractMetadata; } - function getFlowNFTAddress() public view returns (string memory) { - return flowNFTAddress; - } - - function getFlowNFTIdentifier() public view returns (string memory) { - return flowNFTIdentifier; - } - function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } @@ -56,7 +62,10 @@ contract FlowEVMBridgedERC721 is ERC721, ERC721URIStorage, ERC721Burnable, ERC72 override(ERC721, ERC721Enumerable, ERC721URIStorage) returns (bool) { - return super.supportsInterface(interfaceId); + return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC721Metadata).interfaceId + || interfaceId == type(IERC721Enumerable).interfaceId || interfaceId == type(ERC721Burnable).interfaceId + || interfaceId == type(Ownable).interfaceId || interfaceId == type(ICrossVM).interfaceId + || super.supportsInterface(interfaceId); } function exists(uint256 tokenId) public view returns (bool) { diff --git a/solidity/test/FlowBridgeFactory.t.sol b/solidity/test/FlowBridgeFactory.t.sol index 477d6f96..19857e23 100644 --- a/solidity/test/FlowBridgeFactory.t.sol +++ b/solidity/test/FlowBridgeFactory.t.sol @@ -20,10 +20,10 @@ contract FlowBridgeFactoryTest is Test { string name; string symbol; - string flowNFTAddress; - string flowNFTIdentifier; - string flowTokenAddress; - string flowTokenIdentifier; + string cadenceNFTAddress; + string cadenceNFTIdentifier; + string cadenceTokenAddress; + string cadenceTokenIdentifier; string contractURI; address deployedERC20Address; address deployedERC721Address; @@ -31,10 +31,10 @@ contract FlowBridgeFactoryTest is Test { function setUp() public virtual { name = "name"; symbol = "symbol"; - flowNFTAddress = "flowNFTAddress"; - flowNFTIdentifier = "flowNFTIdentifier"; - flowTokenAddress = "flowTokenAddress"; - flowTokenIdentifier = "flowTokenIdentifier"; + cadenceNFTAddress = "cadenceNFTAddress"; + cadenceNFTIdentifier = "cadenceNFTIdentifier"; + cadenceTokenAddress = "cadenceTokenAddress"; + cadenceTokenIdentifier = "cadenceTokenIdentifier"; contractURI = "contractURI"; factory = new FlowBridgeFactory(); @@ -52,69 +52,69 @@ contract FlowBridgeFactoryTest is Test { factory.addDeployer("ERC20", address(erc20Deployer)); factory.addDeployer("ERC721", address(erc721Deployer)); - deployedERC20Address = factory.deploy("ERC20", name, symbol, flowTokenAddress, flowTokenIdentifier, contractURI); - deployedERC721Address = factory.deploy("ERC721", name, symbol, flowNFTAddress, flowNFTIdentifier, contractURI); + deployedERC20Address = factory.deploy("ERC20", name, symbol, cadenceTokenAddress, cadenceTokenIdentifier, contractURI); + deployedERC721Address = factory.deploy("ERC721", name, symbol, cadenceNFTAddress, cadenceNFTIdentifier, contractURI); deployedERC20Contract = FlowEVMBridgedERC20(deployedERC20Address); deployedERC721Contract = FlowEVMBridgedERC721(deployedERC721Address); } - function test_RegistryIsNonZero() public { + function test_RegistryIsNonZero() public view { address registryAddress = factory.getRegistry(); assertNotEq(registryAddress, address(0)); } - function test_GetERC20Deployer() public { + function test_GetERC20Deployer() public view { address erc20DeployerAddress = factory.getDeployer("ERC20"); assertEq(erc20DeployerAddress, address(erc20Deployer)); } - function test_GetERC721Deployer() public { + function test_GetERC721Deployer() public view { address erc721DeployerAddress = factory.getDeployer("ERC721"); assertEq(erc721DeployerAddress, address(erc721Deployer)); } - function test_DeployERC721() public { + function test_DeployERC721() public view { bool isBridgeDeployed = factory.isBridgeDeployed(deployedERC721Address); assertEq(isBridgeDeployed, true); } - function test_IsERC721True() public { + function test_IsERC721True() public view { bool isERC721 = factory.isERC721(deployedERC721Address); assertEq(isERC721, true); } - function test_IsERC721False() public { + function test_IsERC721False() public view { bool isERC721 = factory.isERC721(deployedERC20Address); assertEq(isERC721, false); } - function test_DeployERC20() public { + function test_DeployERC20() public view { bool isBridgeDeployed = factory.isBridgeDeployed(deployedERC20Address); assertEq(isBridgeDeployed, true); } - function test_IsERC20True() public { + function test_IsERC20True() public view { bool isERC20 = factory.isERC20(deployedERC20Address); assertEq(isERC20, true); } - function test_IsERC20False() public { + function test_IsERC20False() public view { bool isERC20 = factory.isERC20(deployedERC721Address); assertEq(isERC20, false); } - function test_ValidateDeployedERC721Address() public { + function test_ValidateDeployedERC721Address() public view { string memory _name = deployedERC721Contract.name(); string memory _symbol = deployedERC721Contract.symbol(); - string memory _flowNFTAddress = deployedERC721Contract.flowNFTAddress(); - string memory _flowNFTIdentifier = deployedERC721Contract.flowNFTIdentifier(); + string memory _cadenceNFTAddress = deployedERC721Contract.getCadenceAddress(); + string memory _cadenceNFTIdentifier = deployedERC721Contract.getCadenceIdentifier(); string memory _contractURI = deployedERC721Contract.contractURI(); assertEq(_name, name); assertEq(_symbol, symbol); - assertEq(_flowNFTAddress, flowNFTAddress); - assertEq(_flowNFTIdentifier, flowNFTIdentifier); + assertEq(_cadenceNFTAddress, cadenceNFTAddress); + assertEq(_cadenceNFTIdentifier, cadenceNFTIdentifier); assertEq(_contractURI, contractURI); address factoryOwner = factory.owner(); @@ -122,17 +122,17 @@ contract FlowBridgeFactoryTest is Test { assertEq(factoryOwner, erc721Owner); } - function test_ValidateDeployedERC20Address() public { + function test_ValidateDeployedERC20Address() public view { string memory _name = deployedERC20Contract.name(); string memory _symbol = deployedERC20Contract.symbol(); - string memory _flowTokenAddress = deployedERC20Contract.getFlowTokenAddress(); - string memory _flowTokenIdentifier = deployedERC20Contract.flowTokenIdentifier(); + string memory _cadenceTokenAddress = deployedERC20Contract.getCadenceAddress(); + string memory _cadenceTokenIdentifier = deployedERC20Contract.getCadenceIdentifier(); string memory _contractURI = deployedERC20Contract.contractURI(); assertEq(_name, name); assertEq(_symbol, symbol); - assertEq(_flowTokenAddress, flowTokenAddress); - assertEq(_flowTokenIdentifier, flowTokenIdentifier); + assertEq(_cadenceTokenAddress, cadenceTokenAddress); + assertEq(_cadenceTokenIdentifier, cadenceTokenIdentifier); assertEq(_contractURI, contractURI); address factoryOwner = factory.owner();