From 27a8799e4809325bb2d7dbc7480a3de0f9d684d6 Mon Sep 17 00:00:00 2001
From: Marek Kotewicz <marek.kotewicz@gmail.com>
Date: Mon, 17 Nov 2014 15:46:46 +0100
Subject: added eth_serpent, contract separated to another file

---
 lib/contract.js | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)
 create mode 100644 lib/contract.js

(limited to 'lib/contract.js')

diff --git a/lib/contract.js b/lib/contract.js
new file mode 100644
index 000000000..10ceaf869
--- /dev/null
+++ b/lib/contract.js
@@ -0,0 +1,63 @@
+/*
+    This file is part of ethereum.js.
+
+    ethereum.js is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Lesser General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    ethereum.js is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public License
+    along with ethereum.js.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/** @file contract.js
+ * @authors:
+ *   Marek Kotewicz <marek@ethdev.com>
+ * @date 2014
+ */
+
+if (process.env.NODE_ENV !== 'build') {
+    var web3 = require('./web3'); // jshint ignore:line
+}
+var abi = require('./abi');
+
+var contract = function (address, desc) {
+    var inputParser = abi.inputParser(desc);
+    var outputParser = abi.outputParser(desc);
+
+    var contract = {};
+
+    desc.forEach(function (method) {
+        contract[method.name] = function () {
+            var params = Array.prototype.slice.call(arguments);
+            var parsed = inputParser[method.name].apply(null, params);
+
+            var onSuccess = function (result) {
+                return outputParser[method.name](result);
+            };
+
+            return {
+                call: function (extra) {
+                    extra = extra || {};
+                    extra.to = address;
+                    extra.data = parsed;
+                    return web3.eth.call(extra).then(onSuccess);
+                },
+                transact: function (extra) {
+                    extra = extra || {};
+                    extra.to = address;
+                    extra.data = parsed;
+                    return web3.eth.transact(extra).then(onSuccess);
+                }
+            };
+        };
+    });
+         
+    return contract;
+};
+
+module.exports = contract;
-- 
cgit v1.2.3