Skip to content

Instantly share code, notes, and snippets.

@oneamitj
Created March 26, 2019 13:20
Show Gist options
  • Save oneamitj/0941cf764cf5804999c3fd82a98f1c72 to your computer and use it in GitHub Desktop.
Save oneamitj/0941cf764cf5804999c3fd82a98f1c72 to your computer and use it in GitHub Desktop.
An example of using ethereum to save data.
// Estimated Gas: 1,368,083
pragma solidity ^0.4.24;
library StringOperation {function concat(string string1, string string2, string sep) internal pure returns (string){
bytes memory string1Bytes = bytes(string1);
bytes memory string2Bytes = bytes(string2);
bytes memory sepBytes = bytes(sep);
string memory concatString = new string(string1Bytes.length + sepBytes.length + string2Bytes.length);
bytes memory concatStringBytes = bytes(concatString);
uint k = 0;
// Concat string1
for (uint i = 0; i < string1Bytes.length; i++) concatStringBytes[k++] = string1Bytes[i];
// Concat sep
for (i = 0; i < sepBytes.length; i++) concatStringBytes[k++] = sepBytes[i];
// Concat string2
for (i = 0; i < string2Bytes.length; i++) concatStringBytes[k++] = string2Bytes[i];
return string(concatStringBytes);
}
}
contract DBExample {
using StringOperation for *;
struct SomeStruct {
string data1;
string data2;
string data3;
string data4;
}
address owner;
address[] private admins;
// user => SomeStruct
mapping (address => SomeStruct[]) userSomeStruct;
event BroadcastSomeStruct(address receiver, string data3, string dataDetails);
// modifier to check if caller is owner
modifier ifOwner() {
if (msg.sender != owner) {
revert();
}
_; /* _means contiune normal flow */
}
constructor() public {
owner = msg.sender;
admins.push(owner);
}
function assignSomeStruct(address user, string data1, string data2, string data3, string data4) public ifOwner {
SomeStruct memory someStruct;
someStruct.data1 = data1;
someStruct.data2 = data2;
someStruct.data3 = data3;
someStruct.detail = data4;
userSomeStruct[user].push(someStruct);
emit BroadcastSomeStruct(user, data3, data4);
}
function viewAllSomeStruct(address user) public constant returns (string allSomeStruct){
SomeStruct[] memory someStructs = userSomeStruct[user];
string memory someStructString;
for(uint i = 0; i < someStructs.length; i++) {
someStructString = StringOperation.concat(
someStructs[i].data1,
someStructs[i].data2,
" ");
someStructString = StringOperation.concat(
someStructString,
someStructs[i].data3,
" ");
someStructString = StringOperation.concat(
someStructString,
someStructs[i].detail,
" ");
if (i > 0) {
allSomeStruct = StringOperation.concat(
allSomeStruct,
someStructString,
",");
} else {
allSomeStruct = someStructString;
}
}
allSomeStruct = StringOperation.concat(
"SomeStructID data2 data3 SomeStructDetail",
allSomeStruct,
",");
}
function viewSomeStructByData2(address user, string data2) public constant returns (string someStruct){
SomeStruct[] memory someStructs = userSomeStruct[user];
for(uint i = 0; i < someStructs.length; i++) {
if (keccak256(someStructs[i].data2) == keccak256(data2)) {
someStruct = StringOperation.concat(
someStructs[i].data1,
someStructs[i].data2,
" ");
someStruct = StringOperation.concat(
someStruct,
someStructs[i].data3,
" ");
someStruct = StringOperation.concat(
someStruct,
someStructs[i].detail,
" ");
someStruct = StringOperation.concat(
"SomeStructID data2 data3 SomeStructDetail",
someStruct,
",");
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment