github.com/kaleido-io/firefly@v0.0.0-20210622132723-8b4b6aacb971/solidity_kat/contracts/AssetTrail.sol (about)

     1  pragma solidity ^0.6.0;
     2  
     3  import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
     4  
     5  contract AssetTrail {
     6  
     7      event MemberRegistered (
     8          address member,
     9          string name,
    10          string assetTrailInstanceID,
    11          string app2appDestination,
    12          string docExchangeDestination,
    13          uint timestamp
    14      );
    15  
    16      event AssetDefinitionCreated (
    17          bytes32 assetDefinitionHash,
    18          address author,
    19          uint timestamp
    20      );
    21  
    22      event DescribedAssetInstanceCreated (
    23          bytes32 assetInstanceID,
    24          bytes32 assetDefinitionID,
    25          address author,
    26          bytes32 descriptionHash,
    27          bytes32 contentHash,
    28          uint timestamp
    29      );
    30  
    31      event AssetInstanceCreated (
    32          bytes32 assetInstanceID,
    33          bytes32 assetDefinitionID,
    34          address author,
    35          bytes32 contentHash,
    36          uint timestamp
    37      );
    38  
    39      event AssetInstanceBatchCreated (
    40          bytes32 batchHash,
    41          address author,
    42          uint timestamp
    43      );
    44  
    45      event DescribedPaymentDefinitionCreated (
    46          bytes32 paymentDefinitionID,
    47          address author,
    48          string name,
    49          bytes32 descriptionSchemaHash,
    50          uint timestamp
    51      );
    52  
    53      event PaymentDefinitionCreated (
    54          bytes32 paymentDefinitionID,
    55          address author,
    56          string name,
    57          uint timestamp
    58      );
    59  
    60      event DescribedPaymentInstanceCreated (
    61          bytes32 paymentInstanceID,
    62          bytes32 paymentDefinitionID,
    63          address author,
    64          address member,
    65          uint amount,
    66          bytes32 descriptionHash,
    67          uint timestamp
    68      );
    69  
    70      event PaymentInstanceCreated (
    71          bytes32 paymentInstanceID,
    72          bytes32 paymentDefinitionID,
    73          address author,
    74          address member,
    75          uint amount,
    76          uint timestamp
    77      );
    78  
    79      event AssetInstancePropertySet (
    80          bytes32 assetDefinitionID,
    81          bytes32 assetInstanceID,
    82          address author,
    83          string key,
    84          string value,
    85          uint timestamp
    86      );
    87  
    88      ERC20 payment;
    89  
    90      constructor(address paymentContract) public {
    91          payment = ERC20(paymentContract);
    92      }
    93  
    94      function registerMember(string memory name, string memory assetTrailInstanceID, string memory app2appDestination, string memory docExchangeDestination) public {
    95          require(bytes(name).length != 0, "Invalid name");
    96          emit MemberRegistered(msg.sender, name, assetTrailInstanceID, app2appDestination, docExchangeDestination, now);
    97      }
    98  
    99      function createAssetDefinition(bytes32 assetDefinitionHash) public {
   100          emit AssetDefinitionCreated(assetDefinitionHash, msg.sender, now);
   101      }
   102  
   103      function createDescribedPaymentDefinition(bytes32 paymentDefinitionID, string memory name, bytes32 descriptionSchemaHash) public {
   104          require(bytes(name).length != 0, "Invalid name");
   105          emit DescribedPaymentDefinitionCreated(paymentDefinitionID, msg.sender, name, descriptionSchemaHash, now);
   106      }
   107  
   108      function createPaymentDefinition(bytes32 paymentDefinitionID, string memory name) public {
   109          require(bytes(name).length != 0, "Invalid name");
   110          emit PaymentDefinitionCreated(paymentDefinitionID, msg.sender, name, now);
   111      }
   112  
   113      function createDescribedAssetInstance(bytes32 assetInstanceID, bytes32 assetDefinitionID, bytes32 descriptionHash, bytes32 contentHash) public {
   114          emit DescribedAssetInstanceCreated(assetInstanceID, assetDefinitionID, msg.sender, descriptionHash, contentHash, now);
   115      }
   116  
   117      function createAssetInstance(bytes32 assetInstanceID, bytes32 assetDefinitionID, bytes32 contentHash) public {
   118          emit AssetInstanceCreated(assetInstanceID, assetDefinitionID, msg.sender, contentHash, now);
   119      }
   120  
   121      function createAssetInstanceBatch(bytes32 batchHash) public {
   122          emit AssetInstanceBatchCreated(batchHash, msg.sender, now);
   123      }
   124  
   125      function createDescribedPaymentInstance(bytes32 paymentInstanceID, bytes32 paymentDefinitionID, address member, uint amount, bytes32 descriptionHash) public {
   126          require(msg.sender != member, "Author and member cannot be the same");
   127          require(amount > 0, "Amount must be greater than 0");
   128          require(payment.transferFrom(msg.sender, member, amount), "Failed to transfer tokens");
   129          emit DescribedPaymentInstanceCreated(paymentInstanceID, paymentDefinitionID, msg.sender, member, amount, descriptionHash, now);
   130      }
   131  
   132      function createPaymentInstance(bytes32 paymentInstanceID, bytes32 paymentDefinitionID, address member, uint amount) public {
   133          require(msg.sender != member, "Author and member cannot be the same");
   134          require(amount > 0, "Amount must be greater than 0");
   135          require(payment.transferFrom(msg.sender, member, amount), "Failed to transfer tokens");
   136          emit PaymentInstanceCreated(paymentInstanceID, paymentDefinitionID, msg.sender, member, amount, now);
   137      }
   138  
   139      function setAssetInstanceProperty(bytes32 assetDefinitionID, bytes32 assetInstanceID, string memory key, string memory value) public {
   140          require(bytes(key).length > 0, "Invalid key");
   141          emit AssetInstancePropertySet(assetDefinitionID, assetInstanceID, msg.sender, key, value, now);
   142      }
   143  
   144  }