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 }