-
Notifications
You must be signed in to change notification settings - Fork 143
Instantiating a DAO
To instantiate a DAO you will need to:
- Build + optimize the contracts.
- Upload the contracts to a CosmWasm blockchain.
- Craft an instantiate message.
- Instantiate the DAO via our CosmWasm admin template.
Install docker and just and run this from the root of the dao-contracts repository:
just workspace-optimize
Take a moment to consider what configuration you'd like your DAO to have and then store the appropriate contracts. Two popular DAO configurations look like this:
- Token based DAO with cw20 token staking.
- Non-token based DAO with multisig style membership. The titles on the boxes there correspond to the contracts that make up those configurations. So, if you'd like one of those configurations exactly (but why would you, you're reading the advanced instantiation docs), you can store those contracts. Otherwise, you'll want to think about the configuration you want and swap out the needed parts.
For example, if you wanted native token staking you'd want to replace dao-voting-cw20-staked
with dao-voting-native-staked
in the token based DAO diagram.
To store the contracts you'll end up running something that looks like this:
junod tx wasm store artifacts/dao_voting_native_staked.wasm --from ekez --fees 1200000ujunox --gas auto --gas-adjustment 2
Consult the documentation of whatever blockchain you're using on the precise details.
Juno is a nice blockchain and has docs here. You can find docs about installing junod
here. For RPC nodes, at the time of writing I recommend using https://rpc.uni.juno.deuslabs.fi:443
for testnet and https://rpc-juno.itastakers.com:443
for mainnet.
Explaining how to do this from first principles is far beyond this scope of this wiki page. If you have never instantiated a contract before, I'd recommend starting by walking through this tutorial, then read through the "JSON conversion" section of these DAO DAO docs.
Once you understand how contract instantiation works you'll just need to make an instantiate message for your DAO.
The DAO DAO webpage will show the JSON message being used to instantiate the DAO on the review page of proposal creation if you press the "Show Instantiate Message" button.
🌱 When constructing the instantiate message for modules, the resulting message must be base64 encoded when placed into the msg
field of the ModuleInstantiateInfo
. For example, if your instantiate message was {"foo": 10}
you would set the msg
field to eyJmb28iOiAxMH0=
as that is the base64 encoding of the instantiate message.
The following was written for Juno prop #49. It breaks down and explains the Juno Growth Fund SubDAO instantiation message.
For context, the CosmWasm instantiation message creates a new smart contract. In DAO DAO, the instantiation message actually creates multiple smart contracts that constitute the DAO.
The proposal module contains the settings for voting and execution of proposals.
Revoting is allowed, meaning members can change their votes up until the proposal has passed if they have recieved new information. For a proposal to pass, 6 / 11 members must vote YES. The voting period is 5 days.
Only members of the SubDAO can execute a proposal once it is passed.
{"allow_revoting":true,"max_voting_period":{"time":432000},"only_members_execute":true,"threshold":{"absolute_count":{"threshold":"6"}}}
Encoded as base64 (which you can verify using a base64 decoder like this one):
eyJhbGxvd19yZXZvdGluZyI6dHJ1ZSwibWF4X3ZvdGluZ19wZXJpb2QiOnsidGltZSI6NDMyMDAwfSwib25seV9tZW1iZXJzX2V4ZWN1dGUiOnRydWUsInRocmVzaG9sZCI6eyJhYnNvbHV0ZV9jb3VudCI6eyJ0aHJlc2hvbGQiOiI2In19fQ==
The voting module determins who has voting power in the DAO. In this case, this list is managed by a cw4-groups
contract. Each member of the Juno Growth Fund SubDAO has submitted their addresses, and will each have a voting power of 1.
{
"cw4_group_code_id": 434,
"initial_members": [
{
"addr": "juno1jwxjzpwdtglf7a35sackv0dn0hr9nk6h6ctsh4",
"weight": 1
},
{
"addr": "juno1eck27qefttt5twxsg38gsr0q0hr4e3vvyxm2q4",
"weight": 1
},
{
"addr": "juno1njyvry0t3j5dy4rr6ar5zfglg3cy2e8u745hl7",
"weight": 1
},
{
"addr": "juno1e6fhmfer34hh7kl9um6p52nkqflkp4jajgxunw",
"weight": 1
},
{
"addr": "juno1phcqn3pzpwv34qg754nhswjrztwrlfaxyhxgku",
"weight": 1
},
{
"addr": "juno1ctrx5p95ypr04n7ksxenjug79zkjkz4sjft8gl",
"weight": 1
},
{
"addr": "juno1dvpyr5j5hsdtdw33kpf8xgypu7jnpf02udjyy7",
"weight": 1
},
{
"addr": "juno12ls39vndhd55c5dm7ufund4kvzg6hrw50r0tdz",
"weight": 1
},
{
"addr": "juno1ghe0uuat7zrj9qqw2pznwutdgr9u05kfs52rkd",
"weight": 1
},
{
"addr": "juno1q4ar2jwef0zdwmr4xwesxdgxnnkwfvl2m9p2e4",
"weight": 1
},
{
"addr": "juno1ha02l778d999dfk09d9d7gvd69g0hn7zxnkg8u",
"weight": 1
}
]
}
Encoded as base64 (which you can verify using a base64 decoder like this one):
ewogICJjdzRfZ3JvdXBfY29kZV9pZCI6IDQzNCwKICAiaW5pdGlhbF9tZW1iZXJzIjogWwogICAgewogICAgICAiYWRkciI6ICJqdW5vMWp3eGp6cHdkdGdsZjdhMzVzYWNrdjBkbjBocjluazZoNmN0c2g0IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xZWNrMjdxZWZ0dHQ1dHd4c2czOGdzcjBxMGhyNGUzdnZ5eG0ycTQiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFuanl2cnkwdDNqNWR5NHJyNmFyNXpmZ2xnM2N5MmU4dTc0NWhsNyIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMWU2ZmhtZmVyMzRoaDdrbDl1bTZwNTJua3FmbGtwNGphamd4dW53IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xcGhjcW4zcHpwd3YzNHFnNzU0bmhzd2pyenR3cmxmYXh5aHhna3UiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFjdHJ4NXA5NXlwcjA0bjdrc3hlbmp1Zzc5emtqa3o0c2pmdDhnbCIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMWR2cHlyNWo1aHNkdGR3MzNrcGY4eGd5cHU3am5wZjAydWRqeXk3IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xMmxzMzl2bmRoZDU1YzVkbTd1ZnVuZDRrdnpnNmhydzUwcjB0ZHoiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFnaGUwdXVhdDd6cmo5cXF3MnB6bnd1dGRncjl1MDVrZnM1MnJrZCIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMXE0YXIyandlZjB6ZHdtcjR4d2VzeGRneG5ua3dmdmwybTlwMmU0IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xaGEwMmw3NzhkOTk5ZGZrMDlkOWQ3Z3ZkNjlnMGhuN3p4bmtnOHUiLAogICAgICAid2VpZ2h0IjogMQogICAgfQogIF0KfQo=
Here is the complete SubDAO instantiation message for the Juno Growth Fund. Note, the admin is set to the Juno Community Pool, meaning Juno Governance has complete power over this SubDAO.
{
"admin": "juno1jv65s3grqf6v6jl3dp4t6c9t9rk99cd83d88wr",
"automatically_add_cw20s": false,
"automatically_add_cw721s": false,
"description": "The Juno Growth Fund is an official SubDAO of Juno Network, responsible for the long-term growth and sustainability of the network, and seeks to enable builders which will accrue substantial value to the network and its stakers.",
"image_url": "https://cloudflare-ipfs.com/ipfs/bafkreigznjnnoy3cad5it6kldii2zsmxhtq7pa3caigbhka36x7gbbzjde",
"name": "Juno Growth Fund",
"proposal_modules_instantiate_info": [
{
"admin": {
"core_contract": {}
},
"code_id": 427,
"label": "JGF proposal-single",
"msg": "eyJhbGxvd19yZXZvdGluZyI6dHJ1ZSwibWF4X3ZvdGluZ19wZXJpb2QiOnsidGltZSI6NDMyMDAwfSwib25seV9tZW1iZXJzX2V4ZWN1dGUiOnRydWUsInRocmVzaG9sZCI6eyJhYnNvbHV0ZV9jb3VudCI6eyJ0aHJlc2hvbGQiOiI2In19fQ=="
}
],
"voting_module_instantiate_info": {
"admin": {
"core_contract": {}
},
"code_id": 429,
"label": "JGF cw4-voting",
"msg": "ewogICJjdzRfZ3JvdXBfY29kZV9pZCI6IDQzNCwKICAiaW5pdGlhbF9tZW1iZXJzIjogWwogICAgewogICAgICAiYWRkciI6ICJqdW5vMWp3eGp6cHdkdGdsZjdhMzVzYWNrdjBkbjBocjluazZoNmN0c2g0IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xZWNrMjdxZWZ0dHQ1dHd4c2czOGdzcjBxMGhyNGUzdnZ5eG0ycTQiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFuanl2cnkwdDNqNWR5NHJyNmFyNXpmZ2xnM2N5MmU4dTc0NWhsNyIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMWU2ZmhtZmVyMzRoaDdrbDl1bTZwNTJua3FmbGtwNGphamd4dW53IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xcGhjcW4zcHpwd3YzNHFnNzU0bmhzd2pyenR3cmxmYXh5aHhna3UiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFjdHJ4NXA5NXlwcjA0bjdrc3hlbmp1Zzc5emtqa3o0c2pmdDhnbCIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMWR2cHlyNWo1aHNkdGR3MzNrcGY4eGd5cHU3am5wZjAydWRqeXk3IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xMmxzMzl2bmRoZDU1YzVkbTd1ZnVuZDRrdnpnNmhydzUwcjB0ZHoiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFnaGUwdXVhdDd6cmo5cXF3MnB6bnd1dGRncjl1MDVrZnM1MnJrZCIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMXE0YXIyandlZjB6ZHdtcjR4d2VzeGRneG5ua3dmdmwybTlwMmU0IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xaGEwMmw3NzhkOTk5ZGZrMDlkOWQ3Z3ZkNjlnMGhuN3p4bmtnOHUiLAogICAgICAid2VpZ2h0IjogMQogICAgfQogIF0KfQo="
}
}
The full command used to create the proposal specifies the code id, the CosmWasm smart contract code to use for contract instantiation. 432 corresponds to the DAO DAO core module.
It also sets the community pool as admin over all instantiated smart contracts, giving it the ability upgrade or migrate contracts if need be.
junod tx gov submit-proposal instantiate-contract 432 '{
"admin": "juno1jv65s3grqf6v6jl3dp4t6c9t9rk99cd83d88wr",
"automatically_add_cw20s": false,
"automatically_add_cw721s": false,
"description": "The Juno Growth Fund is an official SubDAO of Juno Network, responsible for the long-term growth and sustainability of the network, and seeks to enable builders which will accrue substantial value to the network and its stakers.",
"image_url": "https://cloudflare-ipfs.com/ipfs/bafkreigznjnnoy3cad5it6kldii2zsmxhtq7pa3caigbhka36x7gbbzjde",
"name": "Juno Growth Fund",
"proposal_modules_instantiate_info": [
{
"admin": {
"core_contract": {}
},
"code_id": 427,
"label": "JGF proposal-single",
"msg": "eyJhbGxvd19yZXZvdGluZyI6dHJ1ZSwibWF4X3ZvdGluZ19wZXJpb2QiOnsidGltZSI6NDMyMDAwfSwib25seV9tZW1iZXJzX2V4ZWN1dGUiOnRydWUsInRocmVzaG9sZCI6eyJhYnNvbHV0ZV9jb3VudCI6eyJ0aHJlc2hvbGQiOiI2In19fQ=="
}
],
"voting_module_instantiate_info": {
"admin": {
"core_contract": {}
},
"code_id": 429,
"label": "JGF cw4-voting",
"msg": "ewogICJjdzRfZ3JvdXBfY29kZV9pZCI6IDQzNCwKICAiaW5pdGlhbF9tZW1iZXJzIjogWwogICAgewogICAgICAiYWRkciI6ICJqdW5vMWp3eGp6cHdkdGdsZjdhMzVzYWNrdjBkbjBocjluazZoNmN0c2g0IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xZWNrMjdxZWZ0dHQ1dHd4c2czOGdzcjBxMGhyNGUzdnZ5eG0ycTQiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFuanl2cnkwdDNqNWR5NHJyNmFyNXpmZ2xnM2N5MmU4dTc0NWhsNyIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMWU2ZmhtZmVyMzRoaDdrbDl1bTZwNTJua3FmbGtwNGphamd4dW53IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xcGhjcW4zcHpwd3YzNHFnNzU0bmhzd2pyenR3cmxmYXh5aHhna3UiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFjdHJ4NXA5NXlwcjA0bjdrc3hlbmp1Zzc5emtqa3o0c2pmdDhnbCIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMWR2cHlyNWo1aHNkdGR3MzNrcGY4eGd5cHU3am5wZjAydWRqeXk3IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xMmxzMzl2bmRoZDU1YzVkbTd1ZnVuZDRrdnpnNmhydzUwcjB0ZHoiLAogICAgICAid2VpZ2h0IjogMQogICAgfSwKICAgIHsKICAgICAgImFkZHIiOiAianVubzFnaGUwdXVhdDd6cmo5cXF3MnB6bnd1dGRncjl1MDVrZnM1MnJrZCIsCiAgICAgICJ3ZWlnaHQiOiAxCiAgICB9LAogICAgewogICAgICAiYWRkciI6ICJqdW5vMXE0YXIyandlZjB6ZHdtcjR4d2VzeGRneG5ua3dmdmwybTlwMmU0IiwKICAgICAgIndlaWdodCI6IDEKICAgIH0sCiAgICB7CiAgICAgICJhZGRyIjogImp1bm8xaGEwMmw3NzhkOTk5ZGZrMDlkOWQ3Z3ZkNjlnMGhuN3p4bmtnOHUiLAogICAgICAid2VpZ2h0IjogMQogICAgfQogIF0KfQo="
}
}' --label "Juno Growth Fund SubDAO" --title "Creation of the Grow Juno SubDAO" --description '# Grow Juno SubDAO\n\nThe Juno community’s Terra Developer Fund has achieved its purpose. Since the passing of the Terra Developer Fund Proposal, 18 projects have pulled themselves from the wreckage of the Terra collapse and found a new home on Juno. In this process of delivering aid to Terra projects, we noticed that Terra developers aren’t the only ones who could use a little help. There are many new projects building on Juno, or who wish to build on Juno, that could benefit from community support.\n\nThe rapid ascent of projects on Juno has been fantastic, but in an increasingly competitive landscape, we must maintain this momentum and drive growth sustainably for the long term. We can now do this with the Growth Fund, one led by community members, operated transparently, and owned by Juno governance. We now have the time and opportunity to build up the ideal form of this DAO. We must have more human resources, diverse views, and representatives from the community - as well as a means to collaborate with outside capital partners to participate alongside the Juno Community in funding these protocols. The projects built in this bear market will define Juno’s future as a leader in the Cosmos, a home for projects and protocols, and a community-driven incubator for the CosmWasm interchain.\n\nThis proposal would transition the Terra Developer Fund into an official Grow Juno SubDAO. This proposal aims to expand the membership to include members from the community with professional investing experience, analyst skill sets and valuable business acumen. As a community initiative, we are purposefully aiming to have less representation from Core-1, and stronger representation from experts within the community.\n\nThis proposal will expand upon Proposal 23 by extending the scope beyond Terra migrations to include all new projects and investments conducive to the growth and development of Juno, to bring more value to Juno holders as a whole, as well as new investment opportunities which expand the Juno’s Community Pool and make it a sustainable resource for continued growth and community endeavors. \n\nThe [Terra Developer Fund Treasury](https://legacy.daodao.zone/multisig/juno1lgnstas4ruflg0eta394y8epq67s4rzhg5anssz3rc5zwvjmmvcql6qps2) will be transferred to the Grow Juno SubDAO and will seed the initial SubDAO treasury.\n\n## Creation of SubDAO\n\nIf passed, an official SubDAO will be created so that the Juno community maintains control of the SubDAO itself, and its associated treasury.\n\nAt the time of Prop 23 passing, the DAODAO SubDAO system was not available. Now that it is available, it is a much better setup than a normal multisig and with DAODAO V2 on the way, this will only make SubDAOs more effective.\n\n**Some key benefits are:**\n\n- Community control of SubDAO membership.\n- Community control of SubDAO treasury.\n- Formalization of the purpose of this SubDAO: To grow the overall ecosystem and bring in new capital.\n- Control from the community to return funds to the Community Pool, if it deems necessary.\n- Control from the community to add or remove members and the entire SubDAO, if it deems necessary.\n\n**Specific mandates:**\n\n1) The Grow Juno SubDAO will seek community approval (through on-chain signaling proposal) for any grants above $250k to any single entity.\n\n2) The Grow Juno SubDAO will actively seek out projects and investments which can contribute strong token swaps and/or obvious profits to the Community Pool, and will always aim to take actions which maintain the sustainability of the fund for the Juno community. In some cases, public goods may be funded, subject to the same limitations as above, insofar as they unlock key functionality for promising new protocols, (i.e. oracles, infrastructure partners, indexing, protocol code audits, etc)\n\n3) The Grow Juno SubDAO Treasury is subject to the control of the entire community. The community has the ability to cancel any outstanding funding and/or return funds to the community pool, at any time through governance, for any reason.\n\n4) The Grow Juno SubDAO membership will be established by governance, and will be maintained and changed using DAO voting, as necessary to accommodate and adjust its membership to the needs of the Juno Community. At any time, on-chain governance can override membership, as with all SubDAOs.\n\n5) As the membership is expanding, it’s important to mandate that, where notable conflicts of interest may occur, members are expected to vote to abstain and recuse themselves. Simply being an investor in a project shall not be deemed to be a conflict of interest.\n\n6) The Grow Juno SubDAO will encourage and assist protocols in seeking additional supplementary funding with outside capital and funding partners to lower the risk of funding issuance by the Juno community, and will help to bring in new capital to the ecosystem through venture partners.\n\n7) Being an investor in projects is encouraged, and many of the venture investors working alongside the DAO can and should take on the risk of investing in protocols coming into the ecosystem. This must be encouraged to spread risk/benefit amongst numerous entities, and not place the burden of protocol funding solely upon the Juno community. Investments shall be disclosed by members publicly.\n\n8) Members of the DAO should be paid modestly while proving their own continued effectiveness and the viability of the subDAO, but well enough to put in the hours required to achieve the goals of the subDAO. This will be implemented sustainably by staking a portion of the treasury so that funding is not depleted over time.\n\n9) These mandates can be changed only through SubDAO membership voting on DAODAO, in a manner fully visible to the Juno community.\n\n**The membership of this SubDAO is proposed to be as such:**\n\n6 of 11 required for funding approval\n\n- Kevin Garrison (Oni Validator + Juno Biz Dev)\n- Maxjuno (Community Outreach + DAO Coordination)\n- Pupmos (Technical Expertise, Validator)\n- GoldenRatioStaking (Contracts Negotiations, Real Estate Investor)\n- Rarma (Project Manager, Quality Assurance, Vetting)\n- Jonathan DeLine (Venture Experience, M&A, Advisor)\n- Wtrsld (NetaDAO + Venture Experience)\n- Avicenna - Kleomedes (Validator, Fund Experience, Yield Expert, Analytics)\n- BoringDAO Members (Cosmos Investment DAO: Rahul P., Jonathan K., Connor K., RJ Patel)\n- Jonathan Caras, (VC, Protocol Outreach, Project Specialist, Comms)\n- Matthew Cantieri (VC, Microsoft VC, Protocol Incubation)\n\n**Advisory Board to the subDAO:**\nThese are advisors to the subDAO, who have valuable insights and skills and will also serve as a pool of potential DAO members who can step in to take up a voting seat, when needed.\n\n- _BitN8 (Project Specialist, Vetting)_\n- _JaparJam (Web3 Builders Alliance, Developer Resources)_\n- _CamelJuno (Full Stack Dev, UI/UX/DX, C2 Contributor)_\n- _Soi2studios (Community + Investor)_\n- _Reece, Validator & Technical Expert - NotionalDAO_\n- _TendermintTimmy, (SparkIBC, Community Validator)_\n- _Joe Abbey (Community Validator, Technical Expert)_\n- _Highlander Nodes (Validator, C2 Contributor)_\n- _Gjermund Garaba (EmpowerChain, Dev, Validator)_\n- _CommunityStaking (Community Validator)_\n- _DelRey - Stakin (Community Validator)_\n\n### Verifying the SubDAO Instantiation Message\nInformation on verifying and understanding the SubDAO Instantiation message and how it works can be found [here](https://gist.github.com/JakeHartnell/95492da2508074e44b8e5cef01aebc5f).\n\n## Vote:\n\nBy voting **YES**, you agree the Grow Juno SubDAO should be created as per the above proposal.\n\nBy Voting **NO**, it means you do not believe the Juno Ecosystem Growth Fund should be created as per the above proposal.\n\nBy voting **ABSTAIN**, you formally decline to vote either for or against the proposal.\n\nVoting **NOWITHVETO** expresses that you would like to see depositors penalized by revocation of their proposal deposit, and contributes towards an automatic 1/3 veto threshold.\n' --run-as juno1jv65s3grqf6v6jl3dp4t6c9t9rk99cd83d88wr --admin juno1jv65s3grqf6v6jl3dp4t6c9t9rk99cd83d88wr --amount 0ujuno --from <keyname> --gas-prices 0.025ujuno --gas 3000000
To allow DAOs to migrate their core contracts we instantiate them via the cw-admin-factory
contract.
This contract is reasonably straightforward to use. Just put together your instantiate message, base64 encode it, and send it to the factory contract's InstantiateContractWithSelfAdmin
method.
If you'd like to use the ones we use in the DAO DAO frontend it's juno1a4ups3462sscvdk5ydw3mf56690n6n3cwaju0jllh52cnes4mdhspl5gp6
on the Juno testnet and juno1eeqgsjyqxcscpxwa6ut36py8vfpu6hxrwy62n2vgu8ud72wa9pyqv38q7y
on the Juno mainnet. Otherwise, you can totally store it yourself.
This is an up-to-date example instantiating a v2.4.2 DAO on Osmosis using an existing token.
The values we need are:
- Admin factory contract that instantiates a contract with its admin set to its own address
- DAO Code IDs
These can be found in packages/utils/constants/chains.ts
and packages/utils/constants/codeIds.json
for all of the chains DAO DAO is deployed on.
For Osmosis mainnet:
Admin factory: osmo102pg8quxtvhye3k4rcqwh7j5zwf5ekhcvlquafjjxjnarhu38qzstkdm6p
DAO Code IDs:
DaoCore: 365
DaoPreProposeMultiple: 359
DaoPreProposeSingle: 360
DaoProposalMultiple: 366
DaoProposalSingle: 361
DaoVotingCw4: 362
DaoVotingCw721Staked: 363
DaoVotingTokenStaked: 367
The config is as follows:
- 1% of tokens must be staked before the DAO is active (can create proposals)
- Existing token (
DENOM
) used as the governance token (staked voting power) - 2 week unstaking period for staked voting power/tokens
- No proposal deposit
- Only members can submit proposals
- No revoting
- Proposals close on execution failure
- 1 week voting period (unless an outcome is guaranteed sooner)
- No minimum voting period (proposals pass/reject once outcome is guaranteed)
- Only members can execute passed proposals
- Majority passing threshold
- 20% quorum
For dao-voting-token-staked
, this is the instantiation message:
{
"active_threshold": {
"percentage": {
"percent": "0.01"
}
},
"token_info": {
"existing": {
"denom": "DENOM"
}
},
"unstaking_duration": {
"time": 1209600
}
}
which gets base64-encoded into:
ewogICJhY3RpdmVfdGhyZXNob2xkIjogewogICAgInBlcmNlbnRhZ2UiOiB7CiAgICAgICJwZXJjZW50IjogIjAuMDEiCiAgICB9CiAgfSwKICAidG9rZW5faW5mbyI6IHsKICAgICJleGlzdGluZyI6IHsKICAgICAgImRlbm9tIjogIkRFTk9NIgogICAgfQogIH0sCiAgInVuc3Rha2luZ19kdXJhdGlvbiI6IHsKICAgICJ0aW1lIjogMTIwOTYwMAogIH0KfQ==
We'll add two proposal modules: single choice and multiple choice. Each proposal module also contains a pre-propose module instantiation.
Both dao-pre-propose-single
and dao-pre-propose-multiple
have the same
instantiation msg:
{
"deposit_info": null,
"extension": {},
"open_proposal_submission": false
}
ewogICJkZXBvc2l0X2luZm8iOiBudWxsLAogICJleHRlbnNpb24iOiB7fSwKICAib3Blbl9wcm9wb3NhbF9zdWJtaXNzaW9uIjogZmFsc2UKfQ==
And then we can construct the proposal modules:
dao-proposal-single
:
{
"allow_revoting": false,
"close_proposal_on_execution_failure": true,
"max_voting_period": {
"time": 604800
},
"min_voting_period": null,
"only_members_execute": true,
"pre_propose_info": {
"module_may_propose": {
"info": {
"admin": {
"core_module": {}
},
"code_id": 360,
"label": "DAO_NAME_pre-propose_DaoProposalSingle",
"msg": "ewogICJkZXBvc2l0X2luZm8iOiBudWxsLAogICJleHRlbnNpb24iOiB7fSwKICAib3Blbl9wcm9wb3NhbF9zdWJtaXNzaW9uIjogZmFsc2UKfQ==",
"funds": []
}
}
},
"threshold": {
"threshold_quorum": {
"quorum": {
"percent": "0.20"
},
"threshold": {
"majority": {}
}
}
},
"veto": null
}
ewogICJhbGxvd19yZXZvdGluZyI6IGZhbHNlLAogICJjbG9zZV9wcm9wb3NhbF9vbl9leGVjdXRpb25fZmFpbHVyZSI6IHRydWUsCiAgIm1heF92b3RpbmdfcGVyaW9kIjogewogICAgInRpbWUiOiA2MDQ4MDAKICB9LAogICJtaW5fdm90aW5nX3BlcmlvZCI6IG51bGwsCiAgIm9ubHlfbWVtYmVyc19leGVjdXRlIjogdHJ1ZSwKICAicHJlX3Byb3Bvc2VfaW5mbyI6IHsKICAgICJtb2R1bGVfbWF5X3Byb3Bvc2UiOiB7CiAgICAgICJpbmZvIjogewogICAgICAgICJhZG1pbiI6IHsKICAgICAgICAgICJjb3JlX21vZHVsZSI6IHt9CiAgICAgICAgfSwKICAgICAgICAiY29kZV9pZCI6IDM2MCwKICAgICAgICAibGFiZWwiOiAiREFPX05BTUVfcHJlLXByb3Bvc2VfRGFvUHJvcG9zYWxTaW5nbGUiLAogICAgICAgICJtc2ciOiAiZXdvZ0lDSmtaWEJ2YzJsMFgybHVabThpT2lCdWRXeHNMQW9nSUNKbGVIUmxibk5wYjI0aU9pQjdmU3dLSUNBaWIzQmxibDl3Y205d2IzTmhiRjl6ZFdKdGFYTnphVzl1SWpvZ1ptRnNjMlVLZlE9PSIsCiAgICAgICAgImZ1bmRzIjogW10KICAgICAgfQogICAgfQogIH0sCiAgInRocmVzaG9sZCI6IHsKICAgICJ0aHJlc2hvbGRfcXVvcnVtIjogewogICAgICAicXVvcnVtIjogewogICAgICAgICJwZXJjZW50IjogIjAuMjAiCiAgICAgIH0sCiAgICAgICJ0aHJlc2hvbGQiOiB7CiAgICAgICAgIm1ham9yaXR5Ijoge30KICAgICAgfQogICAgfQogIH0sCiAgInZldG8iOiBudWxsCn0=
dao-proposal-multiple
:
{
"allow_revoting": false,
"close_proposal_on_execution_failure": true,
"max_voting_period": {
"time": 604800
},
"min_voting_period": null,
"only_members_execute": true,
"pre_propose_info": {
"module_may_propose": {
"info": {
"admin": {
"core_module": {}
},
"code_id": 359,
"label": "DAO_NAME_pre-propose-DaoProposalMultiple",
"msg": "ewogICJkZXBvc2l0X2luZm8iOiBudWxsLAogICJleHRlbnNpb24iOiB7fSwKICAib3Blbl9wcm9wb3NhbF9zdWJtaXNzaW9uIjogZmFsc2UKfQ==",
"funds": []
}
}
},
"voting_strategy": {
"single_choice": {
"quorum": {
"percent": "0.20"
}
}
},
"veto": null
}
ewogICJhbGxvd19yZXZvdGluZyI6IGZhbHNlLAogICJjbG9zZV9wcm9wb3NhbF9vbl9leGVjdXRpb25fZmFpbHVyZSI6IHRydWUsCiAgIm1heF92b3RpbmdfcGVyaW9kIjogewogICAgInRpbWUiOiA2MDQ4MDAKICB9LAogICJtaW5fdm90aW5nX3BlcmlvZCI6IG51bGwsCiAgIm9ubHlfbWVtYmVyc19leGVjdXRlIjogdHJ1ZSwKICAicHJlX3Byb3Bvc2VfaW5mbyI6IHsKICAgICJtb2R1bGVfbWF5X3Byb3Bvc2UiOiB7CiAgICAgICJpbmZvIjogewogICAgICAgICJhZG1pbiI6IHsKICAgICAgICAgICJjb3JlX21vZHVsZSI6IHt9CiAgICAgICAgfSwKICAgICAgICAiY29kZV9pZCI6IDM1OSwKICAgICAgICAibGFiZWwiOiAiREFPX05BTUVfcHJlLXByb3Bvc2UtRGFvUHJvcG9zYWxNdWx0aXBsZSIsCiAgICAgICAgIm1zZyI6ICJld29nSUNKa1pYQnZjMmwwWDJsdVptOGlPaUJ1ZFd4c0xBb2dJQ0psZUhSbGJuTnBiMjRpT2lCN2ZTd0tJQ0FpYjNCbGJsOXdjbTl3YjNOaGJGOXpkV0p0YVhOemFXOXVJam9nWm1Gc2MyVUtmUT09IiwKICAgICAgICAiZnVuZHMiOiBbXQogICAgICB9CiAgICB9CiAgfSwKICAidm90aW5nX3N0cmF0ZWd5IjogewogICAgInNpbmdsZV9jaG9pY2UiOiB7CiAgICAgICJxdW9ydW0iOiB7CiAgICAgICAgInBlcmNlbnQiOiAiMC4yMCIKICAgICAgfQogICAgfQogIH0sCiAgInZldG8iOiBudWxsCn0=
Putting those base64-encoded messages into the DAO instantiation msg gives:
{
"admin": null,
"automatically_add_cw20s": true,
"automatically_add_cw721s": true,
"description": "DESCRIPTION",
"image_url": "IMAGE_URL",
"name": "NAME",
"proposal_modules_instantiate_info": [
{
"admin": {
"core_module": {}
},
"code_id": 361,
"label": "DAO_NAME_DaoProposalSingle",
"msg": "ewogICJhbGxvd19yZXZvdGluZyI6IGZhbHNlLAogICJjbG9zZV9wcm9wb3NhbF9vbl9leGVjdXRpb25fZmFpbHVyZSI6IHRydWUsCiAgIm1heF92b3RpbmdfcGVyaW9kIjogewogICAgInRpbWUiOiA2MDQ4MDAKICB9LAogICJtaW5fdm90aW5nX3BlcmlvZCI6IG51bGwsCiAgIm9ubHlfbWVtYmVyc19leGVjdXRlIjogdHJ1ZSwKICAicHJlX3Byb3Bvc2VfaW5mbyI6IHsKICAgICJtb2R1bGVfbWF5X3Byb3Bvc2UiOiB7CiAgICAgICJpbmZvIjogewogICAgICAgICJhZG1pbiI6IHsKICAgICAgICAgICJjb3JlX21vZHVsZSI6IHt9CiAgICAgICAgfSwKICAgICAgICAiY29kZV9pZCI6IDM2MCwKICAgICAgICAibGFiZWwiOiAiREFPX05BTUVfcHJlLXByb3Bvc2VfRGFvUHJvcG9zYWxTaW5nbGUiLAogICAgICAgICJtc2ciOiAiZXdvZ0lDSmtaWEJ2YzJsMFgybHVabThpT2lCdWRXeHNMQW9nSUNKbGVIUmxibk5wYjI0aU9pQjdmU3dLSUNBaWIzQmxibDl3Y205d2IzTmhiRjl6ZFdKdGFYTnphVzl1SWpvZ1ptRnNjMlVLZlE9PSIsCiAgICAgICAgImZ1bmRzIjogW10KICAgICAgfQogICAgfQogIH0sCiAgInRocmVzaG9sZCI6IHsKICAgICJ0aHJlc2hvbGRfcXVvcnVtIjogewogICAgICAicXVvcnVtIjogewogICAgICAgICJwZXJjZW50IjogIjAuMjAiCiAgICAgIH0sCiAgICAgICJ0aHJlc2hvbGQiOiB7CiAgICAgICAgIm1ham9yaXR5Ijoge30KICAgICAgfQogICAgfQogIH0sCiAgInZldG8iOiBudWxsCn0=",
"funds": []
},
{
"admin": {
"core_module": {}
},
"code_id": 366,
"label": "DAO_NAME_DaoProposalMultiple",
"msg": "ewogICJhbGxvd19yZXZvdGluZyI6IGZhbHNlLAogICJjbG9zZV9wcm9wb3NhbF9vbl9leGVjdXRpb25fZmFpbHVyZSI6IHRydWUsCiAgIm1heF92b3RpbmdfcGVyaW9kIjogewogICAgInRpbWUiOiA2MDQ4MDAKICB9LAogICJtaW5fdm90aW5nX3BlcmlvZCI6IG51bGwsCiAgIm9ubHlfbWVtYmVyc19leGVjdXRlIjogdHJ1ZSwKICAicHJlX3Byb3Bvc2VfaW5mbyI6IHsKICAgICJtb2R1bGVfbWF5X3Byb3Bvc2UiOiB7CiAgICAgICJpbmZvIjogewogICAgICAgICJhZG1pbiI6IHsKICAgICAgICAgICJjb3JlX21vZHVsZSI6IHt9CiAgICAgICAgfSwKICAgICAgICAiY29kZV9pZCI6IDM1OSwKICAgICAgICAibGFiZWwiOiAiREFPX05BTUVfcHJlLXByb3Bvc2UtRGFvUHJvcG9zYWxNdWx0aXBsZSIsCiAgICAgICAgIm1zZyI6ICJld29nSUNKa1pYQnZjMmwwWDJsdVptOGlPaUJ1ZFd4c0xBb2dJQ0psZUhSbGJuTnBiMjRpT2lCN2ZTd0tJQ0FpYjNCbGJsOXdjbTl3YjNOaGJGOXpkV0p0YVhOemFXOXVJam9nWm1Gc2MyVUtmUT09IiwKICAgICAgICAiZnVuZHMiOiBbXQogICAgICB9CiAgICB9CiAgfSwKICAidm90aW5nX3N0cmF0ZWd5IjogewogICAgInNpbmdsZV9jaG9pY2UiOiB7CiAgICAgICJxdW9ydW0iOiB7CiAgICAgICAgInBlcmNlbnQiOiAiMC4yMCIKICAgICAgfQogICAgfQogIH0sCiAgInZldG8iOiBudWxsCn0=",
"funds": []
}
],
"voting_module_instantiate_info": {
"admin": {
"core_module": {}
},
"code_id": 367,
"label": "DAO_NAME_TokenBased_native",
"msg": "ewogICJhY3RpdmVfdGhyZXNob2xkIjogewogICAgInBlcmNlbnRhZ2UiOiB7CiAgICAgICJwZXJjZW50IjogIjAuMDEiCiAgICB9CiAgfSwKICAidG9rZW5faW5mbyI6IHsKICAgICJleGlzdGluZyI6IHsKICAgICAgImRlbm9tIjogIkRFTk9NIgogICAgfQogIH0sCiAgInVuc3Rha2luZ19kdXJhdGlvbiI6IHsKICAgICJ0aW1lIjogMTIwOTYwMAogIH0KfQ==",
"funds": []
}
}
ewogICJhZG1pbiI6IG51bGwsCiAgImF1dG9tYXRpY2FsbHlfYWRkX2N3MjBzIjogdHJ1ZSwKICAiYXV0b21hdGljYWxseV9hZGRfY3c3MjFzIjogdHJ1ZSwKICAiZGVzY3JpcHRpb24iOiAiREVTQ1JJUFRJT04iLAogICJpbWFnZV91cmwiOiAiSU1BR0VfVVJMIiwKICAibmFtZSI6ICJOQU1FIiwKICAicHJvcG9zYWxfbW9kdWxlc19pbnN0YW50aWF0ZV9pbmZvIjogWwogICAgewogICAgICAiYWRtaW4iOiB7CiAgICAgICAgImNvcmVfbW9kdWxlIjoge30KICAgICAgfSwKICAgICAgImNvZGVfaWQiOiAzNjEsCiAgICAgICJsYWJlbCI6ICJEQU9fTkFNRV9EYW9Qcm9wb3NhbFNpbmdsZSIsCiAgICAgICJtc2ciOiAiZXdvZ0lDSmhiR3h2ZDE5eVpYWnZkR2x1WnlJNklHWmhiSE5sTEFvZ0lDSmpiRzl6WlY5d2NtOXdiM05oYkY5dmJsOWxlR1ZqZFhScGIyNWZabUZwYkhWeVpTSTZJSFJ5ZFdVc0NpQWdJbTFoZUY5MmIzUnBibWRmY0dWeWFXOWtJam9nZXdvZ0lDQWdJblJwYldVaU9pQTJNRFE0TURBS0lDQjlMQW9nSUNKdGFXNWZkbTkwYVc1blgzQmxjbWx2WkNJNklHNTFiR3dzQ2lBZ0ltOXViSGxmYldWdFltVnljMTlsZUdWamRYUmxJam9nZEhKMVpTd0tJQ0FpY0hKbFgzQnliM0J2YzJWZmFXNW1ieUk2SUhzS0lDQWdJQ0p0YjJSMWJHVmZiV0Y1WDNCeWIzQnZjMlVpT2lCN0NpQWdJQ0FnSUNKcGJtWnZJam9nZXdvZ0lDQWdJQ0FnSUNKaFpHMXBiaUk2SUhzS0lDQWdJQ0FnSUNBZ0lDSmpiM0psWDIxdlpIVnNaU0k2SUh0OUNpQWdJQ0FnSUNBZ2ZTd0tJQ0FnSUNBZ0lDQWlZMjlrWlY5cFpDSTZJRE0yTUN3S0lDQWdJQ0FnSUNBaWJHRmlaV3dpT2lBaVJFRlBYMDVCVFVWZmNISmxMWEJ5YjNCdmMyVmZSR0Z2VUhKdmNHOXpZV3hUYVc1bmJHVWlMQW9nSUNBZ0lDQWdJQ0p0YzJjaU9pQWlaWGR2WjBsRFNtdGFXRUoyWXpKc01GZ3liSFZhYlRocFQybENkV1JYZUhOTVFXOW5TVU5LYkdWSVVteGliazV3WWpJMGFVOXBRamRtVTNkTFNVTkJhV0l6UW14aWJEbDNZMjA1ZDJJelRtaGlSamw2WkZkS2RHRllUbnBoVnpsMVNXcHZaMXB0Um5Oak1sVkxabEU5UFNJc0NpQWdJQ0FnSUNBZ0ltWjFibVJ6SWpvZ1cxMEtJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMHNDaUFnSW5Sb2NtVnphRzlzWkNJNklIc0tJQ0FnSUNKMGFISmxjMmh2YkdSZmNYVnZjblZ0SWpvZ2V3b2dJQ0FnSUNBaWNYVnZjblZ0SWpvZ2V3b2dJQ0FnSUNBZ0lDSndaWEpqWlc1MElqb2dJakF1TWpBaUNpQWdJQ0FnSUgwc0NpQWdJQ0FnSUNKMGFISmxjMmh2YkdRaU9pQjdDaUFnSUNBZ0lDQWdJbTFoYW05eWFYUjVJam9nZTMwS0lDQWdJQ0FnZlFvZ0lDQWdmUW9nSUgwc0NpQWdJblpsZEc4aU9pQnVkV3hzQ24wPSIsCiAgICAgICJmdW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiYWRtaW4iOiB7CiAgICAgICAgImNvcmVfbW9kdWxlIjoge30KICAgICAgfSwKICAgICAgImNvZGVfaWQiOiAzNjYsCiAgICAgICJsYWJlbCI6ICJEQU9fTkFNRV9EYW9Qcm9wb3NhbE11bHRpcGxlIiwKICAgICAgIm1zZyI6ICJld29nSUNKaGJHeHZkMTl5WlhadmRHbHVaeUk2SUdaaGJITmxMQW9nSUNKamJHOXpaVjl3Y205d2IzTmhiRjl2Ymw5bGVHVmpkWFJwYjI1ZlptRnBiSFZ5WlNJNklIUnlkV1VzQ2lBZ0ltMWhlRjkyYjNScGJtZGZjR1Z5YVc5a0lqb2dld29nSUNBZ0luUnBiV1VpT2lBMk1EUTRNREFLSUNCOUxBb2dJQ0p0YVc1ZmRtOTBhVzVuWDNCbGNtbHZaQ0k2SUc1MWJHd3NDaUFnSW05dWJIbGZiV1Z0WW1WeWMxOWxlR1ZqZFhSbElqb2dkSEoxWlN3S0lDQWljSEpsWDNCeWIzQnZjMlZmYVc1bWJ5STZJSHNLSUNBZ0lDSnRiMlIxYkdWZmJXRjVYM0J5YjNCdmMyVWlPaUI3Q2lBZ0lDQWdJQ0pwYm1adklqb2dld29nSUNBZ0lDQWdJQ0poWkcxcGJpSTZJSHNLSUNBZ0lDQWdJQ0FnSUNKamIzSmxYMjF2WkhWc1pTSTZJSHQ5Q2lBZ0lDQWdJQ0FnZlN3S0lDQWdJQ0FnSUNBaVkyOWtaVjlwWkNJNklETTFPU3dLSUNBZ0lDQWdJQ0FpYkdGaVpXd2lPaUFpUkVGUFgwNUJUVVZmY0hKbExYQnliM0J2YzJVdFJHRnZVSEp2Y0c5ellXeE5kV3gwYVhCc1pTSXNDaUFnSUNBZ0lDQWdJbTF6WnlJNklDSmxkMjluU1VOS2ExcFlRblpqTW13d1dESnNkVnB0T0dsUGFVSjFaRmQ0YzB4QmIyZEpRMHBzWlVoU2JHSnVUbkJpTWpScFQybENOMlpUZDB0SlEwRnBZak5DYkdKc09YZGpiVGwzWWpOT2FHSkdPWHBrVjBwMFlWaE9lbUZYT1hWSmFtOW5XbTFHYzJNeVZVdG1VVDA5SWl3S0lDQWdJQ0FnSUNBaVpuVnVaSE1pT2lCYlhRb2dJQ0FnSUNCOUNpQWdJQ0I5Q2lBZ2ZTd0tJQ0FpZG05MGFXNW5YM04wY21GMFpXZDVJam9nZXdvZ0lDQWdJbk5wYm1kc1pWOWphRzlwWTJVaU9pQjdDaUFnSUNBZ0lDSnhkVzl5ZFcwaU9pQjdDaUFnSUNBZ0lDQWdJbkJsY21ObGJuUWlPaUFpTUM0eU1DSUtJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMHNDaUFnSW5abGRHOGlPaUJ1ZFd4c0NuMD0iLAogICAgICAiZnVuZHMiOiBbXQogICAgfQogIF0sCiAgInZvdGluZ19tb2R1bGVfaW5zdGFudGlhdGVfaW5mbyI6IHsKICAgICJhZG1pbiI6IHsKICAgICAgImNvcmVfbW9kdWxlIjoge30KICAgIH0sCiAgICAiY29kZV9pZCI6IDM2NywKICAgICJsYWJlbCI6ICJEQU9fTkFNRV9Ub2tlbkJhc2VkX25hdGl2ZSIsCiAgICAibXNnIjogImV3b2dJQ0poWTNScGRtVmZkR2h5WlhOb2IyeGtJam9nZXdvZ0lDQWdJbkJsY21ObGJuUmhaMlVpT2lCN0NpQWdJQ0FnSUNKd1pYSmpaVzUwSWpvZ0lqQXVNREVpQ2lBZ0lDQjlDaUFnZlN3S0lDQWlkRzlyWlc1ZmFXNW1ieUk2SUhzS0lDQWdJQ0psZUdsemRHbHVaeUk2SUhzS0lDQWdJQ0FnSW1SbGJtOXRJam9nSWtSRlRrOU5JZ29nSUNBZ2ZRb2dJSDBzQ2lBZ0luVnVjM1JoYTJsdVoxOWtkWEpoZEdsdmJpSTZJSHNLSUNBZ0lDSjBhVzFsSWpvZ01USXdPVFl3TUFvZ0lIMEtmUT09IiwKICAgICJmdW5kcyI6IFtdCiAgfQp9
To create the DAO using the admin factory, so that the DAO is its own admin, the execution message needed is:
{
"instantiate_contract_with_self_admin": {
"code_id": 365,
"instantiate_msg": "ewogICJhZG1pbiI6IG51bGwsCiAgImF1dG9tYXRpY2FsbHlfYWRkX2N3MjBzIjogdHJ1ZSwKICAiYXV0b21hdGljYWxseV9hZGRfY3c3MjFzIjogdHJ1ZSwKICAiZGVzY3JpcHRpb24iOiAiREVTQ1JJUFRJT04iLAogICJpbWFnZV91cmwiOiAiSU1BR0VfVVJMIiwKICAibmFtZSI6ICJOQU1FIiwKICAicHJvcG9zYWxfbW9kdWxlc19pbnN0YW50aWF0ZV9pbmZvIjogWwogICAgewogICAgICAiYWRtaW4iOiB7CiAgICAgICAgImNvcmVfbW9kdWxlIjoge30KICAgICAgfSwKICAgICAgImNvZGVfaWQiOiAzNjEsCiAgICAgICJsYWJlbCI6ICJEQU9fTkFNRV9EYW9Qcm9wb3NhbFNpbmdsZSIsCiAgICAgICJtc2ciOiAiZXdvZ0lDSmhiR3h2ZDE5eVpYWnZkR2x1WnlJNklHWmhiSE5sTEFvZ0lDSmpiRzl6WlY5d2NtOXdiM05oYkY5dmJsOWxlR1ZqZFhScGIyNWZabUZwYkhWeVpTSTZJSFJ5ZFdVc0NpQWdJbTFoZUY5MmIzUnBibWRmY0dWeWFXOWtJam9nZXdvZ0lDQWdJblJwYldVaU9pQTJNRFE0TURBS0lDQjlMQW9nSUNKdGFXNWZkbTkwYVc1blgzQmxjbWx2WkNJNklHNTFiR3dzQ2lBZ0ltOXViSGxmYldWdFltVnljMTlsZUdWamRYUmxJam9nZEhKMVpTd0tJQ0FpY0hKbFgzQnliM0J2YzJWZmFXNW1ieUk2SUhzS0lDQWdJQ0p0YjJSMWJHVmZiV0Y1WDNCeWIzQnZjMlVpT2lCN0NpQWdJQ0FnSUNKcGJtWnZJam9nZXdvZ0lDQWdJQ0FnSUNKaFpHMXBiaUk2SUhzS0lDQWdJQ0FnSUNBZ0lDSmpiM0psWDIxdlpIVnNaU0k2SUh0OUNpQWdJQ0FnSUNBZ2ZTd0tJQ0FnSUNBZ0lDQWlZMjlrWlY5cFpDSTZJRE0yTUN3S0lDQWdJQ0FnSUNBaWJHRmlaV3dpT2lBaVJFRlBYMDVCVFVWZmNISmxMWEJ5YjNCdmMyVmZSR0Z2VUhKdmNHOXpZV3hUYVc1bmJHVWlMQW9nSUNBZ0lDQWdJQ0p0YzJjaU9pQWlaWGR2WjBsRFNtdGFXRUoyWXpKc01GZ3liSFZhYlRocFQybENkV1JYZUhOTVFXOW5TVU5LYkdWSVVteGliazV3WWpJMGFVOXBRamRtVTNkTFNVTkJhV0l6UW14aWJEbDNZMjA1ZDJJelRtaGlSamw2WkZkS2RHRllUbnBoVnpsMVNXcHZaMXB0Um5Oak1sVkxabEU5UFNJc0NpQWdJQ0FnSUNBZ0ltWjFibVJ6SWpvZ1cxMEtJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMHNDaUFnSW5Sb2NtVnphRzlzWkNJNklIc0tJQ0FnSUNKMGFISmxjMmh2YkdSZmNYVnZjblZ0SWpvZ2V3b2dJQ0FnSUNBaWNYVnZjblZ0SWpvZ2V3b2dJQ0FnSUNBZ0lDSndaWEpqWlc1MElqb2dJakF1TWpBaUNpQWdJQ0FnSUgwc0NpQWdJQ0FnSUNKMGFISmxjMmh2YkdRaU9pQjdDaUFnSUNBZ0lDQWdJbTFoYW05eWFYUjVJam9nZTMwS0lDQWdJQ0FnZlFvZ0lDQWdmUW9nSUgwc0NpQWdJblpsZEc4aU9pQnVkV3hzQ24wPSIsCiAgICAgICJmdW5kcyI6IFtdCiAgICB9LAogICAgewogICAgICAiYWRtaW4iOiB7CiAgICAgICAgImNvcmVfbW9kdWxlIjoge30KICAgICAgfSwKICAgICAgImNvZGVfaWQiOiAzNjYsCiAgICAgICJsYWJlbCI6ICJEQU9fTkFNRV9EYW9Qcm9wb3NhbE11bHRpcGxlIiwKICAgICAgIm1zZyI6ICJld29nSUNKaGJHeHZkMTl5WlhadmRHbHVaeUk2SUdaaGJITmxMQW9nSUNKamJHOXpaVjl3Y205d2IzTmhiRjl2Ymw5bGVHVmpkWFJwYjI1ZlptRnBiSFZ5WlNJNklIUnlkV1VzQ2lBZ0ltMWhlRjkyYjNScGJtZGZjR1Z5YVc5a0lqb2dld29nSUNBZ0luUnBiV1VpT2lBMk1EUTRNREFLSUNCOUxBb2dJQ0p0YVc1ZmRtOTBhVzVuWDNCbGNtbHZaQ0k2SUc1MWJHd3NDaUFnSW05dWJIbGZiV1Z0WW1WeWMxOWxlR1ZqZFhSbElqb2dkSEoxWlN3S0lDQWljSEpsWDNCeWIzQnZjMlZmYVc1bWJ5STZJSHNLSUNBZ0lDSnRiMlIxYkdWZmJXRjVYM0J5YjNCdmMyVWlPaUI3Q2lBZ0lDQWdJQ0pwYm1adklqb2dld29nSUNBZ0lDQWdJQ0poWkcxcGJpSTZJSHNLSUNBZ0lDQWdJQ0FnSUNKamIzSmxYMjF2WkhWc1pTSTZJSHQ5Q2lBZ0lDQWdJQ0FnZlN3S0lDQWdJQ0FnSUNBaVkyOWtaVjlwWkNJNklETTFPU3dLSUNBZ0lDQWdJQ0FpYkdGaVpXd2lPaUFpUkVGUFgwNUJUVVZmY0hKbExYQnliM0J2YzJVdFJHRnZVSEp2Y0c5ellXeE5kV3gwYVhCc1pTSXNDaUFnSUNBZ0lDQWdJbTF6WnlJNklDSmxkMjluU1VOS2ExcFlRblpqTW13d1dESnNkVnB0T0dsUGFVSjFaRmQ0YzB4QmIyZEpRMHBzWlVoU2JHSnVUbkJpTWpScFQybENOMlpUZDB0SlEwRnBZak5DYkdKc09YZGpiVGwzWWpOT2FHSkdPWHBrVjBwMFlWaE9lbUZYT1hWSmFtOW5XbTFHYzJNeVZVdG1VVDA5SWl3S0lDQWdJQ0FnSUNBaVpuVnVaSE1pT2lCYlhRb2dJQ0FnSUNCOUNpQWdJQ0I5Q2lBZ2ZTd0tJQ0FpZG05MGFXNW5YM04wY21GMFpXZDVJam9nZXdvZ0lDQWdJbk5wYm1kc1pWOWphRzlwWTJVaU9pQjdDaUFnSUNBZ0lDSnhkVzl5ZFcwaU9pQjdDaUFnSUNBZ0lDQWdJbkJsY21ObGJuUWlPaUFpTUM0eU1DSUtJQ0FnSUNBZ2ZRb2dJQ0FnZlFvZ0lIMHNDaUFnSW5abGRHOGlPaUJ1ZFd4c0NuMD0iLAogICAgICAiZnVuZHMiOiBbXQogICAgfQogIF0sCiAgInZvdGluZ19tb2R1bGVfaW5zdGFudGlhdGVfaW5mbyI6IHsKICAgICJhZG1pbiI6IHsKICAgICAgImNvcmVfbW9kdWxlIjoge30KICAgIH0sCiAgICAiY29kZV9pZCI6IDM2NywKICAgICJsYWJlbCI6ICJEQU9fTkFNRV9Ub2tlbkJhc2VkX25hdGl2ZSIsCiAgICAibXNnIjogImV3b2dJQ0poWTNScGRtVmZkR2h5WlhOb2IyeGtJam9nZXdvZ0lDQWdJbkJsY21ObGJuUmhaMlVpT2lCN0NpQWdJQ0FnSUNKd1pYSmpaVzUwSWpvZ0lqQXVNREVpQ2lBZ0lDQjlDaUFnZlN3S0lDQWlkRzlyWlc1ZmFXNW1ieUk2SUhzS0lDQWdJQ0psZUdsemRHbHVaeUk2SUhzS0lDQWdJQ0FnSW1SbGJtOXRJam9nSWtSRlRrOU5JZ29nSUNBZ2ZRb2dJSDBzQ2lBZ0luVnVjM1JoYTJsdVoxOWtkWEpoZEdsdmJpSTZJSHNLSUNBZ0lDSjBhVzFsSWpvZ01USXdPVFl3TUFvZ0lIMEtmUT09IiwKICAgICJmdW5kcyI6IFtdCiAgfQp9",
"label": "NAME"
}
}
to be executed on osmo102pg8quxtvhye3k4rcqwh7j5zwf5ekhcvlquafjjxjnarhu38qzstkdm6p