# Initialize the Contract

Now we've uploaded the contract, now we need to initialise it.

We're using the Poodle Coin example here - `$POOD` was the first meme coin deployed to a Source Chain testnet.

{% hint style="info" %}
Choose another name rather than Poodle Coin/POOD, as this is likely already taken on the testnet.
{% endhint %}

## Generate JSON with arguments

To generate the JSON, you can use `jq`, or, if you're more familiar with JS/node, write a hash and encode it using the node CLI.

This example uses the `node` REPL. If you have `node` installed, just type `node` in the terminal and hit enter to access it.

```javascript
> const initHash = {
  name: "Poodle Coin",
  symbol: "POOD",
  decimals: 6,
  initial_balances: [
    { address: "<validator-self-delegate-address>", amount: "12345678000"},
  ]
};
< undefined
> JSON.stringify(initHash);
< '{"name":"Poodle Coin","symbol":"POOD","decimals":6,"initial_balances":[{"address":"<validator-self-delegate-address>","amount":"12345678000"}]}'
```

## Instantiate the contract

{% hint style="info" %}
Note that if you use rich types like CosmWasm's `Uint128` then they will be strings from the point of view of JSONSchema. If you have an int, you do not need quotes, e.g. `1` - but for a `Uint128` you will need them, e.g. "`1"`.
{% endhint %}

Note also that the `--amount` is used to initialize the new account associated with the contract.

In the example below, `6` is the value of `$CODE_ID`.

```bash
sourced tx wasm instantiate 6 \
    '{"name":"Poodle Coin","symbol":"POOD","decimals":6,"initial_balances":[{"address":"<validator-self-delegate-address>","amount":"12345678000"}]}' \
    --amount 50000usource  --label "Poodlecoin erc20" --from <your-key> --chain-id <chain-id> --gas-prices 0.1usource --gas auto --gas-adjustment 1.3 -b block -y
```

If you have set `$CODE_ID` in your shell, you can instead run:

```bash
sourced tx wasm instantiate $CODE_ID \
    '{"name":"Poodle Coin","symbol":"POOD","decimals":6,"initial_balances":[{"address":"<validator-self-delegate-address>","amount":"12345678000"}]}' \
    --amount 50000usource  --label "Poodlecoin erc20" --from <your-key> --chain-id <chain-id> --gas-prices 0.1usource --gas auto --gas-adjustment 1.3 -b block -y
```

If this succeeds, look in the output and get contract address from output e.g `source1a2b....` or run:

```bash
CONTRACT_ADDR=$(sourced query wasm list-contract-by-code $CODE_ID --output json | jq -r '.contracts[0]')
```

This will allow you to query using the value of `$CONTRACT_ADDR`

```bash
sourced query wasm contract $CONTRACT_ADDR
```

{% hint style="danger" %}
Note that although we omit `--admin` when instantiating, in almost all production situations you will want to specify an admin address for the contract. if you do not do this, you will not be able to migrate the contract in future.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sourceprotocol.io/smart-contracts-and-sourced-development/cw-20-erc-20-tutorial/initialize-the-contract.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
