mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Merge branch 'master' of github.com:jedmccaleb/NewCoin into new_pathfinding
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
Critical protocol changes
|
||||
-------------------------
|
||||
|
||||
* date
|
||||
* The JSON field "metaData" changing to "meta".
|
||||
* RPC ledger will no longer take "ledger", use "ledger_hash" or "ledger_index".
|
||||
* "closedLedger" events:
|
||||
* "ledgerClose" events:
|
||||
** "hash" DEPRECATED: use "ledger_hash"
|
||||
** "seqNum" DEPRECATED: use "ledger_index"
|
||||
** "closeTime" DEPRECATED: use "close" or "close_human"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ripple-lib",
|
||||
"version": "0.7.3",
|
||||
"version": "0.7.4",
|
||||
"description": "Ripple JavaScript client library",
|
||||
|
||||
"files": [
|
||||
|
||||
@@ -1146,18 +1146,19 @@ Remote.prototype.request_ripple_balance = function (account, issuer, currency, c
|
||||
var balance = Amount.from_json(node.Balance);
|
||||
// accountHigh implies: for account: balance is negated, highLimit is the limit set by account.
|
||||
var accountHigh = UInt160.from_json(account).equals(highLimit.issuer());
|
||||
// The limit set by account.
|
||||
var accountLimit = (accountHigh ? highLimit : lowLimit).parse_issuer(account);
|
||||
// The limit set by issuer.
|
||||
var issuerLimit = (accountHigh ? lowLimit : highLimit).parse_issuer(issuer);
|
||||
var accountBalance = (accountHigh ? balance.negate() : balance).parse_issuer(account);
|
||||
var issuerBalance = (accountHigh ? balance : balance.negate()).parse_issuer(issuer);
|
||||
|
||||
request.emit('ripple_state', {
|
||||
'issuer_balance' : issuerBalance, // Balance with dst as issuer.
|
||||
'account_balance' : accountBalance, // Balance with account as issuer.
|
||||
'issuer_limit' : issuerLimit, // Limit set by issuer with src as issuer.
|
||||
'account_limit' : accountLimit // Limit set by account with dst as issuer.
|
||||
'account_balance' : ( accountHigh ? balance.negate() : balance).parse_issuer(account),
|
||||
'peer_balance' : (!accountHigh ? balance.negate() : balance).parse_issuer(issuer),
|
||||
|
||||
'account_limit' : ( accountHigh ? highLimit : lowLimit).parse_issuer(issuer),
|
||||
'peer_limit' : (!accountHigh ? highLimit : lowLimit).parse_issuer(account),
|
||||
|
||||
'account_quality_in' : ( accountHigh ? node.HighQualityIn : node.LowQualityIn),
|
||||
'peer_quality_in' : (!accountHigh ? node.HighQualityIn : node.LowQualityIn),
|
||||
|
||||
'account_quality_out' : ( accountHigh ? node.HighQualityOut : node.LowQualityOut),
|
||||
'peer_quality_out' : (!accountHigh ? node.HighQualityOut : node.LowQualityOut),
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
var async = require("async");
|
||||
var buster = require("buster");
|
||||
var async = require("async");
|
||||
var buster = require("buster");
|
||||
|
||||
var Amount = require("../src/js/amount.js").Amount;
|
||||
var Remote = require("../src/js/remote.js").Remote;
|
||||
var Server = require("./server.js").Server;
|
||||
var Amount = require("../src/js/amount.js").Amount;
|
||||
var Remote = require("../src/js/remote.js").Remote;
|
||||
var Transaction = require("../src/js/transaction.js").Transaction;
|
||||
var Server = require("./server.js").Server;
|
||||
|
||||
var testutils = require("./testutils.js");
|
||||
|
||||
@@ -495,7 +496,7 @@ buster.testCase("More Path finding", {
|
||||
self.remote.request_ripple_path_find("alice", "bob", "5/USD/bob",
|
||||
[ { 'currency' : "USD" } ])
|
||||
.on('success', function (m) {
|
||||
console.log("proposed: %s", JSON.stringify(m));
|
||||
// console.log("proposed: %s", JSON.stringify(m));
|
||||
|
||||
// 1 alternative.
|
||||
// buster.assert.equals(1, m.alternatives.length)
|
||||
@@ -1138,12 +1139,12 @@ buster.testCase("Via offers", {
|
||||
});
|
||||
|
||||
buster.testCase("Indirect paths", {
|
||||
// 'setUp' : testutils.build_setup(),
|
||||
'setUp' : testutils.build_setup({ verbose: true }),
|
||||
'setUp' : testutils.build_setup(),
|
||||
// 'setUp' : testutils.build_setup({ verbose: true }),
|
||||
// 'setUp' : testutils.build_setup({ verbose: true, no_server: true }),
|
||||
'tearDown' : testutils.build_teardown(),
|
||||
|
||||
"//path find" :
|
||||
"path find" :
|
||||
function (done) {
|
||||
var self = this;
|
||||
|
||||
@@ -1169,7 +1170,7 @@ buster.testCase("Indirect paths", {
|
||||
self.remote.request_ripple_path_find("alice", "carol", "5/USD/carol",
|
||||
[ { 'currency' : "USD" } ])
|
||||
.on('success', function (m) {
|
||||
console.log("proposed: %s", JSON.stringify(m));
|
||||
// console.log("proposed: %s", JSON.stringify(m));
|
||||
|
||||
// 1 alternative.
|
||||
buster.assert.equals(1, m.alternatives.length)
|
||||
@@ -1186,4 +1187,91 @@ buster.testCase("Indirect paths", {
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
buster.testCase("Quality paths", {
|
||||
// 'setUp' : testutils.build_setup(),
|
||||
'setUp' : testutils.build_setup({ verbose: true }),
|
||||
// 'setUp' : testutils.build_setup({ verbose: true, no_server: true }),
|
||||
'tearDown' : testutils.build_teardown(),
|
||||
|
||||
"quality set and test" :
|
||||
function (done) {
|
||||
var self = this;
|
||||
|
||||
async.waterfall([
|
||||
function (callback) {
|
||||
self.what = "Create accounts.";
|
||||
|
||||
testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob"], callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Set credit limits extended.";
|
||||
|
||||
testutils.credit_limits(self.remote,
|
||||
{
|
||||
"bob" : "1000/USD/alice:2000,1400000000",
|
||||
},
|
||||
callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Verify credit limits extended.";
|
||||
|
||||
testutils.verify_limit(self.remote, "bob", "1000/USD/alice:2000,1400000000", callback);
|
||||
},
|
||||
], function (error) {
|
||||
buster.refute(error, self.what);
|
||||
done();
|
||||
});
|
||||
},
|
||||
|
||||
"// quality payment (BROKEN DUE TO ROUNDING)" :
|
||||
function (done) {
|
||||
var self = this;
|
||||
|
||||
async.waterfall([
|
||||
function (callback) {
|
||||
self.what = "Create accounts.";
|
||||
|
||||
testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob"], callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Set credit limits extended.";
|
||||
|
||||
testutils.credit_limits(self.remote,
|
||||
{
|
||||
"bob" : "1000/USD/alice:" + .9*1e9 + "," + 1e9,
|
||||
},
|
||||
callback);
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Payment with auto path";
|
||||
|
||||
self.remote.transaction()
|
||||
.payment('alice', 'bob', "100/USD/bob")
|
||||
.send_max("120/USD/alice")
|
||||
// .set_flags('PartialPayment')
|
||||
// .build_path(true)
|
||||
.once('proposed', function (m) {
|
||||
// console.log("proposed: %s", JSON.stringify(m));
|
||||
callback(m.result !== 'tesSUCCESS');
|
||||
})
|
||||
.submit();
|
||||
},
|
||||
function (callback) {
|
||||
self.what = "Display ledger";
|
||||
|
||||
self.remote.request_ledger('current', { accounts: true, expand: true })
|
||||
.on('success', function (m) {
|
||||
console.log("Ledger: %s", JSON.stringify(m, undefined, 2));
|
||||
|
||||
callback();
|
||||
})
|
||||
.request();
|
||||
},
|
||||
], function (error) {
|
||||
buster.refute(error, self.what);
|
||||
done();
|
||||
});
|
||||
},
|
||||
});
|
||||
// vim:sw=2:sts=2:ts=8:et
|
||||
|
||||
@@ -152,12 +152,12 @@ buster.testCase("Sending", {
|
||||
// console.log("BALANCE: %s", JSON.stringify(m));
|
||||
// console.log("account_balance: %s", m.account_balance.to_text_full());
|
||||
// console.log("account_limit: %s", m.account_limit.to_text_full());
|
||||
// console.log("issuer_balance: %s", m.issuer_balance.to_text_full());
|
||||
// console.log("issuer_limit: %s", m.issuer_limit.to_text_full());
|
||||
// console.log("peer_balance: %s", m.peer_balance.to_text_full());
|
||||
// console.log("peer_limit: %s", m.peer_limit.to_text_full());
|
||||
buster.assert(m.account_balance.equals("0/USD/alice"));
|
||||
buster.assert(m.account_limit.equals("800/USD/alice"));
|
||||
buster.assert(m.issuer_balance.equals("0/USD/mtgox"));
|
||||
buster.assert(m.issuer_limit.equals("0/USD/mtgox"));
|
||||
buster.assert(m.account_limit.equals("800/USD/mtgox"));
|
||||
buster.assert(m.peer_balance.equals("0/USD/mtgox"));
|
||||
buster.assert(m.peer_limit.equals("0/USD/alice"));
|
||||
|
||||
callback();
|
||||
})
|
||||
@@ -172,9 +172,9 @@ buster.testCase("Sending", {
|
||||
self.remote.request_ripple_balance("alice", "mtgox", "USD", 'CURRENT')
|
||||
.on('ripple_state', function (m) {
|
||||
buster.assert(m.account_balance.equals("0/USD/alice"));
|
||||
buster.assert(m.account_limit.equals("700/USD/alice"));
|
||||
buster.assert(m.issuer_balance.equals("0/USD/mtgox"));
|
||||
buster.assert(m.issuer_limit.equals("0/USD/mtgox"));
|
||||
buster.assert(m.account_limit.equals("700/USD/mtgox"));
|
||||
buster.assert(m.peer_balance.equals("0/USD/mtgox"));
|
||||
buster.assert(m.peer_limit.equals("0/USD/alice"));
|
||||
|
||||
callback();
|
||||
})
|
||||
@@ -215,8 +215,8 @@ buster.testCase("Sending", {
|
||||
// Used to keep lines.
|
||||
// buster.assert(m.account_balance.equals("0/USD/alice"));
|
||||
// buster.assert(m.account_limit.equals("0/USD/alice"));
|
||||
// buster.assert(m.issuer_balance.equals("0/USD/mtgox"));
|
||||
// buster.assert(m.issuer_limit.equals("0/USD/mtgox"));
|
||||
// buster.assert(m.peer_balance.equals("0/USD/mtgox"));
|
||||
// buster.assert(m.peer_limit.equals("0/USD/mtgox"));
|
||||
|
||||
buster.assert(false);
|
||||
})
|
||||
@@ -248,9 +248,9 @@ buster.testCase("Sending", {
|
||||
// console.log("proposed: %s", JSON.stringify(m));
|
||||
|
||||
buster.assert(m.account_balance.equals("0/USD/alice"));
|
||||
buster.assert(m.account_limit.equals("600/USD/alice"));
|
||||
buster.assert(m.issuer_balance.equals("0/USD/bob"));
|
||||
buster.assert(m.issuer_limit.equals("500/USD/bob"));
|
||||
buster.assert(m.account_limit.equals("600/USD/bob"));
|
||||
buster.assert(m.peer_balance.equals("0/USD/bob"));
|
||||
buster.assert(m.peer_limit.equals("500/USD/alice"));
|
||||
|
||||
callback();
|
||||
})
|
||||
@@ -262,9 +262,9 @@ buster.testCase("Sending", {
|
||||
self.remote.request_ripple_balance("bob", "alice", "USD", 'CURRENT')
|
||||
.on('ripple_state', function (m) {
|
||||
buster.assert(m.account_balance.equals("0/USD/bob"));
|
||||
buster.assert(m.account_limit.equals("500/USD/bob"));
|
||||
buster.assert(m.issuer_balance.equals("0/USD/alice"));
|
||||
buster.assert(m.issuer_limit.equals("600/USD/alice"));
|
||||
buster.assert(m.account_limit.equals("500/USD/alice"));
|
||||
buster.assert(m.peer_balance.equals("0/USD/alice"));
|
||||
buster.assert(m.peer_limit.equals("600/USD/bob"));
|
||||
|
||||
callback();
|
||||
})
|
||||
@@ -325,7 +325,7 @@ buster.testCase("Sending future", {
|
||||
self.remote.request_ripple_balance("alice", "bob", "USD", 'CURRENT')
|
||||
.once('ripple_state', function (m) {
|
||||
buster.assert(m.account_balance.equals("-24/USD/alice"));
|
||||
buster.assert(m.issuer_balance.equals("24/USD/bob"));
|
||||
buster.assert(m.peer_balance.equals("24/USD/bob"));
|
||||
|
||||
callback();
|
||||
})
|
||||
@@ -351,7 +351,7 @@ buster.testCase("Sending future", {
|
||||
self.remote.request_ripple_balance("bob", "alice", "USD", 'CURRENT')
|
||||
.once('ripple_state', function (m) {
|
||||
buster.assert(m.account_balance.equals("57/USD/bob"));
|
||||
buster.assert(m.issuer_balance.equals("-57/USD/alice"));
|
||||
buster.assert(m.peer_balance.equals("-57/USD/alice"));
|
||||
|
||||
callback();
|
||||
})
|
||||
@@ -473,8 +473,8 @@ buster.testCase("Sending future", {
|
||||
// .once('ripple_state', function (m) {
|
||||
// console.log("account_balance: %s", m.account_balance.to_text_full());
|
||||
// console.log("account_limit: %s", m.account_limit.to_text_full());
|
||||
// console.log("issuer_balance: %s", m.issuer_balance.to_text_full());
|
||||
// console.log("issuer_limit: %s", m.issuer_limit.to_text_full());
|
||||
// console.log("peer_balance: %s", m.peer_balance.to_text_full());
|
||||
// console.log("peer_limit: %s", m.peer_limit.to_text_full());
|
||||
//
|
||||
// buster.assert(m.account_balance.equals("600/USD/alice"));
|
||||
//
|
||||
|
||||
@@ -171,19 +171,68 @@ var create_accounts = function (remote, src, amount, accounts, callback) {
|
||||
var credit_limit = function (remote, src, amount, callback) {
|
||||
assert(4 === arguments.length);
|
||||
|
||||
remote.transaction()
|
||||
.ripple_line_set(src, amount)
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: %s", JSON.stringify(m));
|
||||
var _m = amount.match(/^(\d+\/...\/[^\:]+)(?::(\d+)(?:,(\d+))?)?$/);
|
||||
if (!_m) {
|
||||
console.log("credit_limit: parse error: %s", amount);
|
||||
|
||||
callback(m.result != 'tesSUCCESS');
|
||||
})
|
||||
.on('error', function (m) {
|
||||
// console.log("error: %s", JSON.stringify(m));
|
||||
callback('parse_error');
|
||||
}
|
||||
else
|
||||
{
|
||||
// console.log("credit_limit: parsed: %s", JSON.stringify(_m, undefined, 2));
|
||||
var _account_limit = _m[1];
|
||||
var _quality_in = _m[2];
|
||||
var _quality_out = _m[3];
|
||||
|
||||
callback(m);
|
||||
})
|
||||
.submit();
|
||||
remote.transaction()
|
||||
.ripple_line_set(src, _account_limit, _quality_in, _quality_out)
|
||||
.on('proposed', function (m) {
|
||||
// console.log("proposed: %s", JSON.stringify(m));
|
||||
|
||||
callback(m.result != 'tesSUCCESS');
|
||||
})
|
||||
.on('error', function (m) {
|
||||
// console.log("error: %s", JSON.stringify(m));
|
||||
|
||||
callback(m);
|
||||
})
|
||||
.submit();
|
||||
}
|
||||
};
|
||||
|
||||
var verify_limit = function (remote, src, amount, callback) {
|
||||
assert(4 === arguments.length);
|
||||
|
||||
var _m = amount.match(/^(\d+\/...\/[^\:]+)(?::(\d+)(?:,(\d+))?)?$/);
|
||||
if (!_m) {
|
||||
// console.log("credit_limit: parse error: %s", amount);
|
||||
|
||||
callback('parse_error');
|
||||
}
|
||||
else
|
||||
{
|
||||
// console.log("verify_limit: parsed: %s", JSON.stringify(_m, undefined, 2));
|
||||
var _account_limit = _m[1];
|
||||
var _quality_in = _m[2];
|
||||
var _quality_out = _m[3];
|
||||
|
||||
var _limit = Amount.from_json(_account_limit);
|
||||
|
||||
remote.request_ripple_balance(src, _limit.issuer().to_json(), _limit.currency().to_json(), 'CURRENT')
|
||||
.once('ripple_state', function (m) {
|
||||
buster.assert(m.account_limit.equals(_limit));
|
||||
buster.assert('undefined' === _quality_in || m.account_quality_in == _quality_in);
|
||||
buster.assert('undefined' === _quality_out || m.account_quality_out == _quality_out);
|
||||
|
||||
callback();
|
||||
})
|
||||
.on('error', function (m) {
|
||||
// console.log("error: %s", JSON.stringify(m));
|
||||
|
||||
callback(m);
|
||||
})
|
||||
.request();
|
||||
}
|
||||
};
|
||||
|
||||
var credit_limits = function (remote, balances, callback) {
|
||||
@@ -424,6 +473,7 @@ exports.payments = payments;
|
||||
exports.transfer_rate = transfer_rate;
|
||||
exports.verify_balance = verify_balance;
|
||||
exports.verify_balances = verify_balances;
|
||||
exports.verify_limit = verify_limit;
|
||||
exports.verify_offer = verify_offer;
|
||||
exports.verify_offer_not_found = verify_offer_not_found;
|
||||
exports.verify_owner_count = verify_owner_count;
|
||||
|
||||
Reference in New Issue
Block a user