bit of cleanup

This commit is contained in:
perissology 2018-01-25 12:17:28 -08:00
parent 544eee3508
commit a5651f2186
2 changed files with 21 additions and 70 deletions

View File

@ -22,74 +22,67 @@ contract EternalStorage is Escapable {
return UIntStorage[record];
}
function setUIntValue(bytes32 record, uint value) public onlyOwner
{
function setUIntValue(bytes32 record, uint value) public onlyOwner {
UIntStorage[record] = value;
}
/// Int Storage
function getIntValue(bytes32 record) public view returns (int){
function getIntValue(bytes32 record) public view returns (int) {
return IntStorage[record];
}
function setIntValue(bytes32 record, int value) public onlyOwner
{
function setIntValue(bytes32 record, int value) public onlyOwner {
IntStorage[record] = value;
}
/// Address Storage
function getAddressValue(bytes32 record) public view returns (address){
function getAddressValue(bytes32 record) public view returns (address) {
return AddressStorage[record];
}
function setAddressValue(bytes32 record, address value) public onlyOwner
{
function setAddressValue(bytes32 record, address value) public onlyOwner {
AddressStorage[record] = value;
}
/// String Storage
function getStringValue(bytes32 record) public view returns (string){
function getStringValue(bytes32 record) public view returns (string) {
return StringStorage[record];
}
function setStringValue(bytes32 record, string value) public onlyOwner
{
function setStringValue(bytes32 record, string value) public onlyOwner {
StringStorage[record] = value;
}
/// Bytes Storage
function getBytesValue(bytes32 record) public view returns (bytes){
function getBytesValue(bytes32 record) public view returns (bytes) {
return BytesStorage[record];
}
function setBytesValue(bytes32 record, bytes value) public onlyOwner
{
function setBytesValue(bytes32 record, bytes value) public onlyOwner {
BytesStorage[record] = value;
}
/// Bytes Storage
function getBytes32Value(bytes32 record) public view returns (bytes32){
function getBytes32Value(bytes32 record) public view returns (bytes32) {
return Bytes32Storage[record];
}
function setBytes32Value(bytes32 record, bytes32 value) public onlyOwner
{
function setBytes32Value(bytes32 record, bytes32 value) public onlyOwner {
Bytes32Storage[record] = value;
}
/// Boolean Storage
function getBooleanValue(bytes32 record) public view returns (bool){
function getBooleanValue(bytes32 record) public view returns (bool) {
return BooleanStorage[record];
}
function setBooleanValue(bytes32 record, bool value) public onlyOwner
{
function setBooleanValue(bytes32 record, bool value) public onlyOwner {
BooleanStorage[record] = value;
}
}

View File

@ -5,6 +5,7 @@ import "./EternalStorage.sol";
library EternallyPersistentLib {
// UInt
//TODO if we use assembly here, we can save ~ 600 gas / call, due to skipping the extcodesize check that solidity adds.
function stgObjectGetUInt(EternalStorage _storage, string class, uint id, string fieldName) internal view returns (uint) {
bytes32 record = keccak256(class, id, fieldName);
@ -32,40 +33,39 @@ library EternallyPersistentLib {
function stgObjectGetString(EternalStorage _storage, string class, uint id, string fieldName) internal view returns (string) {
bytes32 record = keccak256(class, id, fieldName);
bytes4 sig = bytes4(keccak256("getStringValue(bytes32)"));
//Function signature
address a = address(_storage);
bytes4 sig = bytes4(keccak256("getStringValue(bytes32)"));
string memory s;
assembly {
let x := mload(0x40) //Find empty storage location using "free memory pointer"
mstore(x, sig) //Place signature at begining of empty storage
mstore(x, sig) //Place signature at beginning of empty storage
mstore(add(x, 0x04), record) //Place first argument directly next to signature
let success := call(//This is the critical change (Pop the top stack value)
5000, //5k gas
a, //To addr
_storage, //To addr
0, //No value
x, //Inputs are stored at location x
0x24, //Inputs are 36 byes long
x, //Store output over input (saves space)
0x80) //Outputs are 32 bytes long
let strL := mload(add(x, 0x20)) // Load the length of the sring
let strL := mload(add(x, 0x20)) // Load the length of the string
jumpi(ask_more, gt(strL, 64))
mstore(0x40, add(x, add(strL, 0x40)))
s := add(x, 0x20)
// return(x, add(strL, 0x40))
ask_more :
mstore(x, sig) //Place signature at begining of empty storage
mstore(x, sig) //Place signature at beginning of empty storage
mstore(add(x, 0x04), record) //Place first argument directly next to signature
success := call(//This is the critical change (Pop the top stack value)
5000, //5k gas
a, //To addr
_storage, //To addr
0, //No value
x, //Inputs are stored at location x
0x24, //Inputs are 36 byes long
@ -74,8 +74,6 @@ library EternallyPersistentLib {
mstore(0x40, add(x, add(strL, 0x40)))
s := add(x, 0x20)
// return(x, add(strL, 0x40))
}
return s;
@ -112,19 +110,9 @@ library EternallyPersistentLib {
// Array
// function stgCollectionAddItem(bytes32 idArray, bytes32 idItem) internal returns (uint64) {
function stgCollectionAddItem(EternalStorage _storage, bytes32 idArray) internal returns (uint) {
uint length = _storage.getUIntValue(keccak256(idArray, "length"));
// Set the position in the array as a field so it can be deleted
// _storage.setUIntValue(keccak256(idArray, idItem, "_idx"), length);
// Add the object to the array
// _storage.setBytes32Value(keccak256(idArray, length), idItem);
// Increment the size of the array
length++;
_storage.setUIntValue(keccak256(idArray, "length"), length);
@ -132,27 +120,6 @@ library EternallyPersistentLib {
return length;
}
// function stgCollectionRemoveItem(EternalStorage _storage, bytes32 idArray, bytes32 idItem) internal {
// uint idx = _storage.getUIntValue(keccak256(idArray, idItem, "_idx"));
//
// uint length = _storage.getUIntValue(keccak256(idArray, "length"));
// length --;
//
// // Move the last element ot the array to this place
// bytes32 lastId = _storage.getBytes32Value(keccak256(idArray, length));
// _storage.setBytes32Value(keccak256(idArray, idx), lastId);
// _storage.setUIntValue(keccak256(idArray, lastId, "_idx"), idx);
//
//
// // Decrement the length
// _storage.setUIntValue(keccak256(idArray, "length"), length);
//
// // Cleanup the last element of the array
// _storage.setBytes32Value(keccak256(idArray, length), 0);
//
// _storage.setUIntValue(keccak256(idArray, idItem, "_idx"), 0);
// }
function stgCollectionLength(EternalStorage _storage, bytes32 idArray) internal view returns (uint) {
return _storage.getUIntValue(keccak256(idArray, "length"));
}
@ -161,16 +128,7 @@ library EternallyPersistentLib {
return _storage.getBytes32Value(keccak256(idArray, idx));
}
// bytes32 lastId;
// function stgGetNewId() internal returns (bytes32) {
// lastId = keccak256(lastId, now);
// return lastId;
// }
function stgUpgrade(EternalStorage _storage, address newContract) internal {
_storage.changeOwnership(newContract);
}
}