I am trying to create a smart contract that will allow the creator of the contract to add asset properties and allocate it to an address. Once that's done, the receiving address can now send it to another address, only if it is the current owner.
I tried to allocate a struct 'Asset' by mapping an address to the assetId which is the count of assets being created.
I am not really sure if its the right approach to do it. Also kinda confused on how I can check the current owner based on the AssetId (since there is no where clause like in c#/LINQ.) And what would be the right way to assign an asset from current owner to next owner.
pragma solidity ^0.4.2;
contract AssetDistribution {
address public issuer;
uint public assetCount;
event AllocationDetails(address from, address to, string description);
function AssetDistribution() {
issuer = msg.sender;
//ContractorDetails(issuer);
}
struct Asset {
uint assetId;
address currentOwner;
string description;
uint cost;
}
mapping (address=> mapping(uint=>Asset)) private owners;
//mapping(address=> mapping(uint=>bool)) private ownerPropertyCheck;
//creates an asset and allocates it to an address at the same time.
function setCreateAsset(address newOwner, string description, uint cost)
returns(string) {
if (msg.sender == issuer) {
assetCount++;
Asset memory myAsset = Asset(assetCount,newOwner,description,cost);
owners[newOwner][assetCount] = myAsset;
AllocationDetails(msg.sender,newOwner,description);
return "created By: government";
//return strConcat("created By: ","test");
} else {
return "This is not the creator";
}
}
function getassetCount() constant returns(uint) {
return assetCount;
}
function getOwner(uint id) returns(address) {
//return
}
}
In C# I would have mostly created a class with asset properties and would have changed the currentOwner when a transfer is done. Here I am having trouble approaching in a similar way.Should I even use struct for this?
Edit One - Solution for me
mapping the assetId to ownerAddress & mapping addresses + assetId to structs solved the dilemma I was having
mapping(uint=>address) assetAddress;
mapping(address=>mapping(uint=>Asset)) ownerAssets ;
returns the current owner address of asset
function getCurrentOwner(uint assetId) constant public returns (address) {
return assetAddress[assetId];
}
checks if the assetId (Id of struct) belongs to address
function isOwnerOfAsset(address userId, uint assetId) private constant returns(bool) {
return assetAddress[assetId] == userId? true:false;
}
P.S I have mostly coded in C#/Backend, jumping to solidity is confusing me a bit. If you know any good resources to refer, feel free to share.