major fixes to latest wallet calls.
This commit is contained in:
parent
e3ae084e6b
commit
0d9d4608f8
|
@ -1359,23 +1359,10 @@ NAN_METHOD(WalletNewAddress) {
|
||||||
|
|
||||||
pwalletMain->SetAddressBook(keyID, strAccount, "receive");
|
pwalletMain->SetAddressBook(keyID, strAccount, "receive");
|
||||||
|
|
||||||
NanReturnValue(NanNew<String>(CBitcoinAddress(keyID).ToString()).c_str());
|
NanReturnValue(NanNew<String>(CBitcoinAddress(keyID).ToString().c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
NAN_METHOD(WalletGetAccountAddress) {
|
CBitcoinAddress GetAccountAddress(std::string strAccount, bool bForceNew=false) {
|
||||||
NanScope();
|
|
||||||
|
|
||||||
if (args.Length() < 1 || !args[0]->IsObject()) {
|
|
||||||
return NanThrowError(
|
|
||||||
"Usage: bitcoindjs.walletGetAccountAddress(options)");
|
|
||||||
}
|
|
||||||
|
|
||||||
Local<Object> options = Local<Object>::Cast(args[0]);
|
|
||||||
String::Utf8Value name_(options->Get(NanNew<String>("name"))->ToString());
|
|
||||||
std::string strAccount = std::string(*name_);
|
|
||||||
|
|
||||||
bool bForceNew = options->Get(NanNew<String>("new"))->ToBoolean();
|
|
||||||
|
|
||||||
CWalletDB walletdb(pwalletMain->strWalletFile);
|
CWalletDB walletdb(pwalletMain->strWalletFile);
|
||||||
|
|
||||||
CAccount account;
|
CAccount account;
|
||||||
|
@ -1402,13 +1389,34 @@ NAN_METHOD(WalletGetAccountAddress) {
|
||||||
// Generate a new key
|
// Generate a new key
|
||||||
if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) {
|
if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) {
|
||||||
if (!pwalletMain->GetKeyFromPool(account.vchPubKey)) {
|
if (!pwalletMain->GetKeyFromPool(account.vchPubKey)) {
|
||||||
return NanThrowError("Error: Keypool ran out, please call keypoolrefill first");
|
NanThrowError("Keypool ran out, please call keypoolrefill first");
|
||||||
|
//CTxDestination dest = CNoDestination();
|
||||||
|
CBitcoinAddress addr;
|
||||||
|
//addr.Set(dest);
|
||||||
|
return addr;
|
||||||
}
|
}
|
||||||
pwalletMain->SetAddressBook(account.vchPubKey.GetID(), strAccount, "receive");
|
pwalletMain->SetAddressBook(account.vchPubKey.GetID(), strAccount, "receive");
|
||||||
walletdb.WriteAccount(strAccount, account);
|
walletdb.WriteAccount(strAccount, account);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NanReturnValue(NanNew<String>(CBitcoinAddress(account.vchPubKey.GetID())).c_str());
|
return CBitcoinAddress(account.vchPubKey.GetID());
|
||||||
|
}
|
||||||
|
|
||||||
|
NAN_METHOD(WalletGetAccountAddress) {
|
||||||
|
NanScope();
|
||||||
|
|
||||||
|
if (args.Length() < 1 || !args[0]->IsObject()) {
|
||||||
|
return NanThrowError(
|
||||||
|
"Usage: bitcoindjs.walletGetAccountAddress(options)");
|
||||||
|
}
|
||||||
|
|
||||||
|
Local<Object> options = Local<Object>::Cast(args[0]);
|
||||||
|
String::Utf8Value account_(options->Get(NanNew<String>("account"))->ToString());
|
||||||
|
std::string strAccount = std::string(*account_);
|
||||||
|
|
||||||
|
std::string ret = GetAccountAddress(strAccount).ToString();
|
||||||
|
|
||||||
|
NanReturnValue(NanNew<String>(ret.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
NAN_METHOD(WalletSetAccount) {
|
NAN_METHOD(WalletSetAccount) {
|
||||||
|
@ -1694,24 +1702,26 @@ NAN_METHOD(WalletCreateMultiSigAddress) {
|
||||||
Local<Object> options = Local<Object>::Cast(args[0]);
|
Local<Object> options = Local<Object>::Cast(args[0]);
|
||||||
|
|
||||||
int nRequired = options->Get(NanNew<String>("nRequired"))->IntegerValue();
|
int nRequired = options->Get(NanNew<String>("nRequired"))->IntegerValue();
|
||||||
Local<Array> keys = options->Get(NanNew<String>("keys"));
|
Local<Array> keys = Local<Array>::Cast(options->Get(NanNew<String>("keys")));
|
||||||
|
|
||||||
// Gather public keys
|
// Gather public keys
|
||||||
if (nRequired < 1) {
|
if (nRequired < 1) {
|
||||||
return NanThrowError(
|
return NanThrowError(
|
||||||
"a multisignature address must require at least one key to redeem");
|
"a multisignature address must require at least one key to redeem");
|
||||||
}
|
}
|
||||||
if ((int)keys.Length() < nRequired) {
|
if ((int)keys->Length() < nRequired) {
|
||||||
return NanThrowError(
|
char s[150] = {0};
|
||||||
strprintf("not enough keys supplied "
|
snprintf(s, sizeof(s),
|
||||||
"(got %"PRIszu" keys, but need at least %d to redeem)",
|
"not enough keys supplied (got %"PRIszu" keys, but need at least %d to redeem)",
|
||||||
keys.Length(), nRequired));
|
keys->Length(), nRequired);
|
||||||
|
NanThrowError(s);
|
||||||
|
NanReturnValue(Undefined());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CPubKey> pubkeys;
|
std::vector<CPubKey> pubkeys;
|
||||||
pubkeys.resize(keys.Length());
|
pubkeys.resize(keys->Length());
|
||||||
|
|
||||||
for (unsigned int i = 0; i < keys.Length(); i++) {
|
for (unsigned int i = 0; i < keys->Length(); i++) {
|
||||||
String::Utf8Value key_(keys->Get(i)->ToString());
|
String::Utf8Value key_(keys->Get(i)->ToString());
|
||||||
const std::string& ks = std::string(*key_);
|
const std::string& ks = std::string(*key_);
|
||||||
|
|
||||||
|
@ -1721,14 +1731,14 @@ NAN_METHOD(WalletCreateMultiSigAddress) {
|
||||||
if (pwalletMain && address.IsValid()) {
|
if (pwalletMain && address.IsValid()) {
|
||||||
CKeyID keyID;
|
CKeyID keyID;
|
||||||
if (!address.GetKeyID(keyID)) {
|
if (!address.GetKeyID(keyID)) {
|
||||||
return NanThrowError(strprintf("%s does not refer to a key", ks));
|
return NanThrowError((ks + std::string(" does not refer to a key")).c_str());
|
||||||
}
|
}
|
||||||
CPubKey vchPubKey;
|
CPubKey vchPubKey;
|
||||||
if (!pwalletMain->GetPubKey(keyID, vchPubKey)) {
|
if (!pwalletMain->GetPubKey(keyID, vchPubKey)) {
|
||||||
return NanThrowError(strprintf("no full public key for address %s", ks));
|
return NanThrowError((std::string("no full public key for address ") + ks).c_str());
|
||||||
}
|
}
|
||||||
if (!vchPubKey.IsFullyValid()) {
|
if (!vchPubKey.IsFullyValid()) {
|
||||||
return NanThrowError("Invalid public key: " + ks);
|
return NanThrowError((std::string("Invalid public key: ") + ks).c_str());
|
||||||
}
|
}
|
||||||
pubkeys[i] = vchPubKey;
|
pubkeys[i] = vchPubKey;
|
||||||
} else
|
} else
|
||||||
|
@ -1737,11 +1747,11 @@ NAN_METHOD(WalletCreateMultiSigAddress) {
|
||||||
if (IsHex(ks)) {
|
if (IsHex(ks)) {
|
||||||
CPubKey vchPubKey(ParseHex(ks));
|
CPubKey vchPubKey(ParseHex(ks));
|
||||||
if (!vchPubKey.IsFullyValid()) {
|
if (!vchPubKey.IsFullyValid()) {
|
||||||
return NanThrowError("Invalid public key: " + ks);
|
return NanThrowError((std::string("Invalid public key: ") + ks).c_str());
|
||||||
}
|
}
|
||||||
pubkeys[i] = vchPubKey;
|
pubkeys[i] = vchPubKey;
|
||||||
} else {
|
} else {
|
||||||
return NanThrowError("Invalid public key: " + ks);
|
return NanThrowError((std::string("Invalid public key: ") + ks).c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CScript inner;
|
CScript inner;
|
||||||
|
@ -1752,8 +1762,8 @@ NAN_METHOD(WalletCreateMultiSigAddress) {
|
||||||
CBitcoinAddress address(innerID);
|
CBitcoinAddress address(innerID);
|
||||||
|
|
||||||
Local<Object> result = NanNew<Object>();
|
Local<Object> result = NanNew<Object>();
|
||||||
result->Set(NanNew<String>("address"), address.ToString());
|
result->Set(NanNew<String>("address"), NanNew<String>(address.ToString()));
|
||||||
result->Set(NanNew<String>("redeemScript"), HexStr(inner.begin(), inner.end()));
|
result->Set(NanNew<String>("redeemScript"), NanNew<String>(HexStr(inner.begin(), inner.end())));
|
||||||
|
|
||||||
NanReturnValue(result);
|
NanReturnValue(result);
|
||||||
}
|
}
|
||||||
|
@ -1956,7 +1966,7 @@ NAN_METHOD(WalletListTransactions) {
|
||||||
"Usage: bitcoindjs.walletListTransactions(options)");
|
"Usage: bitcoindjs.walletListTransactions(options)");
|
||||||
}
|
}
|
||||||
|
|
||||||
Local<Object> options = Local<Object>::Cast(args[0]);
|
// Local<Object> options = Local<Object>::Cast(args[0]);
|
||||||
|
|
||||||
NanReturnValue(Undefined());
|
NanReturnValue(Undefined());
|
||||||
}
|
}
|
||||||
|
@ -2065,7 +2075,7 @@ NAN_METHOD(WalletGetTransaction) {
|
||||||
"Usage: bitcoindjs.walletGetTransaction(options)");
|
"Usage: bitcoindjs.walletGetTransaction(options)");
|
||||||
}
|
}
|
||||||
|
|
||||||
Local<Object> options = Local<Object>::Cast(args[0]);
|
// Local<Object> options = Local<Object>::Cast(args[0]);
|
||||||
|
|
||||||
NanReturnValue(Undefined());
|
NanReturnValue(Undefined());
|
||||||
}
|
}
|
||||||
|
@ -2175,7 +2185,7 @@ NAN_METHOD(WalletLock) {
|
||||||
"Usage: bitcoindjs.walletLock(options)");
|
"Usage: bitcoindjs.walletLock(options)");
|
||||||
}
|
}
|
||||||
|
|
||||||
Local<Object> options = Local<Object>::Cast(args[0]);
|
// Local<Object> options = Local<Object>::Cast(args[0]);
|
||||||
|
|
||||||
if (!pwalletMain->IsCrypted()) {
|
if (!pwalletMain->IsCrypted()) {
|
||||||
return NanThrowError("Error: running with an unencrypted wallet, but walletlock was called.");
|
return NanThrowError("Error: running with an unencrypted wallet, but walletlock was called.");
|
||||||
|
@ -2572,8 +2582,8 @@ jsblock_to_cblock(const Local<Object> obj, CBlock& block, CBlockIndex* blockinde
|
||||||
block->hashMerkleRoot = obj->Get(NanNew<String>("merkleroot"))->ToString();
|
block->hashMerkleRoot = obj->Get(NanNew<String>("merkleroot"))->ToString();
|
||||||
block->vMerkleTree = obj->Get(NanNew<String>("merkletree"))->ToString();
|
block->vMerkleTree = obj->Get(NanNew<String>("merkletree"))->ToString();
|
||||||
|
|
||||||
Local<Array> txs = obj->Get("tx");
|
Local<Array> txs = Local<Array>::Cast(obj->Get("tx"));
|
||||||
for (int ti = 0; ti < txs.Length(); ti++) {
|
for (int ti = 0; ti < txs->Length(); ti++) {
|
||||||
Local<Object> entry = txs->Get(ti);
|
Local<Object> entry = txs->Get(ti);
|
||||||
CTransaction tx;
|
CTransaction tx;
|
||||||
|
|
||||||
|
@ -2587,8 +2597,8 @@ jsblock_to_cblock(const Local<Object> obj, CBlock& block, CBlockIndex* blockinde
|
||||||
tx.nVersion = entry->Get(NanNew<String>("version"))->IntegerValue();
|
tx.nVersion = entry->Get(NanNew<String>("version"))->IntegerValue();
|
||||||
tx.nLockTime = entry->Get(NanNew<String>("locktime"))->IntegerValue();
|
tx.nLockTime = entry->Get(NanNew<String>("locktime"))->IntegerValue();
|
||||||
|
|
||||||
Local<Array> vin = entry->Get("vin");
|
Local<Array> vin = Local<Array>::Cast(entry->Get("vin"));
|
||||||
for (int vi = 0; vi < vin.Length(); vi++) {
|
for (int vi = 0; vi < vin->Length(); vi++) {
|
||||||
CTxIn txin;
|
CTxIn txin;
|
||||||
Local<Object> in = vin->Get(vi);
|
Local<Object> in = vin->Get(vi);
|
||||||
if (in->Get(NanNew<String>("coinbase"))->IsString()) {
|
if (in->Get(NanNew<String>("coinbase"))->IsString()) {
|
||||||
|
@ -2603,8 +2613,8 @@ jsblock_to_cblock(const Local<Object> obj, CBlock& block, CBlockIndex* blockinde
|
||||||
(boost::int64_t)txin.nSequence = in->Get(NanNew<String>("sequence"))->IntegerValue();
|
(boost::int64_t)txin.nSequence = in->Get(NanNew<String>("sequence"))->IntegerValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
Local<Array> vout = entry->Get("vout");
|
Local<Array> vout = Local<Array>::Cast(entry->Get("vout"));
|
||||||
for (unsigned int vo = 0; vo < vout.Length(); vo++) {
|
for (unsigned int vo = 0; vo < vout->Length(); vo++) {
|
||||||
const CTxOut txout;
|
const CTxOut txout;
|
||||||
Local<Object> out = vout->Get(vo);
|
Local<Object> out = vout->Get(vo);
|
||||||
|
|
||||||
|
@ -2629,8 +2639,8 @@ jsblock_to_cblock(const Local<Object> obj, CBlock& block, CBlockIndex* blockinde
|
||||||
} else {
|
} else {
|
||||||
nRequired = out->Set(NanNew<String>("reqSigs"))->IntegerValue();
|
nRequired = out->Set(NanNew<String>("reqSigs"))->IntegerValue();
|
||||||
GetTxnOutputType(type) = out->Set(NanNew<String>("type"))->ToString();
|
GetTxnOutputType(type) = out->Set(NanNew<String>("type"))->ToString();
|
||||||
Local<Array> a = out->Get("addresses");
|
Local<Array> a = Local<Array>::Cast(out->Get("addresses"));
|
||||||
for (int ai = 0; ai < a.Length(); ai++) {
|
for (int ai = 0; ai < a->Length(); ai++) {
|
||||||
CTxDestination addr;
|
CTxDestination addr;
|
||||||
CBitcoinAddress(addr).ToString() = a->Get(ai)->ToString();
|
CBitcoinAddress(addr).ToString() = a->Get(ai)->ToString();
|
||||||
}
|
}
|
||||||
|
@ -2676,8 +2686,8 @@ jstx_to_ctx(const Local<Object> entry, CTransaction& tx, uint256 hashBlock) {
|
||||||
tx.nVersion = entry->Get(NanNew<String>("version"))->IntegerValue();
|
tx.nVersion = entry->Get(NanNew<String>("version"))->IntegerValue();
|
||||||
tx.nLockTime = entry->Get(NanNew<String>("locktime"))->IntegerValue();
|
tx.nLockTime = entry->Get(NanNew<String>("locktime"))->IntegerValue();
|
||||||
|
|
||||||
Local<Array> vin = entry->Get("vin");
|
Local<Array> vin = Local<Array>::Cast(entry->Get("vin"));
|
||||||
for (int vi = 0; vi < vin.Length(); vi++) {
|
for (int vi = 0; vi < vin->Length(); vi++) {
|
||||||
const CTxIn txin;
|
const CTxIn txin;
|
||||||
Local<Object> in = vin->Get(vi);
|
Local<Object> in = vin->Get(vi);
|
||||||
if (in->Get(NanNew<String>("coinbase")->IsString()) {
|
if (in->Get(NanNew<String>("coinbase")->IsString()) {
|
||||||
|
@ -2692,8 +2702,8 @@ jstx_to_ctx(const Local<Object> entry, CTransaction& tx, uint256 hashBlock) {
|
||||||
(boost::int64_t)txin.nSequence = in->Get(NanNew<String>("sequence"))->IntegerValue();
|
(boost::int64_t)txin.nSequence = in->Get(NanNew<String>("sequence"))->IntegerValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
Local<Array> vout = entry->Get("vout");
|
Local<Array> vout = Local<Array>::Cast(entry->Get("vout"));
|
||||||
for (unsigned int vo = 0; vo < vout.Length(); vo++) {
|
for (unsigned int vo = 0; vo < vout->Length(); vo++) {
|
||||||
CTxOut txout;
|
CTxOut txout;
|
||||||
Local<Object> out = vout->Get(vo);
|
Local<Object> out = vout->Get(vo);
|
||||||
txout.nValue = out->Get(NanNew<String>("value"))->IntegerValue();
|
txout.nValue = out->Get(NanNew<String>("value"))->IntegerValue();
|
||||||
|
@ -2714,8 +2724,8 @@ jstx_to_ctx(const Local<Object> entry, CTransaction& tx, uint256 hashBlock) {
|
||||||
} else {
|
} else {
|
||||||
nRequired = out->Get(NanNew<String>("reqSigs"))->IntegerValue();
|
nRequired = out->Get(NanNew<String>("reqSigs"))->IntegerValue();
|
||||||
GetTxnOutputType(type) = out->Get(NanNew<String>("type"))->ToString();
|
GetTxnOutputType(type) = out->Get(NanNew<String>("type"))->ToString();
|
||||||
Local<Array> a = out->Get("addresses");
|
Local<Array> a = Local<Array>::Cast(out->Get("addresses"));
|
||||||
for (int ai = 0; ai < a.Length(); ai++) {
|
for (int ai = 0; ai < a->Length(); ai++) {
|
||||||
CTxDestination addr;
|
CTxDestination addr;
|
||||||
CBitcoinAddress(addr).ToString() = a->get(ai)->ToString();
|
CBitcoinAddress(addr).ToString() = a->get(ai)->ToString();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue