The Core Contracts
The core contracs are contracts deployed on every chain and are vital to interact with L1 and the chain itself. They can be called in Solidity through the ISC Magic Contract.
The ISC Magic Contract
The Magic contract is an EVM contract deployed by default on every ISC chain, in the EVM genesis block, at
address 0x1074000000000000000000000000000000000000
.
The implementation of the Magic contract is baked-in in
the evm
core contract;
i.e. it is not a pure-Solidity contract.
The Magic contract has several methods, which are categorized into specialized
interfaces: ISCSandbox
, ISCAccounts
, ISCUtil
and so on.
You can access these interfaces from any Solidity contract by importing
the ISC library:
- npm
- Yarn
- pnpm
npm install @iota/iscmagic
yarn add @iota/iscmagic
pnpm add @iota/iscmagic
You can import it into your contracts like this:
import "@iota/iscmagic/ISC.sol";
The Magic contract also provides proxy ERC20 contracts to manipulate ISC base tokens and native tokens on L2.
Call a Function
In the example below, ISC.sandbox.getEntropy()
calls the
getEntropy
method of the ISCSandbox
interface, which, in turn,
calls ISC Sandbox's GetEntropy
.
pragma solidity >=0.8.5;
import "@iota/iscmagic/ISC.sol";
contract MyEVMContract {
event EntropyEvent(bytes32 entropy);
// this will emit a "random" value taken from the ISC entropy value
function emitEntropy() public {
bytes32 e = ISC.sandbox.getEntropy();
emit EntropyEvent(e);
}
}