Deploying ERC-1400 token contract on Remix

Hello all!

I am learning more about Ethereum token smart contracts, with particular interest in variations that support more advanced features, such as ERC-1400 for Security Tokens.

I recently gathered the full code here for deployment on Remix // compile seems to work, but I am having issues getting started - I am almost embarrassed to ask, but are there suggested values for these fields pictured below (such as ‘tokenDefaultPartitions:’)? :slight_smile: :



If you haven’t already, you could start with with ERC777

I did a simple ERC777 token example


I am completely new to security tokens, including ERC1400/ERC1410

Regards the contract you provided, I assume you have flattened the ConsenSys implementation.

Tests are normally a good place to look for potential values to use.

this.token = await'ERC1410Token', 'DAU', localGranularity, [controller], CERTIFICATE_SIGNER, partitions);

Based on the documentation, I assume the following for the constructor:

ERC-1644: Controller Token Operation Standard

Since security tokens are subject to regulatory and legal oversight (the details of which will vary depending on jurisdiction, regulatory framework and underlying asset) in many instances the issuer (or a party delegated to by the issuer acting as a controller, e.g. a regulator or transfer agent) will need to retain the ability to force transfer tokens between addresses.

These controller transfers should be transparent (emit events that flag this as a forced transfer) and the token contract itself should be explicit as to whether or not this is possible.

  • certificateSigner Address of the off-chain service which signs the conditional ownership certificates required for token transfers, issuance, redemption (Cf. CertificateController.sol).
    The ConsenSys implementation in the repository doesn’t include an implementation of the CertificateController, only a mock.
PS: Since the ERC1400 standard is agnostic about the way to control certificate, we didn’t include our certificate controller in this repository (a mock is used instead). In order to perform real advanced conditional ownership, a certificate controller called ‘CertificateController.sol’ shall be placed in folder ‘/contracts/CertificateController’ instead of the mock placed there.

   * @dev Get token default partitions to send from.
   * Function used for ERC777 and ERC20 backwards compatibility.
   * For example, a security token may return the bytes32("unrestricted").
   * @return Default partitions.
  function getTokenDefaultPartitions() external view returns (bytes32[]) {
    return _tokenDefaultPartitions;

I assume that for an initial value you could set a single global default partition to: bytes32("unrestricted")
The Dauriel network demo video had partitions of Reserved, Locked and Issued. (As does the tests for the ConsenSys implementation:

Hope this helps.

1 Like

Hi @Ro5s checking how you got on with deploying?