Merge branch 'avishkarabhishek786-master'
Adding flosend.html
This commit is contained in:
commit
e5e5989d6b
3565
supernode/flosend.html
Normal file
3565
supernode/flosend.html
Normal file
File diff suppressed because it is too large
Load Diff
@ -165,6 +165,157 @@
|
|||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- SHA1 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
//Adding SHA1 to fix basic PKBDF2
|
||||||
|
/*
|
||||||
|
* Crypto-JS v2.5.4
|
||||||
|
* http://code.google.com/p/crypto-js/
|
||||||
|
* (c) 2009-2012 by Jeff Mott. All rights reserved.
|
||||||
|
* http://code.google.com/p/crypto-js/wiki/License
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var C = Crypto,
|
||||||
|
util = C.util,
|
||||||
|
charenc = C.charenc,
|
||||||
|
UTF8 = charenc.UTF8,
|
||||||
|
Binary = charenc.Binary;
|
||||||
|
|
||||||
|
// Public API
|
||||||
|
var SHA1 = C.SHA1 = function (message, options) {
|
||||||
|
var digestbytes = util.wordsToBytes(SHA1._sha1(message));
|
||||||
|
return options && options.asBytes ? digestbytes :
|
||||||
|
options && options.asString ? Binary.bytesToString(digestbytes) :
|
||||||
|
util.bytesToHex(digestbytes);
|
||||||
|
};
|
||||||
|
|
||||||
|
// The core
|
||||||
|
SHA1._sha1 = function (message) {
|
||||||
|
|
||||||
|
// Convert to byte array
|
||||||
|
if (message.constructor == String) message = UTF8.stringToBytes(message);
|
||||||
|
/* else, assume byte array already */
|
||||||
|
|
||||||
|
var m = util.bytesToWords(message),
|
||||||
|
l = message.length * 8,
|
||||||
|
w = [],
|
||||||
|
H0 = 1732584193,
|
||||||
|
H1 = -271733879,
|
||||||
|
H2 = -1732584194,
|
||||||
|
H3 = 271733878,
|
||||||
|
H4 = -1009589776;
|
||||||
|
|
||||||
|
// Padding
|
||||||
|
m[l >> 5] |= 0x80 << (24 - l % 32);
|
||||||
|
m[((l + 64 >>> 9) << 4) + 15] = l;
|
||||||
|
|
||||||
|
for (var i = 0; i < m.length; i += 16) {
|
||||||
|
|
||||||
|
var a = H0,
|
||||||
|
b = H1,
|
||||||
|
c = H2,
|
||||||
|
d = H3,
|
||||||
|
e = H4;
|
||||||
|
|
||||||
|
for (var j = 0; j < 80; j++) {
|
||||||
|
|
||||||
|
if (j < 16) w[j] = m[i + j];
|
||||||
|
else {
|
||||||
|
var n = w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16];
|
||||||
|
w[j] = (n << 1) | (n >>> 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
var t = ((H0 << 5) | (H0 >>> 27)) + H4 + (w[j] >>> 0) + (
|
||||||
|
j < 20 ? (H1 & H2 | ~H1 & H3) + 1518500249 :
|
||||||
|
j < 40 ? (H1 ^ H2 ^ H3) + 1859775393 :
|
||||||
|
j < 60 ? (H1 & H2 | H1 & H3 | H2 & H3) - 1894007588 :
|
||||||
|
(H1 ^ H2 ^ H3) - 899497514);
|
||||||
|
|
||||||
|
H4 = H3;
|
||||||
|
H3 = H2;
|
||||||
|
H2 = (H1 << 30) | (H1 >>> 2);
|
||||||
|
H1 = H0;
|
||||||
|
H0 = t;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
H0 += a;
|
||||||
|
H1 += b;
|
||||||
|
H2 += c;
|
||||||
|
H3 += d;
|
||||||
|
H4 += e;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return [H0, H1, H2, H3, H4];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// Package private blocksize
|
||||||
|
SHA1._blocksize = 16;
|
||||||
|
|
||||||
|
SHA1._digestsize = 20;
|
||||||
|
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- HMAC -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
//Added to make PKBDF2 work
|
||||||
|
/*
|
||||||
|
* Crypto-JS v2.5.4
|
||||||
|
* http://code.google.com/p/crypto-js/
|
||||||
|
* (c) 2009-2012 by Jeff Mott. All rights reserved.
|
||||||
|
* http://code.google.com/p/crypto-js/wiki/License
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var C = Crypto,
|
||||||
|
util = C.util,
|
||||||
|
charenc = C.charenc,
|
||||||
|
UTF8 = charenc.UTF8,
|
||||||
|
Binary = charenc.Binary;
|
||||||
|
|
||||||
|
C.HMAC = function (hasher, message, key, options) {
|
||||||
|
|
||||||
|
// Convert to byte arrays
|
||||||
|
if (message.constructor == String) message = UTF8.stringToBytes(message);
|
||||||
|
if (key.constructor == String) key = UTF8.stringToBytes(key);
|
||||||
|
/* else, assume byte arrays already */
|
||||||
|
|
||||||
|
// Allow arbitrary length keys
|
||||||
|
if (key.length > hasher._blocksize * 4)
|
||||||
|
key = hasher(key, {
|
||||||
|
asBytes: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// XOR keys with pad constants
|
||||||
|
var okey = key.slice(0),
|
||||||
|
ikey = key.slice(0);
|
||||||
|
for (var i = 0; i < hasher._blocksize * 4; i++) {
|
||||||
|
okey[i] ^= 0x5C;
|
||||||
|
ikey[i] ^= 0x36;
|
||||||
|
}
|
||||||
|
|
||||||
|
var hmacbytes = hasher(okey.concat(hasher(ikey.concat(message), {
|
||||||
|
asBytes: true
|
||||||
|
})), {
|
||||||
|
asBytes: true
|
||||||
|
});
|
||||||
|
|
||||||
|
return options && options.asBytes ? hmacbytes :
|
||||||
|
options && options.asString ? Binary.bytesToString(hmacbytes) :
|
||||||
|
util.bytesToHex(hmacbytes);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
/*!
|
/*!
|
||||||
* Crypto-JS v2.5.4 SHA256.js
|
* Crypto-JS v2.5.4 SHA256.js
|
||||||
@ -6872,15 +7023,17 @@
|
|||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- Ranchi Mall localbitcoinplusplus Code starts -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var ninja = {
|
var localbitcoinplusplus = {
|
||||||
wallets: {},
|
wallets: {},
|
||||||
trade: {},
|
trade: {},
|
||||||
keys_management: {},
|
rpc: {},
|
||||||
rpc:{}
|
rm_configs: {},
|
||||||
|
flocha: "https://livenet.flocha.in"
|
||||||
};
|
};
|
||||||
|
|
||||||
ninja.privateKey = {
|
localbitcoinplusplus.privateKey = {
|
||||||
isPrivateKey: function (key) {
|
isPrivateKey: function (key) {
|
||||||
return (
|
return (
|
||||||
Bitcoin.ECKey.isWalletImportFormat(key) ||
|
Bitcoin.ECKey.isWalletImportFormat(key) ||
|
||||||
@ -6924,18 +7077,18 @@
|
|||||||
try {
|
try {
|
||||||
hex = Bitcoin.Base58.decode(base58Encrypted);
|
hex = Bitcoin.Base58.decode(base58Encrypted);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
callback(new Error(ninja.translator.get("detailalertnotvalidprivatekey")));
|
callback(new Error(localbitcoinplusplus.translator.get("detailalertnotvalidprivatekey")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 43 bytes: 2 bytes prefix, 37 bytes payload, 4 bytes checksum
|
// 43 bytes: 2 bytes prefix, 37 bytes payload, 4 bytes checksum
|
||||||
if (hex.length != 43) {
|
if (hex.length != 43) {
|
||||||
callback(new Error(ninja.translator.get("detailalertnotvalidprivatekey")));
|
callback(new Error(localbitcoinplusplus.translator.get("detailalertnotvalidprivatekey")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// first byte is always 0x01
|
// first byte is always 0x01
|
||||||
else if (hex[0] != 0x01) {
|
else if (hex[0] != 0x01) {
|
||||||
callback(new Error(ninja.translator.get("detailalertnotvalidprivatekey")));
|
callback(new Error(localbitcoinplusplus.translator.get("detailalertnotvalidprivatekey")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6945,7 +7098,7 @@
|
|||||||
if (checksum[0] != expChecksum[0] || checksum[1] != expChecksum[1] || checksum[2] !=
|
if (checksum[0] != expChecksum[0] || checksum[1] != expChecksum[1] || checksum[2] !=
|
||||||
expChecksum[2] ||
|
expChecksum[2] ||
|
||||||
checksum[3] != expChecksum[3]) {
|
checksum[3] != expChecksum[3]) {
|
||||||
callback(new Error(ninja.translator.get("detailalertnotvalidprivatekey")));
|
callback(new Error(localbitcoinplusplus.translator.get("detailalertnotvalidprivatekey")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6960,7 +7113,7 @@
|
|||||||
}
|
}
|
||||||
// key should NOT use compression
|
// key should NOT use compression
|
||||||
else if (hex[2] != 0xc0) {
|
else if (hex[2] != 0xc0) {
|
||||||
callback(new Error(ninja.translator.get("detailalertnotvalidprivatekey")));
|
callback(new Error(localbitcoinplusplus.translator.get("detailalertnotvalidprivatekey")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6970,11 +7123,11 @@
|
|||||||
isCompPoint = (hex[2] & 0x20) != 0;
|
isCompPoint = (hex[2] & 0x20) != 0;
|
||||||
hasLotSeq = (hex[2] & 0x04) != 0;
|
hasLotSeq = (hex[2] & 0x04) != 0;
|
||||||
if ((hex[2] & 0x24) != hex[2]) {
|
if ((hex[2] & 0x24) != hex[2]) {
|
||||||
callback(new Error(ninja.translator.get("detailalertnotvalidprivatekey")));
|
callback(new Error(localbitcoinplusplus.translator.get("detailalertnotvalidprivatekey")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
callback(new Error(ninja.translator.get("detailalertnotvalidprivatekey")));
|
callback(new Error(localbitcoinplusplus.translator.get("detailalertnotvalidprivatekey")));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6992,7 +7145,8 @@
|
|||||||
if (checksum[0] != hex[3] || checksum[1] != hex[4] || checksum[2] != hex[5] || checksum[
|
if (checksum[0] != hex[3] || checksum[1] != hex[4] || checksum[2] != hex[5] || checksum[
|
||||||
3] !=
|
3] !=
|
||||||
hex[6]) {
|
hex[6]) {
|
||||||
callback(new Error(ninja.translator.get("bip38alertincorrectpassphrase"))); // callback using closure
|
callback(new Error(localbitcoinplusplus.translator.get(
|
||||||
|
"bip38alertincorrectpassphrase"))); // callback using closure
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
callback(tmpkey.getBitcoinPrivateKeyByteArray()); // callback using closure
|
callback(tmpkey.getBitcoinPrivateKeyByteArray()); // callback using closure
|
||||||
@ -7162,7 +7316,8 @@
|
|||||||
// address using either compressed or uncompressed public key methodology (specify which methodology is used
|
// address using either compressed or uncompressed public key methodology (specify which methodology is used
|
||||||
// inside flagbyte). This is the generated Bitcoin address, call it generatedaddress.
|
// inside flagbyte). This is the generated Bitcoin address, call it generatedaddress.
|
||||||
var ec = EllipticCurve.getSECCurveByName("secp256k1").getCurve();
|
var ec = EllipticCurve.getSECCurveByName("secp256k1").getCurve();
|
||||||
var generatedPoint = ec.decodePointHex(ninja.publicKey.getHexFromByteArray(passpoint));
|
var generatedPoint = ec.decodePointHex(localbitcoinplusplus.publicKey.getHexFromByteArray(
|
||||||
|
passpoint));
|
||||||
var generatedBytes = generatedPoint.multiply(BigInteger.fromByteArrayUnsigned(factorB)).getEncoded(
|
var generatedBytes = generatedPoint.multiply(BigInteger.fromByteArrayUnsigned(factorB)).getEncoded(
|
||||||
compressed);
|
compressed);
|
||||||
var generatedAddress = (new Bitcoin.Address(Bitcoin.Util.sha256ripe160(generatedBytes))).toString();
|
var generatedAddress = (new Bitcoin.Address(Bitcoin.Util.sha256ripe160(generatedBytes))).toString();
|
||||||
@ -7202,11 +7357,12 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ninja.publicKey = {
|
localbitcoinplusplus.publicKey = {
|
||||||
isPublicKeyHexFormat: function (key) {
|
isPublicKeyHexFormat: function (key) {
|
||||||
key = key.toString();
|
key = key.toString();
|
||||||
return ninja.publicKey.isUncompressedPublicKeyHexFormat(key) || ninja.publicKey.isCompressedPublicKeyHexFormat(
|
return localbitcoinplusplus.publicKey.isUncompressedPublicKeyHexFormat(key) ||
|
||||||
key);
|
localbitcoinplusplus.publicKey.isCompressedPublicKeyHexFormat(
|
||||||
|
key);
|
||||||
},
|
},
|
||||||
// 130 characters [0-9A-F] starts with 04
|
// 130 characters [0-9A-F] starts with 04
|
||||||
isUncompressedPublicKeyHexFormat: function (key) {
|
isUncompressedPublicKeyHexFormat: function (key) {
|
||||||
@ -7255,102 +7411,91 @@
|
|||||||
var ecparams = EllipticCurve.getSECCurveByName("secp256k1");
|
var ecparams = EllipticCurve.getSECCurveByName("secp256k1");
|
||||||
var ecPoint = ecparams.getCurve().decodePointHex(pubKeyHexComp);
|
var ecPoint = ecparams.getCurve().decodePointHex(pubKeyHexComp);
|
||||||
var pubByteArray = ecPoint.getEncoded(0);
|
var pubByteArray = ecPoint.getEncoded(0);
|
||||||
var pubHexUncompressed = ninja.publicKey.getHexFromByteArray(pubByteArray);
|
var pubHexUncompressed = localbitcoinplusplus.publicKey.getHexFromByteArray(pubByteArray);
|
||||||
return pubHexUncompressed;
|
return pubHexUncompressed;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- Keys Object Operations (Generate, Sign and Verify) -->
|
||||||
<script>
|
<script>
|
||||||
(function (wallets) {
|
var wallets = localbitcoinplusplus.wallets = function (wallets) {
|
||||||
|
|
||||||
var signing = wallets.flowallet = {
|
|
||||||
|
|
||||||
ecparams: EllipticCurve.getSECCurveByName("secp256k1"),
|
|
||||||
|
|
||||||
generateFloKeys: function () {
|
|
||||||
|
|
||||||
var privateKey = Bitcoin.ECDSA.getBigRandom(EllipticCurve.getSECCurveByName("secp256k1")
|
|
||||||
.getN());
|
|
||||||
console.log(privateKey);
|
|
||||||
|
|
||||||
var key = new Bitcoin.ECKey(privateKey);
|
|
||||||
key.setCompressed(true);
|
|
||||||
var privateKeyHex = key.getBitcoinHexFormat();
|
|
||||||
|
|
||||||
var publicKeyHex = ninja.publicKey.getHexFromByteArray(key.getPubPoint().getEncoded(1))
|
|
||||||
.toString().toUpperCase();
|
|
||||||
|
|
||||||
console.log("privateKeyHex: ", privateKeyHex);
|
|
||||||
console.log("publicKeyHex: ", publicKeyHex);
|
|
||||||
},
|
|
||||||
sign: function (msg, privateKeyHex) {
|
|
||||||
|
|
||||||
var key = new Bitcoin.ECKey(privateKeyHex);
|
|
||||||
key.setCompressed(true);
|
|
||||||
|
|
||||||
var privateKeyArr = key.getBitcoinPrivateKeyByteArray(privateKeyHex);
|
|
||||||
privateKey = BigInteger.fromByteArrayUnsigned(privateKeyArr);
|
|
||||||
console.log(privateKey);
|
|
||||||
|
|
||||||
var messageHash = Crypto.SHA256(msg);
|
|
||||||
|
|
||||||
var messageHashBigInteger = new BigInteger(messageHash);
|
|
||||||
|
|
||||||
var messageSign = Bitcoin.ECDSA.sign(messageHashBigInteger, privateKey);
|
|
||||||
|
|
||||||
var sighex = Crypto.util.bytesToHex(messageSign);
|
|
||||||
return sighex;
|
|
||||||
},
|
|
||||||
verify: function (msg, signatureHex, publicKeyHex) {
|
|
||||||
var msgHash = Crypto.SHA256(msg);
|
|
||||||
var messageHashBigInteger = new BigInteger(msgHash);
|
|
||||||
|
|
||||||
var sigBytes = Crypto.util.hexToBytes(signatureHex);
|
|
||||||
var signature = Bitcoin.ECDSA.parseSig(sigBytes);
|
|
||||||
|
|
||||||
var publicKeyPoint = this.ecparams.getCurve().decodePointHex(publicKeyHex);
|
|
||||||
|
|
||||||
var verify = Bitcoin.ECDSA.verifyRaw(messageHashBigInteger, signature.r, signature.s,
|
|
||||||
publicKeyPoint);
|
|
||||||
return verify;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})(ninja.wallets)
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
var Keys = ninja.keys_management = function manageKeys(keys) {
|
|
||||||
//3354E12F0D2737A16B30B46D66CEDB9C7C0CD35F22CFCCE9828318DDBB73C0F6 // private key
|
//3354E12F0D2737A16B30B46D66CEDB9C7C0CD35F22CFCCE9828318DDBB73C0F6 // private key
|
||||||
this.master_node = "038E48297353843614190D9C36D1F6565D68CB24C01A66DC7432BD91D979F7AC68"; // pub key
|
this.master_node = "038E48297353843614190D9C36D1F6565D68CB24C01A66DC7432BD91D979F7AC68"; // pub key
|
||||||
}
|
this.rm_flo_addr = "FSTDEb1ygMSwKB65uMYrrzjhdcCpXkt1uH";
|
||||||
|
};
|
||||||
|
wallets.prototype = {
|
||||||
|
ecparams: EllipticCurve.getSECCurveByName("secp256k1"),
|
||||||
|
|
||||||
Keys.prototype.foo = {
|
generateFloKeys: function () {
|
||||||
bar: "lorem ipsum",
|
|
||||||
nominateAsTrustedKey: function () {
|
var privateKey = Bitcoin.ECDSA.getBigRandom(EllipticCurve.getSECCurveByName("secp256k1")
|
||||||
console.log("ok");
|
.getN());
|
||||||
|
console.log(privateKey);
|
||||||
|
|
||||||
|
var key = new Bitcoin.ECKey(privateKey);
|
||||||
|
key.setCompressed(true);
|
||||||
|
var privateKeyHex = key.getBitcoinHexFormat();
|
||||||
|
|
||||||
|
var publicKeyHex = localbitcoinplusplus.publicKey.getHexFromByteArray(key.getPubPoint().getEncoded(
|
||||||
|
1))
|
||||||
|
.toString().toUpperCase();
|
||||||
|
|
||||||
|
console.log("privateKeyHex: ", privateKeyHex);
|
||||||
|
console.log("publicKeyHex: ", publicKeyHex);
|
||||||
|
},
|
||||||
|
sign: function (msg, privateKeyHex) {
|
||||||
|
|
||||||
|
var key = new Bitcoin.ECKey(privateKeyHex);
|
||||||
|
key.setCompressed(true);
|
||||||
|
|
||||||
|
var privateKeyArr = key.getBitcoinPrivateKeyByteArray(privateKeyHex);
|
||||||
|
privateKey = BigInteger.fromByteArrayUnsigned(privateKeyArr);
|
||||||
|
console.log(privateKey);
|
||||||
|
|
||||||
|
var messageHash = Crypto.SHA256(msg);
|
||||||
|
|
||||||
|
var messageHashBigInteger = new BigInteger(messageHash);
|
||||||
|
|
||||||
|
var messageSign = Bitcoin.ECDSA.sign(messageHashBigInteger, privateKey);
|
||||||
|
|
||||||
|
var sighex = Crypto.util.bytesToHex(messageSign);
|
||||||
|
return sighex;
|
||||||
|
},
|
||||||
|
verify: function (msg, signatureHex, publicKeyHex) {
|
||||||
|
var msgHash = Crypto.SHA256(msg);
|
||||||
|
var messageHashBigInteger = new BigInteger(msgHash);
|
||||||
|
|
||||||
|
var sigBytes = Crypto.util.hexToBytes(signatureHex);
|
||||||
|
var signature = Bitcoin.ECDSA.parseSig(sigBytes);
|
||||||
|
|
||||||
|
var publicKeyPoint = this.ecparams.getCurve().decodePointHex(publicKeyHex);
|
||||||
|
|
||||||
|
var verify = Bitcoin.ECDSA.verifyRaw(messageHashBigInteger, signature.r, signature.s,
|
||||||
|
publicKeyPoint);
|
||||||
|
return verify;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- RPC Object -->
|
||||||
<script>
|
<script>
|
||||||
/*RPC Class*/
|
var Rpc = localbitcoinplusplus.rpc = function () {
|
||||||
var Rpc = ninja.rpc = function() {
|
|
||||||
this.rpc_req_id;
|
this.rpc_req_id;
|
||||||
this.valid_job = ["trade_buy", "trade_sell"];
|
this.valid_job = ["trade_buy", "trade_sell"];
|
||||||
}
|
}
|
||||||
Rpc.prototype = {
|
Rpc.prototype = {
|
||||||
//get rpc_req_id() {return this.rpc_req_id;},
|
//get rpc_req_id() {return this.rpc_req_id;},
|
||||||
|
|
||||||
send_rpc(method, ...params) {
|
send_rpc(method, ...params) {
|
||||||
var request = new JSON_RPC.Request(method, params);
|
var request = new JSON_RPC.Request(method, params);
|
||||||
console.log(request);
|
console.log(request);
|
||||||
|
|
||||||
var id = request.id;
|
var id = request.id;
|
||||||
this.rpc_req_id = id;
|
this.rpc_req_id = id;
|
||||||
return request.toString();
|
return request.toString();
|
||||||
//return request;
|
//return request;
|
||||||
},
|
},
|
||||||
|
|
||||||
receive_rpc_response(request) {
|
receive_rpc_response(request) {
|
||||||
var request = JSON.parse(request);
|
var request = JSON.parse(request);
|
||||||
@ -7359,22 +7504,22 @@
|
|||||||
|
|
||||||
if (typeof params != undefined && typeof method != undefined) {
|
if (typeof params != undefined && typeof method != undefined) {
|
||||||
request.response = {};
|
request.response = {};
|
||||||
|
|
||||||
switch (method) {
|
switch (method) {
|
||||||
case "trade_buy":
|
case "trade_buy":
|
||||||
var Trade = new ninja.trade();
|
var Trade = new localbitcoinplusplus.trade();
|
||||||
request.response = Trade.trade_buy(...request.params);
|
request.response = Trade.trade_buy(...request.params);
|
||||||
break;
|
break;
|
||||||
case "trade_sell":
|
case "trade_sell":
|
||||||
var Trade = new ninja.trade();
|
var Trade = new localbitcoinplusplus.trade();
|
||||||
request.response = Trade.trade_sell(...request.params);
|
request.response = Trade.trade_sell(...request.params);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
alert("Unknown method called for execution.");
|
alert("Unknown method called for execution.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//request.response = request.method(); // if successful
|
//request.response = request.method(); // if successful
|
||||||
return request.toString(); // return to client
|
return request.toString(); // return to client
|
||||||
},
|
},
|
||||||
@ -7392,9 +7537,10 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- Trade Object -->
|
||||||
<script>
|
<script>
|
||||||
/*Initiate trade level with 0*/
|
/*Initiate trade level with 0*/
|
||||||
var Trade = ninja.trade = function processTrade() {
|
var Trade = localbitcoinplusplus.trade = function processTrade() {
|
||||||
//this.op_code = null;
|
//this.op_code = null;
|
||||||
this.errors = [];
|
this.errors = [];
|
||||||
this.level = 0; // default
|
this.level = 0; // default
|
||||||
@ -7404,75 +7550,88 @@
|
|||||||
this.valid_product = ["BTC", "INR"];
|
this.valid_product = ["BTC", "INR"];
|
||||||
this.currency = null;
|
this.currency = null;
|
||||||
this.valid_currencies = ["BTC", "INR"],
|
this.valid_currencies = ["BTC", "INR"],
|
||||||
this.buy_price = null;
|
this.buy_price = null;
|
||||||
this.buyer_public_key = null;
|
this.buyer_public_key = null;
|
||||||
this.buyer_key_signature = null;
|
this.buyer_key_signature = null;
|
||||||
this.order_validator_public_key = null;
|
this.order_validator_public_key = null;
|
||||||
this.rpc_job = null;
|
this.rpc_job = null;
|
||||||
this.floAddress = null;
|
this.floAddress = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Trade.prototype = {
|
Trade.prototype = {
|
||||||
get trustLevel() {return this.level;},
|
get trustLevel() {
|
||||||
|
return this.level;
|
||||||
|
},
|
||||||
set trustLevel(level) {
|
set trustLevel(level) {
|
||||||
if (typeof level === "number" && level === parseInt(level, 10) && level > 0 && level < 6) {
|
if (typeof level === "number" && level === parseInt(level, 10) && level > 0 && level < 6) {
|
||||||
this.level = level;
|
this.level = level;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
validate_order(order_type, product, currency, buy_price, buyer_public_key, buyer_key_signature, order_validator_public_key) {
|
validate_order(order_type, product, currency, buy_price, buyer_public_key, buyer_key_signature,
|
||||||
|
order_validator_public_key) {
|
||||||
if(this.valid_order_type.indexOf(order_type) >= 0) {
|
|
||||||
|
if (this.valid_order_type.indexOf(order_type) >= 0) {
|
||||||
this.order_type = order_type;
|
this.order_type = order_type;
|
||||||
} else {
|
} else {
|
||||||
this.errors.push("Inavlid trade type value.");
|
this.errors.push("Inavlid trade type value.");
|
||||||
}
|
}
|
||||||
if(this.valid_product.indexOf(product)>=0) {
|
if (this.valid_product.indexOf(product) >= 0) {
|
||||||
this.product = product;
|
this.product = product;
|
||||||
} else {
|
} else {
|
||||||
this.errors.push("Invalid product.");
|
this.errors.push("Invalid product.");
|
||||||
}
|
}
|
||||||
if(this.valid_currencies.indexOf(currency)>=0) {
|
if (this.valid_currencies.indexOf(currency) >= 0) {
|
||||||
this.currency = currency;
|
this.currency = currency;
|
||||||
} else {
|
} else {
|
||||||
this.errors.push("Invalid currency.");
|
this.errors.push("Invalid currency.");
|
||||||
}
|
}
|
||||||
if(typeof buy_price == "number" && buy_price > 0) {
|
if (typeof buy_price == "number" && buy_price > 0) {
|
||||||
this.buy_price = buy_price;
|
this.buy_price = buy_price;
|
||||||
} else {
|
} else {
|
||||||
this.errors.push("Invalid buying price. Please place a valid buy amount.");
|
this.errors.push("Invalid buying price. Please place a valid buy amount.");
|
||||||
}
|
}
|
||||||
if(buyer_public_key.length > 0) {
|
if (buyer_public_key.length > 0) {
|
||||||
this.buyer_public_key = buyer_public_key;
|
this.buyer_public_key = buyer_public_key;
|
||||||
} else {
|
} else {
|
||||||
this.errors.push("Invalid Buyer's public key.");
|
this.errors.push("Invalid Buyer's public key.");
|
||||||
}
|
}
|
||||||
if(buyer_key_signature.length > 0) {
|
if (buyer_key_signature.length > 0) {
|
||||||
this.buyer_key_signature = buyer_key_signature;
|
this.buyer_key_signature = buyer_key_signature;
|
||||||
} else {
|
} else {
|
||||||
this.errors.push("Invalid Buyer's key signature.");
|
this.errors.push("Invalid Buyer's key signature.");
|
||||||
}
|
}
|
||||||
if(order_validator_public_key.length > 0) {
|
if (order_validator_public_key.length > 0) {
|
||||||
this.order_validator_public_key = order_validator_public_key;
|
this.order_validator_public_key = order_validator_public_key;
|
||||||
} else {
|
} else {
|
||||||
this.errors.push("Invalid Validator's key signature.");
|
this.errors.push("Invalid Validator's key signature.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.errors.length > 0) {
|
if (this.errors.length > 0) {
|
||||||
return this.errors;
|
return this.errors;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
place_order(order_type, product, currency, buy_price, buyer_public_key, buyer_key_signature, order_validator_public_key) {
|
place_order(order_type, product, currency, buy_price, buyer_public_key, buyer_key_signature,
|
||||||
var is_valid_order = this.validate_order(order_type, product, currency, buy_price, buyer_public_key, buyer_key_signature, order_validator_public_key);
|
order_validator_public_key) {
|
||||||
if(is_valid_order === true) {
|
var is_valid_order = this.validate_order(order_type, product, currency, buy_price, buyer_public_key,
|
||||||
var orderRPC = new ninja.rpc();
|
buyer_key_signature, order_validator_public_key);
|
||||||
this.rpc_job = 'trade_'+this.order_type;
|
if (is_valid_order === true) {
|
||||||
return orderRPC.send_rpc(this.rpc_job, {"order_type":this.order_type, "product":this.product, "currency":this.currency, "buy_price":this.buy_price, "buyer_public_key":this.buyer_public_key, "buyer_key_signature":this.buyer_key_signature, "order_validator_public_key":this.order_validator_public_key});
|
var orderRPC = new localbitcoinplusplus.rpc();
|
||||||
} else if(is_valid_order == "object") {
|
this.rpc_job = 'trade_' + this.order_type;
|
||||||
|
return orderRPC.send_rpc(this.rpc_job, {
|
||||||
|
"order_type": this.order_type,
|
||||||
|
"product": this.product,
|
||||||
|
"currency": this.currency,
|
||||||
|
"buy_price": this.buy_price,
|
||||||
|
"buyer_public_key": this.buyer_public_key,
|
||||||
|
"buyer_key_signature": this.buyer_key_signature,
|
||||||
|
"order_validator_public_key": this.order_validator_public_key
|
||||||
|
});
|
||||||
|
} else if (is_valid_order == "object") {
|
||||||
var err;
|
var err;
|
||||||
for(err=0; err<is_valid_order.length; err++) {
|
for (err = 0; err < is_valid_order.length; err++) {
|
||||||
alert(is_valid_order[err]);
|
alert(is_valid_order[err]);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -7484,11 +7643,13 @@
|
|||||||
console.log("sell is called");
|
console.log("sell is called");
|
||||||
},
|
},
|
||||||
/*Parse Flo Blockchain comments*/
|
/*Parse Flo Blockchain comments*/
|
||||||
parse_flo_comments() {
|
parse_flo_comments(callback) {
|
||||||
if (this.floAddress == null) { return false; }
|
if (this.floAddress == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
var request = new XMLHttpRequest();
|
var request = new XMLHttpRequest();
|
||||||
|
|
||||||
request.open('GET', `https://livenet.flocha.in/api/txs/?address=${this.floAddress}`, true);
|
request.open('GET', `${localbitcoinplusplus.flocha}/api/txs/?address=${this.floAddress}`, true);
|
||||||
request.onload = function () {
|
request.onload = function () {
|
||||||
|
|
||||||
// Begin accessing JSON data here
|
// Begin accessing JSON data here
|
||||||
@ -7497,7 +7658,8 @@
|
|||||||
if (request.status >= 200 && request.status < 400) {
|
if (request.status >= 200 && request.status < 400) {
|
||||||
data.txs.forEach(tx => {
|
data.txs.forEach(tx => {
|
||||||
console.log(tx.floData);
|
console.log(tx.floData);
|
||||||
});
|
callback(tx.floData);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
console.log('error');
|
console.log('error');
|
||||||
}
|
}
|
||||||
@ -7507,9 +7669,8 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- JSON RPC Library Starts -->
|
||||||
<script language="javascript" type="text/javascript">
|
<script language="javascript" type="text/javascript">
|
||||||
/* JSON RPC Library Starts */
|
|
||||||
|
|
||||||
var JSON_RPC = {};
|
var JSON_RPC = {};
|
||||||
|
|
||||||
var id = 0,
|
var id = 0,
|
||||||
@ -7725,39 +7886,39 @@
|
|||||||
|
|
||||||
function onMessage(evt) {
|
function onMessage(evt) {
|
||||||
console.log(evt);
|
console.log(evt);
|
||||||
|
|
||||||
var response = evt.data;
|
var response = evt.data;
|
||||||
var res_pos = response.indexOf('{');
|
var res_pos = response.indexOf('{');
|
||||||
if (res_pos>=0) {
|
if (res_pos >= 0) {
|
||||||
var res = response.substr(res_pos);
|
var res = response.substr(res_pos);
|
||||||
try {
|
try {
|
||||||
var res_obj = JSON.parse(res);
|
var res_obj = JSON.parse(res);
|
||||||
console.log(res_obj);
|
console.log(res_obj);
|
||||||
|
|
||||||
if (typeof res_obj.method !== undefined) {
|
if (typeof res_obj.method !== undefined) {
|
||||||
var orderRPC = new ninja.rpc();
|
var orderRPC = new localbitcoinplusplus.rpc();
|
||||||
switch (res_obj.method) {
|
switch (res_obj.method) {
|
||||||
case "trade_buy":
|
case "trade_buy":
|
||||||
|
|
||||||
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
||||||
//orderRPC.parse_server_rpc_response(response_from_sever);
|
//orderRPC.parse_server_rpc_response(response_from_sever);
|
||||||
|
|
||||||
//doSend(response_from_sever); // send response to client
|
//doSend(response_from_sever); // send response to client
|
||||||
break;
|
break;
|
||||||
case "trade_sell":
|
case "trade_sell":
|
||||||
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
||||||
doSend(response_from_sever); // send response to client
|
doSend(response_from_sever); // send response to client
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data + '</span>');
|
writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data + '</span>');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7782,16 +7943,33 @@
|
|||||||
/* Websocket Code Ends Here*/
|
/* Websocket Code Ends Here*/
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var trade = document.createElement("button");
|
(function () {
|
||||||
trade.innerText = "Trade";
|
|
||||||
trade.onclick = function() {
|
var RM_WALLET = new localbitcoinplusplus.wallets;
|
||||||
var trade = new ninja.trade;
|
var RM_TRADE = new localbitcoinplusplus.trade;
|
||||||
var buytrade = trade.place_order("buy", "BTC", "INR", 10000.00, "buyer_public_key", "buyer_key_signature", "order_validator_public_key");
|
var RM_RPC = new localbitcoinplusplus.rpc;
|
||||||
doSend(buytrade);
|
|
||||||
//doSend(JSON.stringify(buytrade));
|
// Test: fetch flo comment
|
||||||
}
|
RM_TRADE.floAddress = RM_WALLET.rm_flo_addr;
|
||||||
document.getElementById("output").appendChild(trade);
|
var fetch_configs = RM_TRADE.parse_flo_comments(function (floData) {
|
||||||
|
console.log(floData);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test: Trade functionality
|
||||||
|
var trade_btn = document.createElement("button");
|
||||||
|
trade_btn.innerText = "Trade";
|
||||||
|
trade_btn.onclick = function () {
|
||||||
|
var buytrade = RM_TRADE.place_order("buy", "BTC", "INR", 10000.00, "buyer_public_key",
|
||||||
|
"buyer_key_signature", "order_validator_public_key");
|
||||||
|
doSend(buytrade);
|
||||||
|
}
|
||||||
|
document.getElementById("output").appendChild(trade_btn);
|
||||||
|
})()
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
Loading…
Reference in New Issue
Block a user