<?php
ini_set('display_startup_errors',1); require_once('ethereum-php/ethereum.php');
// Create a new object
$ethereum = new Ethereum('127.0.0.1', 8545);
echo "Starting functions.";
// This function will convert our data into hex for the transaction
function hexCon($data) {
$prefix = '0x';
return $prefix . $suffix;
}
// Use these to ABI encode variables to pass into ethereum network--hex + pad
function encString($string) {
$padTo = (strlen($encString) + (32 - (strlen($encString) % 32))) $fullString = str_pad($encString, $padTo, "0"); return $fullString;
}
function encStatic($static) {
$encStatic = bin2hex((string
)$static); $padTo = (strlen($encStatic) + (32 - (strlen($encStatic) % 32))) $fullStatic = str_pad($encStatic, $padTo, "0", STR_PAD_LEFT
); return $fullStatic;
}
echo "Declaring variables.";
// We grab any and all passed variables for edit/new of listing/vendor
// if (isset($_POST['create'])) { $create = $_POST['create']; }
// else { echo "No input was received."; die; }
// if (isset($_POST['action'])) { $action = $_POST['action']; }
// else { echo "No input was received."; die; }
if (isset($_POST['title'])) $title = $_POST['title']; else $title = "";
if (isset($_POST['description'])) $description = $_POST['description']; else $description = "";
if (isset($_POST['images'])) $images = $_POST['images']; else $images = "";
if (isset($_POST['keywords'])) $keywords = $_POST['keywords']; else $keywords = "";
if (isset($_POST['price'])) $price = $_POST['price']; else $price = "";
if (isset($_POST['commission'])) $commission = $_POST['commission']; else $commission = "";
if (isset($_POST['payAddress'])) $payAddress = $_POST['payAddress']; else $payAddress = "";
if (isset($_POST['vendorAddress'])) $vendorAddress = $_POST['vendorAddress']; else $vendorAddress = "";
if (isset($_POST['name'])) $name = $_POST['name']; else $name = "";
if (isset($_POST['profile'])) $profile = $_POST['profile']; else $profile = "";
if (isset($_POST['vendorPage'])) $vendorPage = $_POST['vendorPage']; else $vendorPage = "";
if (isset($_POST['listingPage'])) $listingPage = $_POST['listingPage']; else $listingPage = "";
$listingCreator = "0xec8ae771d2e99e7a700af32acb14908031873e5a";
$vendorCreator = "0x88b2f9e698ddaad14cc52b0bdb4c82fb880aa3c8";
echo "Made it this far.";
$header = "";
$data = "";
// Decide which action user is taking. Takes in variables, converts to ABI, creates tx, and sends to creator contract
if ($create == "listing" && $action == "edit") {
//$data = "($title,$description,$images,$price,$commission)";
// ABI-encoding sucks. 5 lines of header, 1 to describe each dynamic, at least 1 for each dynamic, 1 for each static
$header = encStatic
(5*32) . encStatic
(6*32+strlen(encString
($title))) . encStatic
(7*32+strlen(encString
($title))+strlen(encString
($description))) . encStatic
($price) . encStatic
($commission); // Body just adds the dynamic information
$body = encStatic
(strlen($title)) . encString
($title) . encStatic
(strlen($description)) . encString
($description) . encStatic
(strlen($images)) . encString
($images); $data = $header . $body;
echo $data;
$transaction = new Ethereum_Message("0xf63dfaee6fc634ec46cf8f776e525a6a400189ak", $listingPage, "0x61ce825d" . $data);
$ethereum->eth_sendFunction($transaction);
echo "yep, done";
} elseif ($create == "listing" && $action == "new") {
$data = "($title,$description,$keywords,$images,$price,$payAddress,$commission,$vendorAddress,$vendorName)";
$transaction = new Ethereum_Message("0xf63dfaee6fc634ec46cf8f776e525a6a400189ak", $listingCreator, "0x522e117700000000000000000000000000000000");
$ethereum->eth_sendFunction($transaction);
} elseif ($create == "vendor" && $action == "edit") {
$data = "($vendorAddress,$name,$profile,$images,$payAddress)";
$transaction = new Ethereum_Message("0xf63dfaee6fc634ec46cf8f776e525a6a400189ak", $vendorPage, "0x522e117700000000000000000000000000000000");
$ethereum->eth_sendFunction($transaction);
} elseif ($create == "vendor" && $action == "new") {
$data = "($name,$profile,$images,$payAddress,$vendorAddress)";
$transaction = new Ethereum_Message("0xf63dfaee6fc634ec46cf8f776e525a6a400189ak", $vendorCreator, "0x522e117700000000000000000000000000000000");
$ethereum->eth_sendFunction($transaction);
}
echo "Creation/edit complete!";
?>
PD9waHAKCWluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywxKTsKCWluaV9zZXQoJ2Rpc3BsYXlfc3RhcnR1cF9lcnJvcnMnLDEpOwoJZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsKCXJlcXVpcmVfb25jZSgnZXRoZXJldW0tcGhwL2V0aGVyZXVtLnBocCcpOwoKICAgICAgICAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0CiAgICAgICAgJGV0aGVyZXVtID0gbmV3IEV0aGVyZXVtKCcxMjcuMC4wLjEnLCA4NTQ1KTsKCgllY2hvICJTdGFydGluZyBmdW5jdGlvbnMuIjsKCS8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IG91ciBkYXRhIGludG8gaGV4IGZvciB0aGUgdHJhbnNhY3Rpb24KCWZ1bmN0aW9uIGhleENvbigkZGF0YSkgewoJCSRwcmVmaXggPSAnMHgnOwoJCSRzdWZmaXggPSBiaW4yaGV4KCRkYXRhKTsKCQlyZXR1cm4gJHByZWZpeCAuICRzdWZmaXg7Cgl9CgoJLy8gVXNlIHRoZXNlIHRvIEFCSSBlbmNvZGUgdmFyaWFibGVzIHRvIHBhc3MgaW50byBldGhlcmV1bSBuZXR3b3JrLS1oZXggKyBwYWQKCWZ1bmN0aW9uIGVuY1N0cmluZygkc3RyaW5nKSB7CgkJJGVuY1N0cmluZyA9IGJpbjJoZXgoJHN0cmluZyk7CgkJJHBhZFRvID0gKHN0cmxlbigkZW5jU3RyaW5nKSArICgzMiAtIChzdHJsZW4oJGVuY1N0cmluZykgJSAzMikpKQogICAgICAgICAgICAgICAgJGZ1bGxTdHJpbmcgPSBzdHJfcGFkKCRlbmNTdHJpbmcsICRwYWRUbywgIjAiKTsKCQlyZXR1cm4gJGZ1bGxTdHJpbmc7Cgl9CglmdW5jdGlvbiBlbmNTdGF0aWMoJHN0YXRpYykgewoJCSRlbmNTdGF0aWMgPSBiaW4yaGV4KChzdHJpbmcpJHN0YXRpYyk7CiAgICAgICAgICAgICAgICAkcGFkVG8gPSAoc3RybGVuKCRlbmNTdGF0aWMpICsgKDMyIC0gKHN0cmxlbigkZW5jU3RhdGljKSAlIDMyKSkpCgkJJGZ1bGxTdGF0aWMgPSBzdHJfcGFkKCRlbmNTdGF0aWMsICRwYWRUbywgIjAiLCBTVFJfUEFEX0xFRlQpOwoJCXJldHVybiAkZnVsbFN0YXRpYzsKCX0KCgllY2hvICJEZWNsYXJpbmcgdmFyaWFibGVzLiI7CgkvLyBXZSBncmFiIGFueSBhbmQgYWxsIHBhc3NlZCB2YXJpYWJsZXMgZm9yIGVkaXQvbmV3IG9mIGxpc3RpbmcvdmVuZG9yCi8vCWlmIChpc3NldCgkX1BPU1RbJ2NyZWF0ZSddKSkgeyAkY3JlYXRlID0gJF9QT1NUWydjcmVhdGUnXTsgfQovLwllbHNlIHsgZWNobyAiTm8gaW5wdXQgd2FzIHJlY2VpdmVkLiI7IGRpZTsgfSAKLy8JaWYgKGlzc2V0KCRfUE9TVFsnYWN0aW9uJ10pKSB7ICRhY3Rpb24gPSAkX1BPU1RbJ2FjdGlvbiddOyB9Ci8vCWVsc2UgeyBlY2hvICJObyBpbnB1dCB3YXMgcmVjZWl2ZWQuIjsgZGllOyB9CglpZiAoaXNzZXQoJF9QT1NUWyd0aXRsZSddKSkgJHRpdGxlID0gJF9QT1NUWyd0aXRsZSddOwoJZWxzZSAkdGl0bGUgPSAiIjsKCWlmIChpc3NldCgkX1BPU1RbJ2Rlc2NyaXB0aW9uJ10pKSAkZGVzY3JpcHRpb24gPSAkX1BPU1RbJ2Rlc2NyaXB0aW9uJ107CgllbHNlICRkZXNjcmlwdGlvbiA9ICIiOwoJaWYgKGlzc2V0KCRfUE9TVFsnaW1hZ2VzJ10pKSAkaW1hZ2VzID0gJF9QT1NUWydpbWFnZXMnXTsKCWVsc2UgJGltYWdlcyA9ICIiOwoJaWYgKGlzc2V0KCRfUE9TVFsna2V5d29yZHMnXSkpICRrZXl3b3JkcyA9ICRfUE9TVFsna2V5d29yZHMnXTsKCWVsc2UgJGtleXdvcmRzID0gIiI7CglpZiAoaXNzZXQoJF9QT1NUWydwcmljZSddKSkgJHByaWNlID0gJF9QT1NUWydwcmljZSddOwoJZWxzZSAkcHJpY2UgPSAiIjsKCWlmIChpc3NldCgkX1BPU1RbJ2NvbW1pc3Npb24nXSkpICRjb21taXNzaW9uID0gJF9QT1NUWydjb21taXNzaW9uJ107CgllbHNlICRjb21taXNzaW9uID0gIiI7CglpZiAoaXNzZXQoJF9QT1NUWydwYXlBZGRyZXNzJ10pKSAkcGF5QWRkcmVzcyA9ICRfUE9TVFsncGF5QWRkcmVzcyddOwoJZWxzZSAkcGF5QWRkcmVzcyA9ICIiOwoJaWYgKGlzc2V0KCRfUE9TVFsndmVuZG9yQWRkcmVzcyddKSkgJHZlbmRvckFkZHJlc3MgPSAkX1BPU1RbJ3ZlbmRvckFkZHJlc3MnXTsKCWVsc2UgJHZlbmRvckFkZHJlc3MgPSAiIjsKCWlmIChpc3NldCgkX1BPU1RbJ25hbWUnXSkpICRuYW1lID0gJF9QT1NUWyduYW1lJ107CgllbHNlICRuYW1lID0gIiI7CglpZiAoaXNzZXQoJF9QT1NUWydwcm9maWxlJ10pKSAkcHJvZmlsZSA9ICRfUE9TVFsncHJvZmlsZSddOwoJZWxzZSAkcHJvZmlsZSA9ICIiOwoJaWYgKGlzc2V0KCRfUE9TVFsndmVuZG9yUGFnZSddKSkgJHZlbmRvclBhZ2UgPSAkX1BPU1RbJ3ZlbmRvclBhZ2UnXTsKCWVsc2UgJHZlbmRvclBhZ2UgPSAiIjsKCWlmIChpc3NldCgkX1BPU1RbJ2xpc3RpbmdQYWdlJ10pKSAkbGlzdGluZ1BhZ2UgPSAkX1BPU1RbJ2xpc3RpbmdQYWdlJ107CgllbHNlICRsaXN0aW5nUGFnZSA9ICIiOwoKCSRsaXN0aW5nQ3JlYXRvciA9ICIweGVjOGFlNzcxZDJlOTllN2E3MDBhZjMyYWNiMTQ5MDgwMzE4NzNlNWEiOwoJJHZlbmRvckNyZWF0b3IgPSAiMHg4OGIyZjllNjk4ZGRhYWQxNGNjNTJiMGJkYjRjODJmYjg4MGFhM2M4IjsKCgllY2hvICJNYWRlIGl0IHRoaXMgZmFyLiI7CgkkaGVhZGVyID0gIiI7CgkkZGF0YSA9ICIiOwoJLy8gRGVjaWRlIHdoaWNoIGFjdGlvbiB1c2VyIGlzIHRha2luZy4gVGFrZXMgaW4gdmFyaWFibGVzLCBjb252ZXJ0cyB0byBBQkksIGNyZWF0ZXMgdHgsIGFuZCBzZW5kcyB0byBjcmVhdG9yIGNvbnRyYWN0CglpZiAoJGNyZWF0ZSA9PSAibGlzdGluZyIgJiYgJGFjdGlvbiA9PSAiZWRpdCIpIHsKCQkvLyRkYXRhID0gIigkdGl0bGUsJGRlc2NyaXB0aW9uLCRpbWFnZXMsJHByaWNlLCRjb21taXNzaW9uKSI7CgkJLy8gQUJJLWVuY29kaW5nIHN1Y2tzLiA1IGxpbmVzIG9mIGhlYWRlciwgMSB0byBkZXNjcmliZSBlYWNoIGR5bmFtaWMsIGF0IGxlYXN0IDEgZm9yIGVhY2ggZHluYW1pYywgMSBmb3IgZWFjaCBzdGF0aWMKCQkkaGVhZGVyID0gZW5jU3RhdGljKDUqMzIpIC4gZW5jU3RhdGljKDYqMzIrc3RybGVuKGVuY1N0cmluZygkdGl0bGUpKSkgLiBlbmNTdGF0aWMoNyozMitzdHJsZW4oZW5jU3RyaW5nKCR0aXRsZSkpK3N0cmxlbihlbmNTdHJpbmcoJGRlc2NyaXB0aW9uKSkpIC4gZW5jU3RhdGljKCRwcmljZSkgLiBlbmNTdGF0aWMoJGNvbW1pc3Npb24pOwoJCS8vIEJvZHkganVzdCBhZGRzIHRoZSBkeW5hbWljIGluZm9ybWF0aW9uCgkJJGJvZHkgPSBlbmNTdGF0aWMoc3RybGVuKCR0aXRsZSkpIC4gZW5jU3RyaW5nKCR0aXRsZSkgLiBlbmNTdGF0aWMoc3RybGVuKCRkZXNjcmlwdGlvbikpIC4gZW5jU3RyaW5nKCRkZXNjcmlwdGlvbikgLiBlbmNTdGF0aWMoc3RybGVuKCRpbWFnZXMpKSAuIGVuY1N0cmluZygkaW1hZ2VzKTsKCQkkZGF0YSA9ICRoZWFkZXIgLiAkYm9keTsKCQllY2hvICRkYXRhOwoJCSR0cmFuc2FjdGlvbiA9IG5ldyBFdGhlcmV1bV9NZXNzYWdlKCIweGY2M2RmYWVlNmZjNjM0ZWM0NmNmOGY3NzZlNTI1YTZhNDAwMTg5YWsiLCAkbGlzdGluZ1BhZ2UsICIweDYxY2U4MjVkIiAuICRkYXRhKTsKCQkkZXRoZXJldW0tPmV0aF9zZW5kRnVuY3Rpb24oJHRyYW5zYWN0aW9uKTsKCQllY2hvICJ5ZXAsIGRvbmUiOwoJfSBlbHNlaWYgKCRjcmVhdGUgPT0gImxpc3RpbmciICYmICRhY3Rpb24gPT0gIm5ldyIpIHsKCQkkZGF0YSA9ICIoJHRpdGxlLCRkZXNjcmlwdGlvbiwka2V5d29yZHMsJGltYWdlcywkcHJpY2UsJHBheUFkZHJlc3MsJGNvbW1pc3Npb24sJHZlbmRvckFkZHJlc3MsJHZlbmRvck5hbWUpIjsKCQkkdHJhbnNhY3Rpb24gPSBuZXcgRXRoZXJldW1fTWVzc2FnZSgiMHhmNjNkZmFlZTZmYzYzNGVjNDZjZjhmNzc2ZTUyNWE2YTQwMDE4OWFrIiwgJGxpc3RpbmdDcmVhdG9yLCAiMHg1MjJlMTE3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7CgkJJGV0aGVyZXVtLT5ldGhfc2VuZEZ1bmN0aW9uKCR0cmFuc2FjdGlvbik7Cgl9IGVsc2VpZiAoJGNyZWF0ZSA9PSAidmVuZG9yIiAmJiAkYWN0aW9uID09ICJlZGl0IikgewoJCSRkYXRhID0gIigkdmVuZG9yQWRkcmVzcywkbmFtZSwkcHJvZmlsZSwkaW1hZ2VzLCRwYXlBZGRyZXNzKSI7CgkJJHRyYW5zYWN0aW9uID0gbmV3IEV0aGVyZXVtX01lc3NhZ2UoIjB4ZjYzZGZhZWU2ZmM2MzRlYzQ2Y2Y4Zjc3NmU1MjVhNmE0MDAxODlhayIsICR2ZW5kb3JQYWdlLCAiMHg1MjJlMTE3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7CgkJJGV0aGVyZXVtLT5ldGhfc2VuZEZ1bmN0aW9uKCR0cmFuc2FjdGlvbik7Cgl9IGVsc2VpZiAoJGNyZWF0ZSA9PSAidmVuZG9yIiAmJiAkYWN0aW9uID09ICJuZXciKSB7CgkJJGRhdGEgPSAiKCRuYW1lLCRwcm9maWxlLCRpbWFnZXMsJHBheUFkZHJlc3MsJHZlbmRvckFkZHJlc3MpIjsKCQkkdHJhbnNhY3Rpb24gPSBuZXcgRXRoZXJldW1fTWVzc2FnZSgiMHhmNjNkZmFlZTZmYzYzNGVjNDZjZjhmNzc2ZTUyNWE2YTQwMDE4OWFrIiwgJHZlbmRvckNyZWF0b3IsICIweDUyMmUxMTc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKCQkkZXRoZXJldW0tPmV0aF9zZW5kRnVuY3Rpb24oJHRyYW5zYWN0aW9uKTsKCX0KCgllY2hvICJDcmVhdGlvbi9lZGl0IGNvbXBsZXRlISI7Cj8+