-
Notifications
You must be signed in to change notification settings - Fork 287
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e42e22c
commit 935673c
Showing
5 changed files
with
159 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
:::info Ownership | ||
|
||
You might want to look into making the function ownable with, for example, | ||
[OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/access-control#ownership-and-ownable) | ||
so only owners of the contract can call certain functionalities of your contract. | ||
|
||
::: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
:::info Payable | ||
|
||
Instead of making the function payable, you could let the contract pay for the storage deposit. | ||
If so, you will need to change the `require` statement to check if the contract's balance has enough funds: | ||
|
||
```solidity | ||
require(address(this).balance > _storageDeposit); | ||
``` | ||
|
||
::: |
75 changes: 75 additions & 0 deletions
75
docs/build/isc/v1.0.0-rc.6/docs/how-tos/token/create-foundry.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
--- | ||
description: How to create a L1 foundry | ||
image: /img/logo/WASP_logo_dark.png | ||
tags: | ||
- foundry | ||
- EVM | ||
- how-to | ||
--- | ||
|
||
import Ownership from '../../_admonitions/_ownership.md'; | ||
import Payable from '../../_admonitions/_payable.md'; | ||
|
||
# Create a Foundry | ||
## About Foundries | ||
|
||
The Stardust update allows you to create your own native tokens. Native tokens are minted by a [Foundry](/tips/tips/TIP-0018/#foundry-output). | ||
The Foundry allows you to specify your native token's maximum supply **once** and change the circulating supply. | ||
This guide will show you how to create an L1 foundry using a L2 smart contract. | ||
|
||
## Example Code | ||
|
||
<Ownership/> | ||
|
||
1. Check if the amount paid to the contract is the same as the required [storage deposit](/learn/protocols/stardust/core-concepts/storage-deposit) and set the allowance. | ||
|
||
```solidity | ||
require(msg.value == _storageDeposit*(10**12), "Please send exact funds to pay for storage deposit"); | ||
ISCAssets memory allowance; | ||
allowance.baseTokens = _storageDeposit; | ||
``` | ||
|
||
<Payable/> | ||
|
||
2. Define the `NativeTokenScheme`: | ||
|
||
```solidity | ||
NativeTokenScheme memory nativeTokenScheme = NativeTokenScheme({ | ||
mintedTokens: _mintedTokens, | ||
meltedTokens: _meltedTokens, | ||
maximumSupply: _maximumSupply | ||
}); | ||
``` | ||
|
||
3. Create the foundry by calling the `ISC.accounts.foundryCreateNew(nativeTokenScheme, allowance)` function: | ||
|
||
```solidity | ||
uint32 foundrySN = ISC.accounts.foundryCreateNew(nativeTokenScheme, allowance); | ||
``` | ||
|
||
### Full Example Code | ||
|
||
```solidity | ||
// SPDX-License-Identifier: MIT | ||
pragma solidity ^0.8.0; | ||
import "@iota/iscmagic/ISC.sol"; | ||
contract CreateFoundry { | ||
event CreatedFoundry(uint32 foundrySN); | ||
function createFoundry(uint _mintedTokens, uint _meltedTokens, uint _maximumSupply, uint64 _storageDeposit) public payable { | ||
require(msg.value == _storageDeposit*(10**12), "Please send exact funds to pay for storage deposit"); | ||
ISCAssets memory allowance; | ||
allowance.baseTokens = _storageDeposit; | ||
NativeTokenScheme memory nativeTokenScheme = NativeTokenScheme({ | ||
mintedTokens: _mintedTokens, | ||
meltedTokens: _meltedTokens, | ||
maximumSupply: _maximumSupply | ||
}); | ||
uint32 foundrySN = ISC.accounts.foundryCreateNew(nativeTokenScheme, allowance); | ||
emit CreatedFoundry(foundrySN); | ||
} | ||
} | ||
``` |
53 changes: 53 additions & 0 deletions
53
docs/build/isc/v1.0.0-rc.6/docs/how-tos/token/mint-token.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
--- | ||
description: How to mint native token on an L1 foundry. | ||
image: /img/logo/WASP_logo_dark.png | ||
tags: | ||
- foundry | ||
- EVM | ||
- how-to | ||
- native tokens | ||
- mint | ||
--- | ||
|
||
import Ownership from '../../_admonitions/_ownership.md'; | ||
import Payable from '../../_admonitions/_payable.md'; | ||
|
||
# Mint Native Tokens | ||
|
||
To mint tokens from a [foundry](/tips/tips/TIP-0018/#foundry-output), you first need to be aware that only the foundry owner can mint token, | ||
so you should execute the `ISC.accounts.mintNativeTokens` function in the same contract that [created the foundry](./create-foundry.md). | ||
|
||
## Example Code | ||
|
||
<Ownership/> | ||
|
||
1. Check if the amount paid to the contract is the same as the required [storage deposit](/learn/protocols/stardust/core-concepts/storage-deposit) | ||
and set the allowance. | ||
|
||
```solidity | ||
require(msg.value == _storageDeposit*(10**12), "Please send exact funds to pay for storage deposit"); | ||
ISCAssets memory allowance; | ||
allowance.baseTokens = _storageDeposit; | ||
``` | ||
|
||
<Payable/> | ||
|
||
2. Mint the native token specifying the foundry serial number, the amount to mint and the allowance. | ||
|
||
```solidity | ||
ISC.accounts.mintNativeTokens(_foundrySN, _amount, allowance); | ||
``` | ||
|
||
## Full Example Code | ||
|
||
```solidity | ||
event MintedNativeTokens(uint32 foundrySN, uint amount); | ||
function mintNativeTokens(uint32 _foundrySN, uint _amount, uint64 _storageDeposit) public payable { | ||
require(msg.value == _storageDeposit*(10**12), "Please send exact funds to pay for storage deposit"); | ||
ISCAssets memory allowance; | ||
allowance.baseTokens = _storageDeposit; | ||
ISC.accounts.mintNativeTokens(_foundrySN, _amount, allowance); | ||
emit MintedNativeTokens(_foundrySN, _amount); | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters