Regulatory Aware Protocol Whitelisting


By Julia Kvashyna

updated 14 days ago

This article is about how to whitelist users.

The shares, issued by Unicorn Tokenization Corp are called UTokens.

List of countries currently prohibited from using UTokens:

Afghanistan, Burundi, Albania, Kosovo, Central African Republic, Congo Brazzaville, Congo Kinshasa, Cuba, Eritrea, Iran (Islamic Republic Of), Iraq, Lebanon, Liberia, Libya, Macao (SAR of China), Myanmar, Korea North, Sudan, Syrian (Arab Republic Syria), Somalia, Venezuela Bolivarian Republic, Yemen, Zimbabwe.

User country, property key 'country', specified by  ISO 3166-1 alpha-2

User region, property key 'region', (optional, used for territories under sanctions if not whole country is sanctioned) is specified by custom list:

  bytes32 constant Crimea = 'Crimea'; // Ukraine

  bytes32 constant Donetsk = 'Donetsk'; // Ukraine

  bytes32 constant Luhansk = 'Luhansk'; // Ukraine

These regions are prohibited from transferring UTokens.

User KYC level, property key 'kyc', is specified on the scale of 0 (no KYC data at all) to arbitrary value.

For UTokens transfers, KYC level should be greater or equal to 5.

User Accreditation level, property key 'accredited', is specified by a bool flag.

For UTokens transfers, the accreditation level does not matter at the moment. Though later it will be required for the following countries, which are currently not allowed at all:

Switzerland, Japan, Singapore, United States Of America.

To set a property for an address, you will need to use the following function:

  function setProperty(address _addr, bytes32 _propertyKey, bytes32 _propertyValue) public returns(bool);


  Provider.setProperty( '0xcafecafecafecafecafecafecafecafecafecafe', // user address

   '0x636f756e74727900000000000000000000000000000000000000000000000000', // bytes32('country')

  '0x5541000000000000000000000000000000000000000000000000000000000000'  // bytes32('UA')


  Provider.setProperty( '0xcafecafecafecafecafecafecafecafecafecafe', // user address

  '0x6b79630000000000000000000000000000000000000000000000000000000000', // bytes32('kyc')

  '0x0000000000000000000000000000000000000000000000000000000000000005'  // bytes32(5)


  // Set many properties in a single TX. Make sure to supply enough gas: ~array.length * 23000.


    ['0xcafecafecafecafecafecafecafecafecafecafe', '0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef'], // user addresses

    ['0x6b79630000000000000000000000000000000000000000000000000000000000', '0x636f756e74727900000000000000000000000000000000000000000000000000'], // bytes32('kyc'), bytes32('country')

    ['0x0000000000000000000000000000000000000000000000000000000000000005', 0x5541000000000000000000000000000000000000000000000000000000000000]  // bytes32(5), bytes32('UA')


This data only needs to be submitted if the user passed the verification to the level that should allow him to receive UTokens tokens.

If the user has only partial verification, there is no point in submitting information about him.

In order to get a contract address for your platform, contact Ambisafe.

Did this answer your question?