There's no public Obelisk server, and we mostly develop against mainnet
so some things may not work (but generally they should).
However if you want to maintain a testnet server, we can have it on the
list of public servers.
On 09/12/13 05:38, Chang Lan wrote:
> Ah I see. I switched to a public mainnet obelisk server and the error
> disappeared. I was wondering if there is any issue with the testnet
> support (I have to use testnet for the project I am doing). Is there any
> public obelisk server for testnet? Then I can test if it’s my obelisk
> server’s problem or not.
>
> Best,
> Chang
>
> On Sunday, December 8, 2013 at 8:34 PM, Amir Taaki wrote:
>
>> Firstly that error should disappear if you use the git version of sx.
>> The Obelisk server format was changed recently and sx was not updated
>> (now fixed in git).
>>
>> The public key in that transaction (which starts with 03, not 04) is a
>> compressed public key. Both public keys are valid.
>>
>> Have you tried creating a transaction on Bitcoin mainnet?
>>
>> Were you successful with this tutorial on testnet?
>> http://sx.dyne.org/offlinetx.html
>> If not, then try mainnet.
>>
>> Then if you are successful with that tutorial, try constructing the same
>> transaction as your code using only command line tools.
>>
>> If that works, then try your code (without signing). Is it the same
>> transaction as when you used the command line tools?
>>
>> Try signing the transaction using command line tools. Note: the
>> script_code which you sign for the inputs should be the address for the
>> previous output of that input (which you are doing correctly in your
>> code by getting the address of your key).
>>
>> If you get the command line signing working then it should be easy to
>> identify the problem in your code. If you can't get the command line
>> signing working, then try performing the entire steps for normal mainnet
>> (not testnet) transactions.
>>
>> Use this to push non standard transactions to the blockchain instead of
>> normal broadcast to get around the bitcoind relay rules:
>>
>> http://eligius.st/~wizkid057/newstats/pushtxn.php
>>
>> On 09/12/13 02:26, Chang Lan wrote:
>>> Same result when I tried with smaller amount of testcoins.
>>>
>>> I noticed that the input script might wrong, but I couldn't use validtx,
>>> since I always got "terminate called after throwing an instance of
>>> 'libbitcoin::end_of_stream’”.
>>>
>>> For example, for this transaction:
>>> 010000000188fd0fc89dcd3f405c151ca59e97995cf85749b7ab600cf52b62bcf83405d915010000008b4830450220408bd8359dfe03a55f881f99b25a28cc691ccb4e29c825947e835c4a03f9bda20221008000ba23c20d19225a3e6f4f7351b0fbb9f7fc2bcb110605653d36ea8ac12a34014104b6d4cb502f6b016e310293dfe16336543f69d0b9afbf1f65f8eb7210753e925ef2e72af93ddf9ab626251a589246107a7524faa00dfc07bc41026c082b07714fffffffff020a0000000000000087524104b6d4cb502f6b016e310293dfe16336543f69d0b9afbf1f65f8eb7210753e925ef2e72af93ddf9ab626251a589246107a7524faa00dfc07bc41026c082b07714f4104b6d4cb502f6b016e310293dfe16336543f69d0b9afbf1f65f8eb7210753e925ef2e72af93ddf9ab626251a589246107a7524faa00dfc07bc41026c082b07714f52aef66c7c4d000000001976a9146afaed9a226fc9e1550278b739b278a9590fccba88ac00000000
>>>
>>> showtx shows:
>>> Input:
>>> previous output:
>>> 15d90534f8bc622bf50c60abb74957f85c99979ea51c155c403fcd9dc80ffd88:1
>>> script: [
>>> 30450220408bd8359dfe03a55f881f99b25a28cc691ccb4e29c825947e835c4a03f9bda20221008000ba23c20d19225a3e6f4f7351b0fbb9f7fc2bcb110605653d36ea8ac12a3401
>>> ] [
>>> 04b6d4cb502f6b016e310293dfe16336543f69d0b9afbf1f65f8eb7210753e925ef2e72af93ddf9ab626251a589246107a7524faa00dfc07bc41026c082b07714f
>>> ]
>>>
>>> However, when I retrieve an arbitrary transaction from network:
>>> $ sx fetch-transaction
>>> 15d90534f8bc622bf50c60abb74957f85c99979ea51c155c403fcd9dc80ffd88 | sx
>>> showtx
>>>
>>> hash: 15d90534f8bc622bf50c60abb74957f85c99979ea51c155c403fcd9dc80ffd88
>>> version: 1
>>> locktime: 0
>>> Input:
>>> previous output:
>>> 36d162f6292c62d9d60cd9ea152aaddb94de0301f5dbe0ff3f055a35bc4ee54e:0
>>> script: [
>>> 3046022100c6fd593068adaa263aa0b98af6b83fd29cf15df7cdeb7d31dc7b44c9c3b4307a022100a50990f3c60df0d3ee8d11d93d39ee07ec4623880ac7e191c9e680562bcfff6f01
>>> ] [ 03cc32d912091b053d34aa12d0a272eb40a1ff9a0309ddcb32a98f39af74af6924 ]
>>>
>>> Why its public key (second part of the script) is shorter than mine?
>>>
>>> (My
>>> code:
>>> https://github.com/changlan/tor-incentive/blob/master/main.cpp#L87)
>>>
>>> Best,
>>> Chang
>>>
>>> On Sunday, December 8, 2013 at 5:17 PM, Amir Taaki wrote:
>>>
>>>> aha ok. I would just use the normal main net. I've got mine built for
>>>> mainnet which is why it interprets your addresses as normal bitcoin
>>>> addresses.
>>>>
>>>> I'll look into that message. have you tried your code with a tiny amount
>>>> of BTC? don't forget to put a fee too.
>>>>
>>>> On 09/12/13 00:34, Chang Lan wrote:
>>>>> The “address” in both input and the second output
>>>>> is mnRQG7kRAapsriWL8hKHRWpw6AgSyWWmn4 in my machine. I have no idea why
>>>>> we saw difference. I built the libbitcoin with ‘—enable-testnet’.
>>>>>
>>>>> I tried to make the transaction using ‘mktx’. Here is we I got:
>>>>>
>>>>> $ sx mktx txfile.tx --input
>>>>> cb502ebca60cfe43bf0cd1c91a50ab07590eb8d35c3b2d29306693dfa36047d0:0
>>>>> --output mnRQG7kRAapsriWL8hKHRWpw6AgSyWWmn4:309999990
>>>>>
>>>>> Added input
>>>>> cb502ebca60cfe43bf0cd1c91a50ab07590eb8d35c3b2d29306693dfa36047d0:0
>>>>> mktx: Unsupported address type.
>>>>>
>>>>> mnRQG7kRAapsriWL8hKHRWpw6AgSyWWmn4 is the address I have:
>>>>> https://blockexplorer.com/testnet/address/mnRQG7kRAapsriWL8hKHRWpw6AgSyWWmn4
>>>>>
>>>>> Best,
>>>>> Chang
>>>>>
>>>>> On Sunday, December 8, 2013 at 1:21 PM, Amir Taaki wrote:
>>>>>
>>>>>> Are you able to construct the tx using the command line tools sx?
>>>>>>
>>>>>> Then you can port the code as you use it piece by piece into your own
>>>>>> application.
>>>>>>
>>>>>> You need to update sx from the git repository (that should be fixed).
>>>>>> Here's what I see:
>>>>>>
>>>>>> hash: 43919afd984bf86a421bc5d32ddc25bbaad996d6429a0e6a81b6d6059aa86db2
>>>>>> version: 1
>>>>>> locktime: 0
>>>>>> Input:
>>>>>> previous output:
>>>>>> cb502ebca60cfe43bf0cd1c91a50ab07590eb8d35c3b2d29306693dfa36047d0:0
>>>>>> script: [
>>>>>> 3045022100b4760147383d74cc68c1004755d3e210949370358309d5d64e81f3ec0e54ba470220540d21755a68946f19eaebb1b7b3c5649ee5825ac7363bdededcf445f2912a3001
>>>>>> ] [
>>>>>> 04a0160a564377fc9af6100827cf0726bf794aa57c6b908731b0cd6057da8a8ae01597c54fdce5b0b58cbd87de98821c71c638724dac5c93c7539d7f3351c20a5f
>>>>>> ]
>>>>>> sequence: 4294967295
>>>>>> address: 17uSy4fSMZPd5c2iR8LubbccEB5jyJi9rc
>>>>>> Output:
>>>>>> value: 10
>>>>>> script: 2 [
>>>>>> 04a0160a564377fc9af6100827cf0726bf794aa57c6b908731b0cd6057da8a8ae01597c54fdce5b0b58cbd87de98821c71c638724dac5c93c7539d7f3351c20a5f
>>>>>> ] [
>>>>>> 04a0160a564377fc9af6100827cf0726bf794aa57c6b908731b0cd6057da8a8ae01597c54fdce5b0b58cbd87de98821c71c638724dac5c93c7539d7f3351c20a5f
>>>>>> ] 2 checkmultisig
>>>>>> Output:
>>>>>> value: 309999990
>>>>>> script: dup hash160 [ 4bbc0f7fff6b9135e3bf1a472b464ec127947cfb ]
>>>>>> equalverify checksig
>>>>>> address: 17uSy4fSMZPd5c2iR8LubbccEB5jyJi9rc
>>>>>>
>>>>>>
>>>>>> On 08/12/13 21:18, Chang Lan wrote:
>>>>>>> Thanks Amir!
>>>>>>>
>>>>>>> I am using testnet so the TXDATA is for testnet:
>>>>>>>
>>>>>>> 0100000001d04760a3df936630292d3b5cd3b80e5907ab501ac9d10cbf43fe0ca6bc2e50cb000000008b483045022100b4760147383d74cc68c1004755d3e210949370358309d5d64e81f3ec0e54ba470220540d21755a68946f19eaebb1b7b3c5649ee5825ac7363bdededcf445f2912a30014104a0160a564377fc9af6100827cf0726bf794aa57c6b908731b0cd6057da8a8ae01597c54fdce5b0b58cbd87de98821c71c638724dac5c93c7539d7f3351c20a5fffffffff020a0000000000000087524104a0160a564377fc9af6100827cf0726bf794aa57c6b908731b0cd6057da8a8ae01597c54fdce5b0b58cbd87de98821c71c638724dac5c93c7539d7f3351c20a5f4104a0160a564377fc9af6100827cf0726bf794aa57c6b908731b0cd6057da8a8ae01597c54fdce5b0b58cbd87de98821c71c638724dac5c93c7539d7f3351c20a5f52ae76397a12000000001976a9144bbc0f7fff6b9135e3bf1a472b464ec127947cfb88ac00000000
>>>>>>>
>>>>>>> sx showtx worked well but when I used the command
>>>>>>>
>>>>>>> echo TXDATA | sx validsx
>>>>>>>
>>>>>>> I got
>>>>>>>
>>>>>>> terminate called after throwing an instance of
>>>>>>> 'libbitcoin::end_of_stream’
>>>>>>>
>>>>>>> Best,
>>>>>>> Chang
>>>>>>>
>>>>>>> On Sunday, December 8, 2013 at 12:59 PM, Amir Taaki wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Your code looks correct. You can use the command:
>>>>>>>>
>>>>>>>> echo TXDATA | sx validtx
>>>>>>>>
>>>>>>>> to check the correctness of the tx (but I'm not sure if the reported
>>>>>>>> erros are always correct - I need to investigate that).
>>>>>>>>
>>>>>>>> You can also examine the data using:
>>>>>>>>
>>>>>>>> echo TXDATA | sx showtx
>>>>>>>>
>>>>>>>> your sign code is correct, and the other code looks good. If you
>>>>>>>> give me
>>>>>>>> the hex I can see if I spot anything.
>>>>>>>>
>>>>>>>> Here's some code for constructing transactions:
>>>>>>>>
>>>>>>>> https://github.com/spesmilo/sx/blob/master/src/wallet.cpp
>>>>>>>> (see line 361 to 521)
>>>>>>>>
>>>>>>>> https://github.com/darkwallet/python-obelisk/blob/master/examples/mktx.py
>>>>>>>> https://github.com/darkwallet/python-obelisk/blob/master/obelisk/bitcoin.py
>>>>>>>> (see line 998)
>>>>>>>>
>>>>>>>> On 08/12/13 20:50, Chang Lan wrote:
>>>>>>>>> Hi there,
>>>>>>>>>
>>>>>>>>> I tried making a valid transaction using libbitcoin, but it seems
>>>>>>>>> that
>>>>>>>>> the transaction turns out to be invalid. Below is the code
>>>>>>>>> snippet that
>>>>>>>>> I used to create a transaction. Can anyone point out if I did it
>>>>>>>>> wrong?
>>>>>>>>> Thanks!
>>>>>>>>>
>>>>>>>>> void add_input(transaction_type& tx, const output_point& output)
>>>>>>>>> {
>>>>>>>>> transaction_input_type input;
>>>>>>>>> output_point& prevout = input.previous_output;
>>>>>>>>> prevout = output;
>>>>>>>>> input.sequence = 4294967295;
>>>>>>>>> tx.inputs.push_back(input);
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> bool sign(transaction_type& tx, size_t input_index, const
>>>>>>>>> elliptic_curve_key& key, const script_type& script_code)
>>>>>>>>> {
>>>>>>>>> transaction_input_type& input = tx.inputs[input_index];
>>>>>>>>> const data_chunk public_key = key.public_key();
>>>>>>>>> if (public_key.empty())
>>>>>>>>> {
>>>>>>>>> std::cerr << "internal error getting public key" << std::endl;
>>>>>>>>> return false;
>>>>>>>>> }
>>>>>>>>> hash_digest tx_hash = script_type::generate_signature_hash(tx,
>>>>>>>>> input_index, script_code, 1);
>>>>>>>>> if (tx_hash == null_hash)
>>>>>>>>> {
>>>>>>>>> std::cerr << "error generating signature hash" << std::endl;
>>>>>>>>> return false;
>>>>>>>>> }
>>>>>>>>> data_chunk signature = key.sign(tx_hash);
>>>>>>>>> signature.push_back(0x01);
>>>>>>>>>
>>>>>>>>> script_type input_script;
>>>>>>>>> input_script.push_operation({opcode::special, signature});
>>>>>>>>> std::cout << key.public_key().size() << std::endl;
>>>>>>>>> input_script.push_operation({opcode::special, key.public_key()});
>>>>>>>>> tx.inputs[input_index].script = input_script;
>>>>>>>>>
>>>>>>>>> return true;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> bool create_channel_tx(transaction_type& tx, const data_chunk&
>>>>>>>>> payee_public_key, const data_chunk& payer_public_key, uint64_t
>>>>>>>>> value)
>>>>>>>>> {
>>>>>>>>> /* … */
>>>>>>>>> */* called add_input() for each input */*
>>>>>>>>> // output 1
>>>>>>>>> script_type out_script =
>>>>>>>>> build_contract_script(acc.key.public_key(),
>>>>>>>>> remote_public_key);
>>>>>>>>> transaction_output_type output;
>>>>>>>>> output.value = value;
>>>>>>>>> output.script = out_script;
>>>>>>>>> tx.outputs.push_back(output);
>>>>>>>>> // output 2
>>>>>>>>> payment_address payaddr;
>>>>>>>>> set_public_key(payaddr, acc.key.public_key());
>>>>>>>>> script_type back_script = build_pubkey_hash_script(payaddr.hash());
>>>>>>>>> transaction_output_type back_output;
>>>>>>>>> back_output.value = collected_value - value;
>>>>>>>>> back_output.script = back_script;
>>>>>>>>> tx.outputs.push_back(back_output);
>>>>>>>>>
>>>>>>>>> // sign each input
>>>>>>>>> for (size_t i = 0; i < tx.inputs.size(); ++i)
>>>>>>>>> {
>>>>>>>>> sign(tx, i, acc.key, back_script);
>>>>>>>>> }
>>>>>>>>> return true;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Chang
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Libbitcoin mailing list
>>>>>>>>> Libbitcoin@??? <mailto:Libbitcoin@lists.dyne.org>
>>>>>>>>> <mailto:Libbitcoin@lists.dyne.org>
>>>>>>>>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>>>>>>>> _______________________________________________
>>>>>>>> Libbitcoin mailing list
>>>>>>>> Libbitcoin@??? <mailto:Libbitcoin@lists.dyne.org>
>>>>>>>> <mailto:Libbitcoin@lists.dyne.org>
>>>>>>>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Libbitcoin mailing list
>>>>> Libbitcoin@??? <mailto:Libbitcoin@lists.dyne.org>
>>>>> <mailto:Libbitcoin@lists.dyne.org>
>>>>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>>>> _______________________________________________
>>>> Libbitcoin mailing list
>>>> Libbitcoin@??? <mailto:Libbitcoin@lists.dyne.org>
>>>> <mailto:Libbitcoin@lists.dyne.org>
>>>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>>>
>>>
>>>
>>> _______________________________________________
>>> Libbitcoin mailing list
>>> Libbitcoin@??? <mailto:Libbitcoin@lists.dyne.org>
>>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>> _______________________________________________
>> Libbitcoin mailing list
>> Libbitcoin@??? <mailto:Libbitcoin@lists.dyne.org>
>> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>
>
>
> _______________________________________________
> Libbitcoin mailing list
> Libbitcoin@???
> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/libbitcoin
>