Search
⌃K
📄

Smart Contracts - Investment Clubs

Common questions related to direct interactions with Syndicate smart contracts.

Transfers

How do I transfer ownership of my club from one wallet to another?

Note: Be extremely careful when transferring club ownership, as the funds will now flow into the new wallet address.
  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: transferOwnership.json attached below Press "Interact."
  5. 5.
    Input the following information: Function: TransferOwnership newOwner: The wallet address of the new owner of the club Press "Write" -> "Confirm & Send." You're good to go! The new address is now the owner of the club. Be sure to transfer all funds from the previous wallet to the new wallet.
transferOwnership.json
251B
Code

How do I migrate from the old transfer policy to the new transfer guard?

  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information. This will check which transfer policy you have activated for your club: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: transferPolicy.json attached below Press "Interact."
  5. 5.
    Input the following information: Function: transferPolicy Press "Write" -> "Confirm & Send." If your transfer policy address equals 0xa6e478f9B59E81EC2E0195DEB6DA4afA44a88D80, then you are all set and don't need to proceed. If it does not, then you should proceed to the next step.
  6. 6.
    Input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: updateTransferPolicy.json attached below Press "Interact."
  7. 7.
    Input the following information: Function: updateTransferPolicy Implementation Address: 0xa6e478f9B59E81EC2E0195DEB6DA4afA44a88D80 Press "Write" -> "Confirm & Send."
transferPolicy.json
243B
Code
updateTransferPolicy.json
253B
Code

How do I transfer club tokens from one wallet to another?

Transfers should ONLY be executed between wallets that have the same owner. You should NOT transfer tokens from one member to another.
Only the club admin has the power to execute these transfers since the club tokens are non-transferable by default.
  1. 1.
    Burn the existing tokens in the member's old wallet (i.e. the wallet the member would no longer like to use). To do this, use the "Modify club token allocation" feature here.
    1. 1.
      Note: This assumes that you are only executing a transfer for one member. If you are doing this for multiple members, repeat step 1 for each member.
  2. 2.
    Next, mint the tokens to the member's new wallet via the OwnerMintModule or BulkMintModule.
    1. 1.
      If you're minting tokens for a single member, then executing mints through our cap table management feature might be easiest. This utilizes the OwnerMintModule.
    2. 2.
      Alternatively, if you're minting tokens for multiple members, then executing mints through the directions here might be easiest. This utilizes the BulkMintModule.
  3. 3.
    That's it! You've successfully transferred your club tokens from one wallet to another.

How do I recover tokens accidentally sent to the club's contract for my members?

  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: recoverERC20.json attached below Press "Interact."
  5. 5.
    Input the following information: Function: recoverERC20 Recipient: The wallet address receiving tokens. ERC20: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. Amount: The number of tokens to be recovered. For example, if you want to recover 100 tokens, you should paste in 100000000000000000000. Since our club token has 18 decimals places, we need to append 18 decimals to it. Press "Write" -> "Confirm & Send."
recoverERC20.json
446B
Code

Mints

How do I bulk mint tokens to my club's members?

Note: You may want to consider doing a test bulk mint with one address and a small number of tokens to make sure it works as expected before doing your real bulk mint.
  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information. This will allow the bulk mint module to mint tokens for your club: Contract Type: *Blank* Contract Address: 0x19cF03a6f1190062eEafD70C42cBc5f7EcFF05a8 ABI/JSON Interface: updateModule.json attached below Press "Interact."
  5. 5.
    Input the following information: Function: UpdateModule Token: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. Module: 0xf5BA6f1Eb6eEA9A31726f8906280ef199F59bc11, which is the address of the bulk mint module that you are adding to your club. Allowed: *Checked* Press "Write" -> "Confirm & Send."
  6. 6.
    For the next interaction, input the following information. This will call the bulk mint function on the recently added bulk mint module: Contract Type: *Blank* Contract Address: 0xf5BA6f1Eb6eEA9A31726f8906280ef199F59bc11 ABI/JSON Interface: batchMint.json attached below Press "Interact."
  7. 7.
    Input the following information: Function: BatchMint Token: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. Addresses: The wallet addresses receiving tokens. For example, if you want to mint 100 tokens to 0xALICE and 200 tokens to 0xBOB, you should paste in["0xALICE", "0xBOB"]. Values: The token amounts for each receiving address. For example, if you want to mint 100 tokens to 0xALICE and 200 tokens to 0xBOB, you should paste in [100000000000000000000, 200000000000000000000]. Since our club token has 18 decimals places, we need to append 18 decimals to it. Press "Write" -> "Confirm & Send."
updateModule.json
517B
Code
batchMint.json
627B
Code

How do I manually mint tokens to members when the club is closed?

You have two options:
  1. 1.
    Reopen the club briefly, perform the manual mints through our cap table management feature, and close the club. This works best if you're only looking to execute a small number of mint transactions.
  2. 2.
    Alternatively, you can perform the manual mints without reopening the club. This works well if you're looking to execute a large batch of mint transactions. Let's take a look:
To execute on option (2), you'll need to migrate from the original mint guard to the owner override mint guard. Every club has "guards" that determine when certain actions can be executed. For example, clubs have restrictions on the number of members, open and close dates, etc. The owner override mint guard will allow you to mint after the club's deposit close date. To migrate, please complete the following steps:
  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: updateMintPolicy.json attached below Press "Interact."
  5. 5.
    Input the following information: Function: UpdateMintPolicy Address Implementation: 0x756e154fe60f71a08b8cf4f890a71274df68e297, which is the address of the owner override mint guard. Press "Write" -> "Confirm & Send."
  6. 6.
    For the next interaction, input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: mintPolicy.json attached below Press "Interact."
  7. 7.
    Input the following information to get the address of your original mint guard. You should make sure it equals 0xc92836BC3201F2784fae26875Ac1C1d5acA0aef2: Function: MintPolicy Press "Write" -> "Confirm & Send."
  8. 8.
    For the next interaction, input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: migrateConfig.json attached below Press "Interact."
  9. 9.
    Input the following information to migrate the config from the old mint guard to the new mint guard: Function: MigrateConfig Address Club: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. Address PrevGuardMint: 0xc92836BC3201F2784fae26875Ac1C1d5acA0aef2, which is the original mint guard. Press "Write" -> "Confirm & Send."
updateMintPolicy.json
304B
Code
mintPolicy.json
236B
Code
migrateConfig.json
354B
Code

Burns

How do I manually burn tokens from one of my club's members?

  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information. This will call the controller redeem function: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: burn.json attached below Press "Interact."
  5. 5.
    Input the following information: Function:ControllerRedeem Account: The wallet address of the member you want to burn tokens from. For example, if you want to burn 100 tokens from 0xba0B7614166fcBbF58d393aeF734331756504Bte, you should paste in "0xba0B7614166fcBbF58d393aeF734331756504Bte". Amount: The amount of tokens you want to burn from the member. For example, if you want to burn 100 tokens from the member, you should paste in 100000000000000000000. Since our club token has 18 decimals places, we need to append 18 decimals to it. Press "Write" -> "Confirm & Send."
burn.json
353B
Code

How do I manually burn tokens from my own wallet?

  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: burn.json attached below Press "Interact."
  5. 5.
    Input the following information: Function:redeem Amount: The number of tokens you want to burn. For example, if you want to burn 100 tokens, you should paste in 100000000000000000000. Since our club token has 18 decimals places, we need to append 18 decimals to it. Press "Write" -> "Confirm & Send."
burn.json
334B
Code

How do I migrate from the old burn policy to the new burn guard?

  1. 1.
    Navigate to a tool that allows you to execute direct smart contract interactions from the owner wallet, such as Gnosis or MyEtherWallet (both are compatible with MetaMask). If you didn't set up the club with Gnosis, you should use MyEtherWallet. For these instructions, we'll use MyEtherWallet.
  2. 2.
    Press "Access my wallet" -> "Browser extension" to connect with MetaMask.
  3. 3.
    Press "Contract" -> "Interact with Contract."
  4. 4.
    Input the following information. This will check which burn guard you have activated for your club: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: burnPolicy.json attached below Press "Interact."
  5. 5.
    Input the following information: Function: burnPolicy Press "Write" -> "Confirm & Send." If your burn guard address equals 0x8f02BDa8Ccc0EFB9C80A93B66f74f9F23025aFb9, then you are all set and don't need to proceed. If your burn guard address equals 0x54B2b5A9835704EBEcc9AE13Feb937F89fffE124, then you should proceed to the next step.
  6. 6.
    Input the following information: Contract Type: *Blank* Contract Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI/JSON Interface: updateBurnPolicy.json attached below Press "Interact."
  7. 7.
    Input the following information: Function: updateBurnPolicy Implementation Address: 0x8f02BDa8Ccc0EFB9C80A93B66f74f9F23025aFb9 Press "Write" -> "Confirm & Send."
burnPolicy.json
239B
Code
updateBurnPolicy.json
256B
Code

Misc.

How do I bundle transactions?

When interacting directly with Syndicate's smart contracts, you can bundle multiple transactions into a single batch. This bundling is beneficial because:
  • It requires only one round of Gnosis approvals, instead of having to approve a set of transactions one after another
  • It may reduce the likelihood of manual errors
For Gnosis Safes, we will use the Transaction Builder Safe App to bundle some sample transactions:
  1. 1.
    Navigate to your Gnosis Safe and select "Apps."
  2. 2.
    Open the "Transaction Builder Safe App."
  3. 3.
    Input the following information: Address: The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. ABI: BatchMintModuleERC20.json attached below.
  4. 4.
    Input the following information: ContractMethodSelector: batchMint club (address): The value from your Syndicate's URL. For example, if your URL is app.syndicate.io/clubs/0x4a2c85076ac921518b3af37095c49091713d619, you should paste in 0x4a2c85076ac921518b3af37095c49091713d619. recipients (address[]) : The wallet addresses receiving tokens. For example, if you want to mint 100 tokens to 0xALICE and 200 tokens to 0xBOB, you should paste in["0xALICE", "0xBOB"]. amounts (uint256[]): The token amounts for each receiving address. For example, if you want to mint 100 tokens to 0xALICE and 200 tokens to 0xBOB, you should paste in [100000000000000000000, 200000000000000000000]. Since our club token has 18 decimals places, we need to append 18 decimals to it.
  5. 5.
    Click "Add transaction."
  6. 6.
    Click "Create Batch."
  7. 7.
    Review the whole batch and once ready click "Send Batch" to submit and execute the transaction.
BatchMintModuleERC20.json
1KB
Code