jsmitchell (Thu, 02 Feb 2017 18:49:39 GMT):
Welcome to the Sawtooth Lake channel!
agunde (Thu, 02 Feb 2017 18:50:40 GMT):
Has joined the channel.
amundson (Thu, 02 Feb 2017 18:51:05 GMT):
Has joined the channel.
amundson (Thu, 02 Feb 2017 18:54:03 GMT):
@jsmitchell - can you make others owners as well?
jsmitchell (Thu, 02 Feb 2017 18:54:14 GMT):
let me see
jsmitchell (Thu, 02 Feb 2017 18:54:31 GMT):
amundson
MicBowman (Thu, 02 Feb 2017 19:40:34 GMT):
Has joined the channel.
MicBowman (Thu, 02 Feb 2017 19:41:41 GMT):
woot woot
Ratnakar (Thu, 02 Feb 2017 20:07:26 GMT):
Has joined the channel.
timblankers (Thu, 02 Feb 2017 23:28:10 GMT):
Has joined the channel.
C0rWin (Fri, 03 Feb 2017 00:11:11 GMT):
Has joined the channel.
salmanbaset (Fri, 03 Feb 2017 01:21:34 GMT):
Has joined the channel.
Donald Liu (Fri, 03 Feb 2017 02:18:54 GMT):
Has joined the channel.
didnotgetagoodname (Fri, 03 Feb 2017 03:57:51 GMT):
Has joined the channel.
JonathanLevi (Fri, 03 Feb 2017 07:50:02 GMT):
Has joined the channel.
silliman (Fri, 03 Feb 2017 13:58:13 GMT):
Has joined the channel.
danacr (Fri, 03 Feb 2017 14:57:19 GMT):
Has joined the channel.
marcusvcs (Fri, 03 Feb 2017 18:47:51 GMT):
Has joined the channel.
fz (Fri, 03 Feb 2017 19:32:23 GMT):
Has joined the channel.
karkal (Fri, 03 Feb 2017 19:57:29 GMT):
Has joined the channel.
stanliberman (Fri, 03 Feb 2017 20:44:06 GMT):
Has joined the channel.
ericmvaughn (Fri, 03 Feb 2017 22:07:56 GMT):
Has joined the channel.
dourada (Fri, 03 Feb 2017 23:24:47 GMT):
Has joined the channel.
genggjh (Sat, 04 Feb 2017 03:46:10 GMT):
Has joined the channel.
guruprasath (Sat, 04 Feb 2017 06:13:01 GMT):
Has joined the channel.
schwentker2 (Sun, 05 Feb 2017 15:51:31 GMT):
Has joined the channel.
ray (Mon, 06 Feb 2017 04:42:38 GMT):
Has joined the channel.
david.peyronnin (Mon, 06 Feb 2017 09:54:28 GMT):
Has joined the channel.
naddison (Mon, 06 Feb 2017 11:23:53 GMT):
Has joined the channel.
karan-bharadwaj (Mon, 06 Feb 2017 17:56:15 GMT):
Has joined the channel.
jsmitchell (Mon, 06 Feb 2017 18:44:12 GMT):
MicBowman
kelly_ (Mon, 06 Feb 2017 19:51:34 GMT):
Has joined the channel.
skbodwell (Tue, 07 Feb 2017 00:48:42 GMT):
Has joined the channel.
Dan (Tue, 07 Feb 2017 04:03:42 GMT):
Has joined the channel.
Dan (Tue, 07 Feb 2017 04:04:28 GMT):
I can has owner?
foobarometer (Tue, 07 Feb 2017 05:21:09 GMT):
Has joined the channel.
boydjohnson (Tue, 07 Feb 2017 13:57:18 GMT):
Has joined the channel.
barinjato (Tue, 07 Feb 2017 14:12:18 GMT):
Has joined the channel.
reachk.raj (Tue, 07 Feb 2017 14:13:35 GMT):
Has joined the channel.
amundson (Tue, 07 Feb 2017 14:31:52 GMT):
Dan
Dan (Tue, 07 Feb 2017 14:33:55 GMT):
All your sawteeth are belong to me now!
adamludvik (Tue, 07 Feb 2017 14:55:51 GMT):
Has joined the channel.
cbf (Tue, 07 Feb 2017 15:16:08 GMT):
Has joined the channel.
pschwarz (Tue, 07 Feb 2017 15:16:08 GMT):
Has joined the channel.
TomBarnes (Tue, 07 Feb 2017 17:47:49 GMT):
Has joined the channel.
TomBarnes (Tue, 07 Feb 2017 17:48:30 GMT):
shiny
TomBarnes (Tue, 07 Feb 2017 17:52:39 GMT):
is there a desktop client? I downloaded the Rocket client but it doesn't seem to connect to this channel.
pschwarz (Tue, 07 Feb 2017 17:57:12 GMT):
https://rocket.chat/download
pschwarz (Tue, 07 Feb 2017 17:57:19 GMT):
@Tom Barnes --^
mfford (Tue, 07 Feb 2017 19:07:45 GMT):
Has joined the channel.
amundson (Tue, 07 Feb 2017 19:45:36 GMT):
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ sawtooth cluster start -P tp_intkey_python
Starting: validator-000
Starting: validator-001
Starting: validator-002
Starting: validator-003
Starting: validator-004
Starting: validator-005
Starting: validator-006
Starting: validator-007
Starting: validator-008
Starting: validator-009
Pulling validator (sawtooth-validator:latest)...
ERROR: repository sawtooth-validator not found: does not exist or no pull access
Error: Docker images not built: tp_intkey_python, sawtooth-validator. Try running "sawtooth docker build tp_intkey_python sawtooth-validator"
```
amundson (Tue, 07 Feb 2017 19:45:52 GMT):
anyone else seeing that?
amundson (Tue, 07 Feb 2017 19:47:07 GMT):
@adamludvik ^
amundson (Tue, 07 Feb 2017 19:57:17 GMT):
apparently following the 'Try running' statement provided works
amundson (Tue, 07 Feb 2017 19:57:43 GMT):
I had mistakenly though not providing the arguments implied 'all'
amundson (Tue, 07 Feb 2017 20:00:40 GMT):
probably be useful to have one of the cluster subcommands tell you connection information
amundson (Tue, 07 Feb 2017 20:00:46 GMT):
and for cluster to startup the rest api
amundson (Tue, 07 Feb 2017 20:02:31 GMT):
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ xo create game000
Response: {}
```
amundson (Tue, 07 Feb 2017 20:04:47 GMT):
so that's an invalid transaction, what should it print out? nothing? If I give it --wait, it does the same thing, but in that case, it should probably print out an error.
tbrooke (Tue, 07 Feb 2017 20:22:06 GMT):
Has joined the channel.
jsmitchell (Tue, 07 Feb 2017 20:25:55 GMT):
it's a valid transaction from the perspective of the client, right? It's only invalid because a game of that name already exists?
jsmitchell (Tue, 07 Feb 2017 20:28:25 GMT):
in 0-7 we had the capability to do validity checks on submission based on the best knowledge the validator had
beauson45 (Tue, 07 Feb 2017 21:02:13 GMT):
Has joined the channel.
SivaKannan (Tue, 07 Feb 2017 21:05:47 GMT):
Has joined the channel.
amundson (Tue, 07 Feb 2017 21:41:09 GMT):
invalid because it's a duplicate or the validator doesn't handle xo transactions, stuff like that
amundson (Tue, 07 Feb 2017 21:43:33 GMT):
the 0-7 model isn't necessarily as desirable as just returning the state as it goes through the various normal stages
rcampos@altus.cr (Tue, 07 Feb 2017 22:04:23 GMT):
Has joined the channel.
Rokkinchic (Wed, 08 Feb 2017 03:17:59 GMT):
Has joined the channel.
kansi (Wed, 08 Feb 2017 03:59:54 GMT):
Has joined the channel.
sachinsurvase (Wed, 08 Feb 2017 04:21:53 GMT):
Has joined the channel.
PacoEcotrust (Wed, 08 Feb 2017 09:24:34 GMT):
Has joined the channel.
jvsteiner (Wed, 08 Feb 2017 11:02:08 GMT):
Has joined the channel.
o_drugan (Wed, 08 Feb 2017 14:28:09 GMT):
Has joined the channel.
Dan (Wed, 08 Feb 2017 14:52:15 GMT):
I put up a new sawtooth_signer option yesterday. It changes the signer interface a bit to simplify it. This is all new architecture (0.8) related. Nothing to do with the legacy / stable stuff (0.7).https://github.com/hyperledger/sawtooth-core/pull/64
Dan (Wed, 08 Feb 2017 14:54:13 GMT):
I've elected to drop support for pubkey recovery for now. If someone has a need for that let me know. The intent moving forward is all our signed messages will have the public key included in the signed message. (See the protobuf files here: https://github.com/hyperledger/sawtooth-core/tree/master/protos)
Dan (Wed, 08 Feb 2017 14:58:06 GMT):
Intended usage is just to generate priv/pub keys and sign/verify messages. The encoding/decoding methods that were there before become private and are handled implicitly by the remaining calls. details in commit msg. http://bit.ly/2kmnyhq.
Dan (Wed, 08 Feb 2017 14:59:02 GMT):
The main reason to do all this was to adopt the libsecp256k1 implementation in lieu of the slower python implementations.
amundson (Wed, 08 Feb 2017 14:59:39 GMT):
@jsmitchell and I were talking about language bindings (Java, Javascript, etc.) and the difficulty in supporting this vs. the old bitcoin library approach
amundson (Wed, 08 Feb 2017 14:59:52 GMT):
sounded like this might be easier as there is less encoding?
Dan (Wed, 08 Feb 2017 15:03:32 GMT):
I hope so. :) This c library spits out the signatures in DER encoding which is a little more standard than the bitcoin formats. The latter encode some things that are specific to bitcoin whereas DER is just line encoding for numbers.
Dan (Wed, 08 Feb 2017 15:04:46 GMT):
So the protobufs are mostly handling hex strings which should be able to be decoded without handling bitcoinisms.
Dan (Wed, 08 Feb 2017 15:06:05 GMT):
So that's true of the signatures. But for now I've kept the keys WIF (bitcoin) encoded because I wasn't sure about legacy client interaction with .8.
Dan (Wed, 08 Feb 2017 15:07:02 GMT):
I could strip that out and make them DER encoded if we don't have any need for WIF. That would also eliminate I think the last remaining dependency on pybitcointools.
amundson (Wed, 08 Feb 2017 15:10:36 GMT):
if we change the key format, we should pick a new extension and update keygen
boydjohnson (Wed, 08 Feb 2017 15:16:03 GMT):
My Pr that refactors Interconnect and network into one implementation that get different behavior based on the dispatcher that is used is up. I commented for cian montgomery on the pr which commits touch journal. Since it is a rather large PR that is a significant refactor, I would be looking for further reviewers.
zac (Wed, 08 Feb 2017 15:24:37 GMT):
Has joined the channel.
boydjohnson (Wed, 08 Feb 2017 15:55:20 GMT):
https://github.com/hyperledger/sawtooth-core/pull/65 Here's the PR.
amundson (Wed, 08 Feb 2017 16:09:56 GMT):
@boydjohnson - what's the story on MessageList in the python sdk. was that just broken before or did you change the approach?
boydjohnson (Wed, 08 Feb 2017 16:12:39 GMT):
I thought since we were just wrapping 1 message in a messagelist it didn't serve a purpose so I changed that in the interconnect code. If we try to sweep messages in or out up to a certain number of messages maybe it would make more sense. Also pyzmq has send_multipart where you can send a list of things so it would be [msg1_bytes, msg2_bytes... making MessageList not needed.
amundson (Wed, 08 Feb 2017 16:15:57 GMT):
makes sense, we added that when we were attempting to make up for grpc slowness, IIRC
jsmitchell (Wed, 08 Feb 2017 16:16:45 GMT):
@boydjohnson: this ProcessPoolExecutor strategy for parallel signature validation is sweet
amundson (Wed, 08 Feb 2017 16:29:41 GMT):
@boydjohnson - scanned through quickly, looks very nice
boydjohnson (Wed, 08 Feb 2017 16:31:00 GMT):
Thanks, the interconnect.py file is longer than advertised, but I think it is a nice implementation.
Dan (Wed, 08 Feb 2017 18:12:26 GMT):
For 0.8... once legacy code is removed will we have a python3 requirement? i.e. the system is not expected to be py2 compatible?
amundson (Wed, 08 Feb 2017 18:45:53 GMT):
python3 only
jjason (Wed, 08 Feb 2017 18:46:26 GMT):
Has joined the channel.
jsmitchell (Wed, 08 Feb 2017 19:12:03 GMT):
@boydjohnson: you probably want to drop commit e9d67f from your branch
jsmitchell (Wed, 08 Feb 2017 19:12:15 GMT):
removing that unit_signing.yaml was an error
boydjohnson (Wed, 08 Feb 2017 19:12:29 GMT):
Yeah, I'll drop that commit. Thanks.
jsmitchell (Wed, 08 Feb 2017 19:12:40 GMT):
@adamludvik merged in the fix
boydjohnson (Wed, 08 Feb 2017 19:12:56 GMT):
Cool, I'll also rebase on current master
rjones (Wed, 08 Feb 2017 19:15:56 GMT):
Has joined the channel.
rjones (Wed, 08 Feb 2017 19:18:03 GMT):
I have two small documentation PRs - https://github.com/hyperledger/sawtooth-docs/pull/11 and https://github.com/hyperledger/sawtooth-core/pull/66 . I noticed PR66 failed Jenkins, but I can't see why. Could I sign up for a jenkins account somewhere?
jsmitchell (Wed, 08 Feb 2017 19:18:58 GMT):
we had a commit which passed in our internal jenkins but broke in external jenkins
rjones (Wed, 08 Feb 2017 19:19:19 GMT):
OK, thanks.
jsmitchell (Wed, 08 Feb 2017 19:19:36 GMT):
if you rebase and have c464e0d6, hopefully the build should succeed
boydjohnson (Wed, 08 Feb 2017 19:25:23 GMT):
@jsmitchell Because of the time delay between internal and external github I rebased on internal master, and pushed some commits that aren't yet on external github to my PR. I will rebase once they have been pushed out.
rbuysse (Wed, 08 Feb 2017 19:41:50 GMT):
Has joined the channel.
jsmitchell (Wed, 08 Feb 2017 20:35:30 GMT):
@boydjohnson: are you seeing a ~10 sec delay on intkey load before stuff starts getting processed?
jsmitchell (Wed, 08 Feb 2017 20:35:33 GMT):
```[20:33:19 DEBUG interconnect] receiving CLIENT_BATCH_SUBMIT_REQUEST message
[20:33:20 DEBUG interconnect] receiving CLIENT_BATCH_SUBMIT_REQUEST message
[20:33:20 DEBUG interconnect] receiving CLIENT_BATCH_SUBMIT_REQUEST message
[20:33:31 DEBUG interconnect] sending GOSSIP_MESSAGE to None
[20:33:31 DEBUG interconnect] sending GOSSIP_MESSAGE to None
[20:33:31 DEBUG interconnect] sending GOSSIP_MESSAGE to None
```
boydjohnson (Wed, 08 Feb 2017 20:39:59 GMT):
Yeah, that because signature verification. It doesn't get broadcast until we verify the signatures.
boydjohnson (Wed, 08 Feb 2017 20:39:59 GMT):
Yeah, that's because signature verification. It doesn't get broadcast until we verify the signatures.
jsmitchell (Wed, 08 Feb 2017 20:41:09 GMT):
so, all the signature verification for all batches is happening before the first batch is sent to the publisher?
boydjohnson (Wed, 08 Feb 2017 20:43:13 GMT):
Yeah, that is maybe a data model problem. To simplify the dispatcher and handlers we constrain it to sending the same input to each handler. BatchLists come in and the first batchlist (for intkey load: 1 batch 100 txns) gets verified and isn't sent to the broadcast handler until it is the whole batchlist is verified.
jsmitchell (Wed, 08 Feb 2017 20:44:42 GMT):
I'm also seeing an ordering problem with intkey load now, presumably due to the lack of formal dependencies (either on the create side, or on the publishing side, or probably both) between set and inc/dec.
jsmitchell (Wed, 08 Feb 2017 20:44:59 GMT):
so, inc/dec transactions are coming in first before the set and are being declared invalid
boydjohnson (Wed, 08 Feb 2017 20:48:04 GMT):
Yeah, I have seen that. It is on both the creating the batches and internally. The ordering problem is that the first batchlist is bigger than the second batchlist, so it takes longer in signature verification. Also I wrote some test code (not included in the PR) that shows that the dispatcher does not always preserver ordering even on fair handlers.
jsmitchell (Wed, 08 Feb 2017 20:48:56 GMT):
do we have a story for getting dependencies to work on both sides?
boydjohnson (Wed, 08 Feb 2017 20:49:42 GMT):
I have stories for the completer which is my understanding handles both batch and block dependencies, but not for the intkey create_batch.
boydjohnson (Wed, 08 Feb 2017 20:54:06 GMT):
@pschwarz I think I was bitten by the timeout error on the intkey smoke test. That was one that you were talking about.
pschwarz (Wed, 08 Feb 2017 21:26:05 GMT):
@boydjohnson was that against master?
boydjohnson (Wed, 08 Feb 2017 21:53:31 GMT):
Yeah, external jenkins.
pschwarz (Wed, 08 Feb 2017 22:51:43 GMT):
There is a task to fix this issue, so just run the build again
cianx (Thu, 09 Feb 2017 00:31:11 GMT):
Has joined the channel.
danieldewar (Thu, 09 Feb 2017 10:25:13 GMT):
Has joined the channel.
jonreid (Thu, 09 Feb 2017 11:41:48 GMT):
Has joined the channel.
FlyingTiger (Thu, 09 Feb 2017 11:59:23 GMT):
Has joined the channel.
FlyingTiger (Thu, 09 Feb 2017 11:59:58 GMT):
Hi, guys :)
rbuysse (Thu, 09 Feb 2017 14:02:45 GMT):
Hello!
boydjohnson (Thu, 09 Feb 2017 14:45:10 GMT):
Hi, @FlyingTiger
Dan (Thu, 09 Feb 2017 14:45:52 GMT):
Welcome to RocketChat :D
jsmitchell (Thu, 09 Feb 2017 15:02:28 GMT):
:rocket:
crow15 (Thu, 09 Feb 2017 15:12:22 GMT):
Has joined the channel.
amundson (Thu, 09 Feb 2017 16:28:41 GMT):
@agunde - considering splitting tests/scheduler into tests/scheduler_serial and tests/scheduler_parallel
agunde (Thu, 09 Feb 2017 21:14:34 GMT):
@amundson I think that would be fine. But it would start the precedent of having multiple tests files in a directory (such as test_scheduler) instead of the discussed convention of only having tests.py file in most cases.
amundson (Fri, 10 Feb 2017 00:11:30 GMT):
ok
seanbarclay (Fri, 10 Feb 2017 11:57:43 GMT):
Has joined the channel.
jsmitchell (Fri, 10 Feb 2017 17:23:02 GMT):
@FlyingTiger: are you online?
jsmitchell (Fri, 10 Feb 2017 17:45:14 GMT):
@FlyingTiger: we're trying to spin up a 0-7 instance and are running into a couple of things that a few of your master PRs might fix
toddojala (Fri, 10 Feb 2017 18:30:17 GMT):
Has joined the channel.
toddojala (Fri, 10 Feb 2017 18:30:29 GMT):
hello
boydjohnson (Fri, 10 Feb 2017 18:35:34 GMT):
So the GenesisController PR was merged and I would like to alert people to the fact that validators started up by the cluster command will behave in a different way. validator-000 is the genesis node and if you "intkey load --url 127.0.0.1:40002" (in a three node network) it will broadcast batches out to the other validators but only validator-000 will make blocks since it alone has genesis. Also I have seen intermittent failures 1/5 on xo-smoke when running bin/run_tests that probably has to do with timing issues.
rjones (Fri, 10 Feb 2017 19:41:32 GMT):
I tagged all of the github/sawtooth* repos using the new `topics` feature from github. LMK if you want more/different tags. for instance if you look here: https://github.com/hyperledger/sawtooth-core you'll see the topics under the description.
jsmitchell (Fri, 10 Feb 2017 20:00:30 GMT):
sweet, thanks @rjones
Dan (Fri, 10 Feb 2017 20:42:40 GMT):
yeah thanks... reminds me we might have some old repos out there. Should we purge those?
Dan (Fri, 10 Feb 2017 20:42:51 GMT):
e.g. https://github.com/hyperledger/sawtooth-validator
rjones (Fri, 10 Feb 2017 21:19:21 GMT):
@Dan I can migrate them to github/hyperledge-archives if you like, just send me a list
boydjohnson (Fri, 10 Feb 2017 22:11:08 GMT):
Just to advertise to the channel, that when running a single validator node, it is required to run "sawtooth-0.8 admin genesis". And clean the /home/ubuntu directory.
Dan (Fri, 10 Feb 2017 22:52:31 GMT):
what do you mean clean the directory? Like after you run that command or you need to clean out some keys before then?
Dan (Fri, 10 Feb 2017 22:53:20 GMT):
thanks @ry. I'll put together a list and see if anyone on the channel is remembering some reason for those to still be there.
Dan (Fri, 10 Feb 2017 22:56:30 GMT):
@all Any reason these repos should NOT be archived and removed from github? sawtooth-arcade, sawtooth-validator, sawtooth-mktplace, sawtooth-dev-tools
boydjohnson (Fri, 10 Feb 2017 23:21:23 GMT):
@Dan Apparently it is just rm ~/block-chain-id, and then sawtooth-0.8 admin genesis && validator -vv.
PacoEcotrust (Sun, 12 Feb 2017 14:17:25 GMT):
Maybe that was treated before, sorry, I would like to ask fi the 8 version is ready to test? thanks
PacoEcotrust (Sun, 12 Feb 2017 14:17:25 GMT):
Maybe that was treated before, sorry, I would like to ask if the 8 version is ready to test? thanks
amundson (Sun, 12 Feb 2017 16:01:32 GMT):
@PacoEcotrust - we are targeting late April for the core of 0.8 to have the minimum features required to run a network of validators in a non-development setting (tests, PoCs, etc.); shortly following that (maybe a month) we expect 0.8 to include all interesting features that were present in 0.7 (stats client, etc.)
amundson (Sun, 12 Feb 2017 16:07:54 GMT):
0.8 is far enough along to write transaction families with the SDKs (python, javascript, java), and there is example code for each language. there is also a pattern for testing transaction families in an isolated way. the REST API has enough implementation to write CLI clients for the transaction families (we have a couple, for intkey, xo)
amundson (Sun, 12 Feb 2017 16:09:08 GMT):
but, you are essentially limited to a single validator instance since new journal and consensus modules are currently in implementation
PacoEcotrust (Sun, 12 Feb 2017 20:42:27 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=nr7pHa8WB6Jwvx6jx) @amundson Thanks very much!!
PacoEcotrust (Sun, 12 Feb 2017 20:42:27 GMT):
@amundson Thanks very much!!
PacoEcotrust (Sun, 12 Feb 2017 20:43:18 GMT):
Thanks very much
amundson (Sun, 12 Feb 2017 23:32:44 GMT):
master builds are broken
amundson (Sun, 12 Feb 2017 23:36:07 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/master/42/console
Dan (Mon, 13 Feb 2017 18:58:54 GMT):
@rjones I don't see anyone begging for those old repos, so I think it's safe to archive them. Thanks.
rjones (Mon, 13 Feb 2017 19:00:39 GMT):
@Dan 👍
fz (Mon, 13 Feb 2017 19:08:25 GMT):
I have been trying to follow the sawtooth tutorial at http://intelledger.github.io/tutorial.html and I am at the step of creating an empty cookie jar for Chocolate Chip cookies. I get the following error when I try to submit a transaction ```//carol> holding reg --name /jars/choc_chip --account /account --asset //mkt/asset/cookie/choc_chip
[18:48:34 mktplace.mktplace_communication WARNING] operation failed with response: 400
[18:48:34 mktplace.mktplace_communication WARNING] Error from server, detail information: �eerrorpName isn't validierrorTypewInvalidTransactionErrorfstatus�
[18:48:34 mktplace.mktplace_client ERROR] message post failed for some unusual reason
Traceback (most recent call last):
File "/project/sawtooth-core/extensions/mktplace/mktplace/mktplace_client.py", line 172, in _sendtxn
msg
File "/project/sawtooth-core/extensions/mktplace/mktplace/mktplace_communication.py", line 179, in postmsg
.format(err_content))
InvalidTransactionError: Error from server:
failed to create transaction
//carol>
```
fz (Mon, 13 Feb 2017 19:09:00 GMT):
At the validator side. I see the following logs..
fz (Mon, 13 Feb 2017 19:09:10 GMT):
```[18:48:34 INFO base_page] BlockPage.do_get /block
[18:48:34 WARNING root_page] /mktplace.transactions.MarketPlace/Transaction - NoResource
[18:48:34 WARNING root_page] ['mktplace.transactions.MarketPlace', 'Transaction'] - 2
[18:48:34 INFO forward_page] starting local validation for txn id: 08c204d7252e58dc type: /MarketPlaceTransaction
[18:48:34 INFO forward_page] RegisterHolding Updates
[18:48:34 INFO forward_page] submitted transaction fails transaction family validation check: /mktplace.transactions.MarketPlace/Transaction; {'PublicKey': None, '__SIGNATURE__': 'G3+IfmIX5YXSWG/ROdch0rF/exTenJePlQlUROiBR+0qN1lY/jTEtyr2fKV8vZ4ZiD+k9V4wAdv5gv7AaqzATvw=', '__TYPE__': '/mktplace.transactions.MarketPlace/Transaction', '__NONCE__': 1487011714.806149, 'Transaction': {'Nonce': 1487011714.776861, 'PublicKey': '04c44f6de186a8eefb676e933a7a0e06408f2ff001369d7547dddce02c354e236fb87687dd2adba3622d913a8d796d8c9e5b8a310e59b1792dcc29d388aa4e9bf2', 'Dependencies': ['c38c98b805db7266', 'e995680600b84fb5', '14d5aabe2193e8d9'], 'Updates': [{'Count': 0L, 'Description': '', 'AssetId': '14d5aabe2193e8d9', 'UpdateType': 'RegisterHolding', 'CreatorId': 'c38c98b805db7266', 'Name': '/jars/choc_chip', 'AccountId': 'e995680600b84fb5'}], 'Signature': 'HE0V43cRcilr5eIdDdGEMCpZfUWlm3+bnQU/o0hTCHI+JP5VhBdFSJbJr/2KLAcZrLZFH3WDi9LEJUnBDZRoggk=', 'TransactionType': '/MarketPlaceTransaction'}}
```
fz (Mon, 13 Feb 2017 19:10:53 GMT):
i am just using carol instead of bob in the example. Everything else is the same.. I am v0-7 branch of sawtooth-lake
fz (Mon, 13 Feb 2017 19:11:18 GMT):
does anyone know why this might be happening?
toddojala (Mon, 13 Feb 2017 19:41:00 GMT):
@fz Taking a look..
fz (Mon, 13 Feb 2017 19:41:54 GMT):
@toddojala thanks..
toddojala (Mon, 13 Feb 2017 19:42:43 GMT):
@fz OK, so you are definitely using v0-7. Was it a "fresh" vagrant machine and environment?
fz (Mon, 13 Feb 2017 19:43:15 GMT):
yes. Its a fresh vagrant machine.
fz (Mon, 13 Feb 2017 19:43:51 GMT):
and environment
boydjohnson (Mon, 13 Feb 2017 19:44:59 GMT):
@fz If I remember correctly names must be globally unique. So if you have a /jars/choc_chip already, somebody else can't have a holding with the same name.
fz (Mon, 13 Feb 2017 19:48:30 GMT):
@boydjohnson got it. I got this error when I tried to create this jars/choc_chip for the first time. I have never created jars/choc_chip before.
boydjohnson (Mon, 13 Feb 2017 19:49:03 GMT):
I'm unsure. You could run with debug logging on (-vv) on the validator and try again.
fz (Mon, 13 Feb 2017 19:50:06 GMT):
sure @boydjohnson. will do.
rjones (Mon, 13 Feb 2017 19:54:20 GMT):
Has left the channel.
jsmitchell (Mon, 13 Feb 2017 20:04:59 GMT):
@boydjohnson: I think this may have to do with our PublicKey issues
jsmitchell (Mon, 13 Feb 2017 20:05:09 GMT):
```{'PublicKey': None```
jsmitchell (Mon, 13 Feb 2017 20:05:38 GMT):
although those changes may not have been merged in yet
boydjohnson (Tue, 14 Feb 2017 14:07:01 GMT):
So I had a thought last night. Right now the flow of CLIENT_BATCH_SUBMIT_REQUESTS either from the rest api or directly from a client goes directly to signature verification and then gossip broadcast and then to the completer which hands it to the journal and then at that point it acks back to the client. I set up the handlers in this order so that signature verification could fail the batchlist and send a error message back to the client. But having the handlers in this order means that for intkey-smoke and xo-smoke integration tests if the ack doesn't get back in 5 seconds, there is an error. A short-term remedy is to ack back as soon as the validator has the batchlist, but because of everything being request-response sending back an error message after you have already sent an ack first doesn't work. @zac I know you are working on batch submit handlers. What are your thoughts?
Dan (Tue, 14 Feb 2017 14:44:46 GMT):
Seems like your existing flow shouldn't be at risk of a 5 sec delay. or does the completer step wait on finding batches? If there's no "wait for something from the network" in that flow then I'd say its better we take a look at why the flow would take 5 seconds rather than changing the flow.
jsmitchell (Tue, 14 Feb 2017 14:45:44 GMT):
two things causing that - 1) large batches with lots of transactions to verify 2) no accelerated verification at the moment
jsmitchell (Tue, 14 Feb 2017 14:46:43 GMT):
@boydjohnson: where does the 5 second timeout come from?
jsmitchell (Tue, 14 Feb 2017 14:51:00 GMT):
is that established in the client?
boydjohnson (Tue, 14 Feb 2017 15:02:55 GMT):
Yeah, the 5 second timeout is in the rest api, the other clients like "intkey load" don't have timeouts.
jsmitchell (Tue, 14 Feb 2017 15:07:40 GMT):
my inclination is for ack to be a network layer response (I received this), rather than an attempt to answer whether the message is processable. I can see an argument for returning something else if the message itself has an error and that can be determined in a small amount of time. Otherwise, I think we're answering a different question about the status of something that was in the message.
jsmitchell (Tue, 14 Feb 2017 15:08:13 GMT):
For example, messages in the future might contain multiple things (batches, let's say)
jsmitchell (Tue, 14 Feb 2017 15:09:07 GMT):
If batch 1 is signed correctly and batch 2 is signed incorrectly, what do we do? Probably best to acknowledge receipt of the message independently from reporting success on batch 1 and error on batch 2
jsmitchell (Tue, 14 Feb 2017 15:10:21 GMT):
Message errors might be along the lines of "can't deserialize" or "unknown message type"
jsmitchell (Tue, 14 Feb 2017 15:10:35 GMT):
(i.e. concerns of the network layer)
boydjohnson (Tue, 14 Feb 2017 15:11:03 GMT):
Yeah, receipt of the message and then later information about the success or failure of that batch seems good. We would have to change handling of futures.
jsmitchell (Tue, 14 Feb 2017 15:11:40 GMT):
I don't know if it's really a future thing
jsmitchell (Tue, 14 Feb 2017 15:12:00 GMT):
it's important to keep messages distinct from their contents
boydjohnson (Tue, 14 Feb 2017 15:13:37 GMT):
So the response to a message would be in most cases (all cases?) ack, but then do we send an error response and who do we send it to, or do we just keep that info for querying?
jsmitchell (Tue, 14 Feb 2017 15:19:37 GMT):
We should talk it over. The 0-7 code polled the web api for status. We could do the same and return either success/error to that query. Being able to subscribe to a set of identifiers for status changes would be quite a bit better.
jsmitchell (Tue, 14 Feb 2017 15:23:45 GMT):
@boydjohnson: so, in that model the network would respond to messages with either Ack or Error indicating success in network receipt and ability to dispatch
boydjohnson (Tue, 14 Feb 2017 15:25:14 GMT):
Yeah, seems good.
jsmitchell (Tue, 14 Feb 2017 15:25:53 GMT):
i don't know, maybe not
jsmitchell (Tue, 14 Feb 2017 15:27:35 GMT):
that probably only applies to things we are delivering to the validator for processing
boydjohnson (Tue, 14 Feb 2017 15:29:23 GMT):
In validator to validator interactions it seems like an ack or "error, what did you send me" response would be mostly what is needed, too.
fz (Tue, 14 Feb 2017 19:24:12 GMT):
Hi everyone. sorry couldn't get back sooner with a followup/update of the cookie exchange tutorial related errors I got yesterday. After a few vagrant destroy && vagrant ups, the errors are not occuring. Here are a couple of observations.I am getting the following warnings whenever execute the following commad. ``` /project/sawtooth-core/docs/source/tutorial/genesis.sh ```
fz (Tue, 14 Feb 2017 19:24:41 GMT):
``` writing file: /home/ubuntu/sawtooth/keys/base000.wif
writing file: /home/ubuntu/sawtooth/keys/base000.addr
[01:02:18 WARNING signed_object] Identifier dbb0603c6420fe2c of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier 879960d6a3a63c01 of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier a824333e41fbeb9d of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier 9b7d322df5012fa6 of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier 2ad7fc781b6d3112 of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier d172207ba08873f8 of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier d172207ba08873f8 of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier dbb0603c6420fe2c of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier 879960d6a3a63c01 of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier a824333e41fbeb9d of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier 9b7d322df5012fa6 of SignedObject has no public key and addr used to verify signature
[01:02:18 WARNING signed_object] Identifier 2ad7fc781b6d3112 of SignedObject has no public key and addr used to verify signature
ubuntu@ubuntu- ```
fz (Tue, 14 Feb 2017 19:27:10 GMT):
Also when I try to view Bob's current offer as mentioned in the tutorial.. I see the following empty set
fz (Tue, 14 Feb 2017 19:27:10 GMT):
``` ubuntu@ubuntu-xenial:/project/sawtooth-core$ ./bin/mktclient --name bob --keyfile validator/keys/bob.wif
//bob> holding reg --name /batches/choc_chip001 --account /account --asset //mkt/asset/cookie/choc_chip --count 24
transaction 8413362e93b4a795 submitted
//bob> exchangeoffer reg --output /batches/choc_chip001 --input /USD --ratio 2 1 --name /choc_chip_sale
transaction 9c91de5624d2e7a0 submitted
//bob> holdings --creator //bob
1000 //bob/USD
24 //bob/batches/choc_chip001
1 //bob/holding/token
0 //bob/jars/choc_chip
//bob> offers --creator //bob
Ratio Input Asset (What You Pay) Output Asset (What You Get) Name
//bob>
Ratio Input Asset (What You Pay) Output Asset (What You Get) Name
//bob> waitforcommit
Waiting for 9c91de5624d2e7a0.
Transaction committed.
//bob> waitforcommit
Waiting for 9c91de5624d2e7a0.
Transaction committed.
//bob> waitforcommit
Waiting for 9c91de5624d2e7a0.
Transaction committed.
//bob> offers --creator //bob
Ratio Input Asset (What You Pay) Output Asset (What You Get) Name
//bob> exit
```
fz (Tue, 14 Feb 2017 19:28:38 GMT):
``` ubuntu@ubuntu-xenial:/project/sawtooth-core$ ./bin/mktclient --name alice --keyfile validator/keys/alice.wif
//alice> exchange --type ExchangeOffer --src /USD --dst /jars/choc_chip --offers //bob/choc_chip_sale --count 24
transaction f3622545f5c14609 submitted
//alice> waitforcommit
Waiting for f3622545f5c14609.
Transaction committed.
//alice> holdings --creator //bob
1000 //bob/USD
24 //bob/batches/choc_chip001
1 //bob/holding/token
0 //bob/jars/choc_chip
//alice> holdings --creator //alice
1000 //alice/USD
1 //alice/holding/token
0 //alice/jars/choc_chip
//alice>
```
fz (Tue, 14 Feb 2017 19:33:39 GMT):
Message Attachments
fz (Tue, 14 Feb 2017 19:35:39 GMT):
As seen above, when I try to view the offers created by Bob, it returns an empty set
fz (Tue, 14 Feb 2017 19:40:14 GMT):
And there is no change in the effective resulting holdings after the transaction. I am not sure if I am missing something here. The validator logs suggest the transactions are in good shape and it gets committed..
Dan (Tue, 14 Feb 2017 20:54:23 GMT):
Great. Looks like smacking vagrant around got you working ok?
Dan (Tue, 14 Feb 2017 20:55:58 GMT):
n/m your post above on holdings showed up after I'd woken rocket chat up a little more.
fz (Tue, 14 Feb 2017 21:40:25 GMT):
hi Dan. yes. It turned out to be an environment issue..I guess
fz (Tue, 14 Feb 2017 21:43:08 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=jGbMPvKc5qeWSFtK6) @Dan not sure if I understand this comment
amundson (Wed, 15 Feb 2017 03:28:19 GMT):
As some of you may have noticed, we have moved all PR activity to the hyperledger github repo - https://github.com/hyperledger/sawtooth-core/pulls
amundson (Wed, 15 Feb 2017 03:56:12 GMT):
One thing to note is that to re-request review after changes, one has to re-select the reviewers in the pulldown.
PacoEcotrust (Wed, 15 Feb 2017 08:30:56 GMT):
Hi, any one know where is the code of Navigator UI for Marketplace? I think I saw weeks ago but now I have been looking for it and I could not find it, thanks in advance, Fran
boydjohnson (Wed, 15 Feb 2017 12:24:27 GMT):
Hi @PacoEcotrust, Marketplace Navigator is in the 0-7 branch but not master. Here is a link: https://github.com/hyperledger/sawtooth-core/tree/0-7/extensions/mktplace/navigator
boydjohnson (Wed, 15 Feb 2017 14:45:44 GMT):
The smoke test fix PR is merged, so everyone that has PRs up should rebase on master.
amundson (Wed, 15 Feb 2017 20:50:31 GMT):
@rbuysse did you figure out the docker build error problems?
rbuysse (Wed, 15 Feb 2017 20:50:53 GMT):
yeah I think so
rbuysse (Wed, 15 Feb 2017 20:51:09 GMT):
I pushed a commit and forgot to do a PR. sec.
jsmitchell (Wed, 15 Feb 2017 22:10:42 GMT):
@adamludvik are you going to crank up the simulator on bond?
jsmitchell (Wed, 15 Feb 2017 22:10:59 GMT):
or wait for redeploy?
adamludvik (Wed, 15 Feb 2017 22:18:10 GMT):
I was going to leave the current network up for a week and work out the LIBOR issues, then redeploy. So I'll run the simulator against it again. @toddojala Did you get screenshots for the docs yet?
toddojala (Wed, 15 Feb 2017 22:37:42 GMT):
@adamludvik I am starting that about now...
toddojala (Wed, 15 Feb 2017 22:37:56 GMT):
Just give me a window
rbuysse (Wed, 15 Feb 2017 23:12:47 GMT):
i think you're fine any time now
rbuysse (Wed, 15 Feb 2017 23:12:53 GMT):
@toddojala ^
rbuysse (Wed, 15 Feb 2017 23:17:33 GMT):
BTW, I gave jenkins 6 executors (up from the default of 2), please let me know if you see any jobs waiting, or if things are taking longer than they should when a bunch of jobs are running.
TomBarnes (Wed, 15 Feb 2017 23:28:18 GMT):
I'm familiarizing myself with merkle.py. I'm running Pycharm in Windows. I grabbed the unit test code at sawtooth-core\validator\tests\unit\test_merkle_trie.pyto write some tests of my own. when I tried to run the test code with the map_size default of 1024**4 (set in sawtooth-core\validator\sawtooth_validator\database\lmdb_nolock_database.py), it immediately failed complaining that there wasn't enough disk space. I did a quick search and noted that when lmdb creates the database file on Windows, it allocates the entire file on disk; I only had 56GB available.. This might merit some attention to ensure that the behavior is as intended on Windows.
TomBarnes (Wed, 15 Feb 2017 23:32:15 GMT):
..which raises the question - should any platform-specific settings be hard-coded?
jsmitchell (Thu, 16 Feb 2017 14:39:14 GMT):
Once the local config support is in place, we can move this type of thing out of the code
jsmitchell (Thu, 16 Feb 2017 14:39:33 GMT):
It's a shame that windows doesn't support sparse files
jsmitchell (Thu, 16 Feb 2017 14:45:07 GMT):
sparse files are supported in Linux in vagrant. I'd recommend doing your testing work there.
amundson (Thu, 16 Feb 2017 14:56:30 GMT):
another reason to never support windows-native validators and instead run them in docker.
jsmitchell (Thu, 16 Feb 2017 14:59:36 GMT):
http://www.openldap.org/its/index.cgi/Software%20Enhancements?id=8324
adamludvik (Thu, 16 Feb 2017 15:48:32 GMT):
PR 79 which adds linting is printing an error message when trying to create a .pylint.d directory. I think this directory is just used to store information about previous runs of pylint. If we add the `--persistent=no` flag to the pylint call in run_lint, it does not create the directory when I test things locally so this should fix the issue. Is there any reason to keep those stats around? I didn't even know they existed and we already have `--reports=no` set, which is where you would see them.
adamludvik (Thu, 16 Feb 2017 15:48:39 GMT):
http://stackoverflow.com/questions/25475327/how-does-pylint-remember-scores-from-previous-runs
adamludvik (Thu, 16 Feb 2017 15:48:46 GMT):
https://github.com/hyperledger/sawtooth-core/pull/79
amundson (Thu, 16 Feb 2017 16:02:25 GMT):
@adamludvik adding --persistent=no sounds fine to me
VipinB (Thu, 16 Feb 2017 16:11:46 GMT):
Has joined the channel.
jsmitchell (Thu, 16 Feb 2017 16:22:40 GMT):
I'm implementing ZMQ security (using the 'ironhouse' pattern described here: http://hintjens.com/blog:49#toc6)
jsmitchell (Thu, 16 Feb 2017 16:23:10 GMT):
We'll need to have a well known public/private keypair for the 'server' identity of the validators
jsmitchell (Thu, 16 Feb 2017 16:24:25 GMT):
this is for the purposes of authenticating client identity, which will be signed by the client's private key
jsmitchell (Thu, 16 Feb 2017 16:24:51 GMT):
and can be verified by the server
jsmitchell (Thu, 16 Feb 2017 16:25:28 GMT):
we will presumably then need an ephemeral server private/public key pair which is used for actual channel encryption
jsmitchell (Thu, 16 Feb 2017 16:27:07 GMT):
looking for advice on two things. 1) any ways to avoid having a key pair be part of the config 2) alternatives to the two stage approach to the handshake
boydjohnson (Thu, 16 Feb 2017 16:27:29 GMT):
https://github.com/zeromq/pyzmq/blob/550ddc04c3ce67cdb58b6fb6499274dc7f82891c/examples/security/ironhouse.py Here is a pyzmq example for those less fluent with C.
jsmitchell (Thu, 16 Feb 2017 16:29:39 GMT):
changes I've made from that impl - 1) the client is generating ephemeral keys for each connection (zmq.curve_keypair() and server doesn't enforce having to know about the client's public key in a local store) 2) not whitelisting localhost
jsmitchell (Thu, 16 Feb 2017 16:31:24 GMT):
I'm concerned that we'll need to crack into the zmq internals to support this given the (i think) need for a two step process
jsmitchell (Thu, 16 Feb 2017 16:33:00 GMT):
```[16:17:47 DEBUG base] version: b'1.0', request_id: b'1', domain: '', address: '127.0.0.1', identity: b'', mechanism: b'CURVE'
[16:17:47 DEBUG base] ALLOWED (CURVE allow any client)
[16:17:47 DEBUG base] ZAP reply code=b'200' text=b'OK'
[16:17:47 DEBUG interconnect] receiving GOSSIP_REGISTER message
[16:17:47 DEBUG gossip_handlers] got peer register message from b'a153df0a4a5183f84c8786b-c6e0552bf84566fddeb9249'. sending ack
[16:17:47 DEBUG interconnect] sending GOSSIP_ACK to b'a153df0a4a5183f84c8786b-c6e0552bf84566fddeb9249'```
jsmitchell (Thu, 16 Feb 2017 16:33:15 GMT):
the plumbing works though
jsmitchell (Thu, 16 Feb 2017 17:32:27 GMT):
These docs seem to indicate that the server keys are only important for the authenticating that the client is talking to the expected server. All messages after the handshake are encrypted using the transient keys which are generated and exchanged for the connection
jsmitchell (Thu, 16 Feb 2017 17:32:29 GMT):
https://rfc.zeromq.org/spec:26/CURVEZMQ/
TomBarnes (Thu, 16 Feb 2017 19:55:16 GMT):
Why is protocol buffers used for encoding STL messages but objects within those messages (for instance the the object associates with a Merle tree address) are encoded with CBOR?
jsmitchell (Thu, 16 Feb 2017 19:57:05 GMT):
we're going to change that to protobuf
jsmitchell (Thu, 16 Feb 2017 19:58:55 GMT):
takemiya-san from the Iroha project was making the case for flatbuffers instead of protobuf
jsmitchell (Thu, 16 Feb 2017 19:59:09 GMT):
due to performance and memory footprint
jsmitchell (Thu, 16 Feb 2017 19:59:32 GMT):
it also sounds like they are working on a native flatbuffer store, which sounded cool
jsmitchell (Thu, 16 Feb 2017 19:59:32 GMT):
it also looks like they are working on a native flatbuffer store, which sounded cool
jsmitchell (Thu, 16 Feb 2017 20:00:37 GMT):
but we will stick with protobuf for now until there is a reason to reconsider
TomBarnes (Thu, 16 Feb 2017 20:02:35 GMT):
So when transaction family is published, it will (must) include a protobuf file that describes all of the acceptable state objects that it can handle?
pschwarz (Thu, 16 Feb 2017 20:03:14 GMT):
It doesn't have to be a protobuf file - those encodings are family-specific
pschwarz (Thu, 16 Feb 2017 20:03:52 GMT):
It certainly would need to be documented for consumers of that family, whatever the encoding.
jsmitchell (Thu, 16 Feb 2017 20:04:26 GMT):
yeah, that's just a blob of bytes from the core's perspective
TomBarnes (Thu, 16 Feb 2017 20:07:16 GMT):
The encoding of an object in Python and the object encoding in Java may not create the same number of bytes; if embedded in a message (like trnasction objects are), the hash of the message will be different. I thought that was the entire reason we moved to prototype- explicit serialization.
jsmitchell (Thu, 16 Feb 2017 20:08:31 GMT):
it is the responsibility of the implementers of the transaction processors to ensure that they encodings they choose are deterministic and consistent
jsmitchell (Thu, 16 Feb 2017 20:08:43 GMT):
across all languages that they choose to implement in
adamludvik (Thu, 16 Feb 2017 20:20:52 GMT):
If you look at the xo transaction family, it just uses CSV byte strings to encode the payload.
adamludvik (Thu, 16 Feb 2017 20:21:38 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/sawtooth_xo/processor/handler.py#L55
adamludvik (Thu, 16 Feb 2017 20:21:59 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/sawtooth_xo/processor/handler.py#L186
boydjohnson (Thu, 16 Feb 2017 20:26:43 GMT):
Just wanted to give an update on where I am at with different components in a node stopping and the others behaving in a ok manner. On my branch, the python transaction processor can come and go (if given time to gracefully do so) even during load (There needs to be a minimum of 1 transaction processor for the transaction family that you are loading with). The validator can stop (Still needs 2 sigints) and the transaction processors will make a new connection and send a register request when the validator becomes available. What I haven't solved yet is the validator going down under load and the transaction processors behaving nicely -- probably inferring that they should drop all in process transactions and reregister again when the validator becomes available. I think just describing it here gives me new insight, but wanted to let people know where I'm at.
jsmitchell (Thu, 16 Feb 2017 21:43:42 GMT):
@boydjohnson do you want to look https://github.com/hyperledger/sawtooth-core/pull/94 before it gets merged?
jsmitchell (Thu, 16 Feb 2017 21:43:42 GMT):
@boydjohnson do you want to look https://github.com/hyperledger/sawtooth-core/pull/94 over before it gets merged?
boydjohnson (Thu, 16 Feb 2017 21:44:05 GMT):
Yeah, I'll do so.
boydjohnson (Thu, 16 Feb 2017 21:53:08 GMT):
@jsmitchell What are the implications for hard coded pubkey and private key? Would a next step be local configuration of those keys?
jsmitchell (Thu, 16 Feb 2017 21:54:26 GMT):
so, those keys are associated with the 'server' identity. In a non peer to peer example, you'd have a single server or set of servers with the private key and you'd distribute the server public key to your clients
jsmitchell (Thu, 16 Feb 2017 21:54:46 GMT):
the purpose is to make sure you are talking to a server that can prove they have access to that secret key
jsmitchell (Thu, 16 Feb 2017 21:55:04 GMT):
critically, those keys are _not_ used for encryption of the communications channel
jsmitchell (Thu, 16 Feb 2017 21:56:10 GMT):
encryption is based on transient keys generated by the client (client's pubkey goes to server), and the server generates a transient pubkey which is encrypted with the clients pubkey and is sent to the client
jsmitchell (Thu, 16 Feb 2017 21:57:04 GMT):
because we are peer to peer, everybody needs the private key, and that initial 'server identity check' is meaningless
jsmitchell (Thu, 16 Feb 2017 21:57:30 GMT):
ideally, we could just skip it, but it's baked into the CurveZMQ protocol
jsmitchell (Thu, 16 Feb 2017 21:58:21 GMT):
yes, we may move them to local config
jsmitchell (Thu, 16 Feb 2017 21:58:49 GMT):
also there might be other use cases which justify the complexity of distributing all the keys to permissioned nodes
jsmitchell (Thu, 16 Feb 2017 21:59:07 GMT):
but, we will get permissioned behavior from higher up the stack too
boydjohnson (Thu, 16 Feb 2017 21:59:46 GMT):
Thanks.
amundson (Thu, 16 Feb 2017 22:47:40 GMT):
```dpkg: error processing archive build/debs/python3-sawtooth-sdk_0.8.1~dev1-1_all.deb (--install):
trying to overwrite '/usr/lib/python3/dist-packages/sawtooth_protobuf/batch_pb2.py', which is also in package python3-sawtooth-cli 0.8.1~dev1-1
```
amundson (Thu, 16 Feb 2017 22:47:43 GMT):
oops :)
TomBarnes (Thu, 16 Feb 2017 22:49:21 GMT):
regarding state blobs: got it - thanks!
amundson (Thu, 16 Feb 2017 22:50:59 GMT):
state blobs are the only place we need deterministic encoding; other places, we keep the original bytes around as originally generated (this is different than 0.7)
jsmitchell (Thu, 16 Feb 2017 22:50:59 GMT):
python3-sawtooth-protobuf package coming up
jsmitchell (Thu, 16 Feb 2017 22:54:27 GMT):
@amundson: https://github.com/hyperledger/sawtooth-core/pull/92 is ready to merge
amundson (Thu, 16 Feb 2017 22:55:32 GMT):
thx
amundson (Fri, 17 Feb 2017 14:48:44 GMT):
this was mentioned in #general - http://opentracing.io/
amundson (Fri, 17 Feb 2017 14:49:13 GMT):
would be pretty cool to submit a transaction and see it's lifetime across rest api, validator, tp, consensus, etc.
pschwarz (Fri, 17 Feb 2017 15:43:30 GMT):
With the merging of https://github.com/hyperledger/sawtooth-core/pull/96, the data directory has change from `
pschwarz (Fri, 17 Feb 2017 15:43:30 GMT):
With the merging of https://github.com/hyperledger/sawtooth-core/pull/96, the data directory for 0.8 has change from `
rcampos@altus.cr (Fri, 17 Feb 2017 15:55:52 GMT):
Has left the channel.
amundson (Fri, 17 Feb 2017 17:52:30 GMT):
which means, for native windows installs, you must set SAWTOOTH_HOME for now
pschwarz (Fri, 17 Feb 2017 18:13:11 GMT):
Trying to decide where a validator's identity key should live. Would this also make sense in the data directory, or peer of that? The later makes sense when there `SAWTOOTH_HOME` is set, but less so with `/var/lib/sawtooth`
adamludvik (Fri, 17 Feb 2017 19:04:26 GMT):
I know this has come up before, but I'd like to propose that the sawtooth-validator docker container should also start up the additional processes needed to make it useful. According to docker's own best practices page "it is not necessarily true that there should be only one operating system process per container" (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/)
Having these processes startup in the sawtooth validator container would make it easier to keep code that depends on the container up to date because it would shift the responsibility of orchestration into the container. This would also reduce code duplication across tests that startup a working validator. Finally, it would make the sawtooth-validator container more of a logical "whole" since I am not sure the validator is very useful without the rest_api, validator registry processor, and configuration processor.
amundson (Fri, 17 Feb 2017 19:08:23 GMT):
pschwarz: likely SAWTOOTH_HOME/etc/keys/ or /etc/sawtooth/keys/
amundson (Fri, 17 Feb 2017 19:08:23 GMT):
@pschwarz: likely SAWTOOTH_HOME/etc/keys/ or /etc/sawtooth/keys/
amundson (Fri, 17 Feb 2017 19:13:20 GMT):
@adamludvik - validator registry is poet specific and wouldn't apply to another consensus mechanism; config processor could in theory be swapped out with another txn family that updates those settings using a different authorization approach; and combining them into the validator's docker container would make managing them special (they work different than all other TPs) which seems undesirable.
adamludvik (Fri, 17 Feb 2017 19:25:39 GMT):
I guess that makes sense. Perhaps it would make sense to have a "sawtooth-poet-validator" or "sawtooth-std-validator" container that started up a selection of processes? Or are we are getting into the domain of docker-compose then... It just seems odd to have a lot of docker containers that have limited usefulness in isolation.
amundson (Fri, 17 Feb 2017 20:04:24 GMT):
Well, if we put it all in one docker, we may as well have used a vm
cianx (Sat, 18 Feb 2017 00:19:30 GMT):
I made this change https://github.com/hyperledger/sawtooth-core/pull/101/files#diff-d98fd4214fe743c74766d752fb839083R24 to the sawtooth_base docker file. Now run_tests hangs(10min+) during the docker build on that step. How do I resolve this?
cianx (Sat, 18 Feb 2017 00:27:12 GMT):
I finally got a time out message from the apt, unclear why it can't reach the internet today. The rest of the vagrant box can.
amundson (Sat, 18 Feb 2017 00:47:36 GMT):
maybe docker needs different proxy settings. @rbuysse has probably played with that the most
cianx (Sat, 18 Feb 2017 02:08:06 GMT):
Looks like that is the issue. If I log out of vpn I can get it to run. The proxy is set up correctly in vagrant. There must be a way to tell docker about it.
amundson (Sat, 18 Feb 2017 14:59:00 GMT):
IIRC, the hard part is doing that and not modifying the dockerfile directly
amundson (Mon, 20 Feb 2017 15:48:09 GMT):
I'm a bit nervous about too much **kwargs stuff going in. If we are going to have the pattern where we hide the protobuf classes within another class and then construct using **kwargs, seems like we might want to make sure that methodology is constrained to just a few places and not used everywhere.
amundson (Mon, 20 Feb 2017 15:48:09 GMT):
I'm a bit nervous about too much kwargs stuff going in. If we are going to have the pattern where we hide the protobuf classes within another class and then construct using kwargs, seems like we might want to make sure that methodology is constrained to just a few places and not used everywhere.
pschwarz (Mon, 20 Feb 2017 16:03:16 GMT):
Is that in reference to a particular PR?
boydjohnson (Mon, 20 Feb 2017 16:45:54 GMT):
What did we figure out about squashing commits on a PR. It is probably still a good idea to leave the commits unsquashed until approval happens?
vikas.singh (Mon, 20 Feb 2017 17:16:16 GMT):
Has joined the channel.
adamludvik (Mon, 20 Feb 2017 17:29:21 GMT):
@cianx I'll look into the VPN issue today
adamludvik (Mon, 20 Feb 2017 18:55:15 GMT):
@cianx What do you do to get the proxy working within vagrant? I am not able to do `sudo apt-get update` within vagrant when connected to the VPN.
adamludvik (Mon, 20 Feb 2017 22:20:41 GMT):
@cianx I created a PR assigned to you to fix the issue
boydjohnson (Mon, 20 Feb 2017 22:58:43 GMT):
@pschwarz Is my thinking right that we would always require the config transaction processor if there are batches in the GenesisData, and that any other required transaction processor would be set via on chain configuration? Then require_txn_processors in the executor could be called require_config?
amundson (Mon, 20 Feb 2017 23:05:39 GMT):
yes, at least for now, if the setting is empty for the txn family list, then it should default to the list containing only the config transaction family
amundson (Mon, 20 Feb 2017 23:07:03 GMT):
could we simplify the rule to say, if it's not set, then they are all required?
amundson (Mon, 20 Feb 2017 23:07:46 GMT):
that way, we could support alternate config family implementations during this bootstrap process as well
amundson (Mon, 20 Feb 2017 23:07:59 GMT):
(without ever explicitly setting it in the conf file)
boydjohnson (Mon, 20 Feb 2017 23:11:43 GMT):
So that would be if there are no listed required txn processors in on chain configuration, all transactions would wait until there is a transaction processor of the right type online?
amundson (Mon, 20 Feb 2017 23:13:59 GMT):
yes, with the assumption that the very first transactions should set that list on-chain
allwelder (Tue, 21 Feb 2017 08:31:56 GMT):
Has joined the channel.
boydjohnson (Tue, 21 Feb 2017 15:18:24 GMT):
@amundson and I were talking about having a trace logging level that would show more than debug since some of our debug logging could be helpful in some situations but probably isn't necessary even at the debug level. Here is a stackoverflow answer that shows how to set a custom debug level. http://stackoverflow.com/a/16955098
adamludvik (Tue, 21 Feb 2017 15:23:46 GMT):
@boydjohnson I like the idea. Would we leave trace statements in the code like debug statements? Seems like if there were trace statements everywhere there's a chance it could become unreadable.
boydjohnson (Tue, 21 Feb 2017 15:25:03 GMT):
Yeah, there would be trace logging statements. Do you mean the code would become unreadable or the logs? Some of our current debug logging statements could turn into trace logging statements.
adamludvik (Tue, 21 Feb 2017 15:29:10 GMT):
Lol, well worst case scenario, the code could become unreadable if there was a trace statement for every python statement, but I don't think that would happen I'd be more concerned that, especially if we have a lot of concurrency and parallelism, the logs may be too cluttered.
adamludvik (Tue, 21 Feb 2017 15:29:10 GMT):
Lol, well worst case scenario, the code could become unreadable if there was a trace statement for every python statement, but I don't think that would happen. I'd be more concerned that, especially if we have a lot of concurrency and parallelism, the logs may be too cluttered.
amundson (Tue, 21 Feb 2017 15:29:44 GMT):
I think my idea for how to do it is cleaner - just get a "LOGGER_TRACE = logging.getLogger("trace." + __name__)"
adamludvik (Tue, 21 Feb 2017 15:30:24 GMT):
That would be very greppable
amundson (Tue, 21 Feb 2017 15:30:37 GMT):
well, it specifically doesn't require any additional shared code
amundson (Tue, 21 Feb 2017 15:31:04 GMT):
it does require configuring the trace. logger namespace turn it off
adamludvik (Tue, 21 Feb 2017 15:32:33 GMT):
Do we have any definitions for what the different logging levels mean right now?
amundson (Tue, 21 Feb 2017 15:53:35 GMT):
not explicitly stated, no
drozd (Tue, 21 Feb 2017 20:18:47 GMT):
Has joined the channel.
boydjohnson (Tue, 21 Feb 2017 21:00:56 GMT):
We don't have anything to set config settings on the fly, do we? I have set them in the config batch used by the genesis tool, but nowhere else.
amundson (Tue, 21 Feb 2017 22:22:32 GMT):
you can use 'sawtooth config' to generate a file with the appropriate batches
pschwarz (Tue, 21 Feb 2017 22:23:17 GMT):
We don't, yet, have a CLI tool for submitting those transactions to a already-running validator
pschwarz (Tue, 21 Feb 2017 22:23:17 GMT):
We don't, yet, have a CLI tool for submitting sawtooth_config transactions to a already-running validator
amundson (Tue, 21 Feb 2017 22:23:21 GMT):
I don't think we have 'sawtooth submit' yet...
amundson (Tue, 21 Feb 2017 22:23:43 GMT):
wonder if intkey tool will send whatever branches with it's load command
boydjohnson (Tue, 21 Feb 2017 22:24:01 GMT):
Yeah, it might...
boydjohnson (Tue, 21 Feb 2017 23:18:12 GMT):
"intkey load -f config.batch" works.
boydjohnson (Tue, 21 Feb 2017 23:19:36 GMT):
I also want to mention that I seemed to introduce a bug. When transaction processors are waiting to reregister after the validator has gone away they max out their cpu. I will look into it tonight.
boydjohnson (Wed, 22 Feb 2017 15:58:11 GMT):
So to turn on debug logging inside asyncio you can "export PYTHONASYNCIODEBUG=1". When doing that the bug I mentioned yesterday happens less often but when it does it gives this output indefinitely: ```[15:20:30 DEBUG base_events] poll took 0.032 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.024 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.078 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.026 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.021 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.021 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.025 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.020 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.025 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.217 ms: 0 events
```
boydjohnson (Wed, 22 Feb 2017 15:58:11 GMT):
So to turn on debug logging inside asyncio you can "export PYTHONASYNCIODEBUG=1". When doing that the bug I mentioned yesterday happens less often but when it does it gives this output indefinitely: ```[15:20:30 DEBUG base_events] poll took 0.032 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.024 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.078 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.026 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.021 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.021 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.025 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.020 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.025 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.023 ms: 0 events
[15:20:30 DEBUG base_events] poll took 0.217 ms: 0 events
```
amundson (Wed, 22 Feb 2017 19:44:49 GMT):
A large PR just went in which removes legacy code from master.
boydjohnson (Wed, 22 Feb 2017 22:32:15 GMT):
I noticed we aren't linting the manage package and there are a few things that the linter would be able to catch. @toddojala
toddojala (Wed, 22 Feb 2017 22:34:42 GMT):
I shall fix 'em
boydjohnson (Wed, 22 Feb 2017 22:35:06 GMT):
Cool, Thanks!
rbuysse (Wed, 22 Feb 2017 23:11:08 GMT):
I'm getting an error when running the tests on windows.
rbuysse (Wed, 22 Feb 2017 23:11:40 GMT):
the DevModeTestSuite is throwing:
rbuysse (Wed, 22 Feb 2017 23:11:42 GMT):
Checking for pre-existing state: WARNING:txnintegration.integer_key_communication:operation failed: [Errno 10061] No connection could be made because the target machine actively refused it
rbuysse (Wed, 22 Feb 2017 23:12:31 GMT):
this last passed before the signing stuff was committed on Feb 15, any chance those things are related?
bartcant (Thu, 23 Feb 2017 02:18:47 GMT):
Has joined the channel.
amundson (Thu, 23 Feb 2017 02:40:44 GMT):
seems likely
amundson (Thu, 23 Feb 2017 16:01:28 GMT):
The python toml library does not return very good error messages when you make a syntax error in the toml file
amundson (Thu, 23 Feb 2017 16:02:12 GMT):
```Traceback (most recent call last):
File "./bin/validator", line 37, in
amundson (Thu, 23 Feb 2017 16:02:24 GMT):
that's the error fi you forget to quote a string
amundson (Thu, 23 Feb 2017 17:53:05 GMT):
anyone else seeing this when starting up a vaildator?
amundson (Thu, 23 Feb 2017 17:53:11 GMT):
```Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 166, in on_chain_updated
self._candidate_block = self._build_block(chain_head)
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 73, in _build_block
prev_state = self._get_previous_block_root_state_hash(chain_head)
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 63, in _get_previous_block_root_state_hash
if blkw.previous_block_id == NULL_BLOCK_IDENTIFIER:
AttributeError: 'NoneType' object has no attribute 'previous_block_id'
```
amundson (Thu, 23 Feb 2017 17:54:15 GMT):
@boydjohnson - the validator.stop() call in finally: in validator main() doesn't make sense to me
boydjohnson (Thu, 23 Feb 2017 17:55:12 GMT):
Yeah, the validator shutdown is something that I've wanted to get to.
agunde (Thu, 23 Feb 2017 17:55:23 GMT):
@amundson Did you do the genesis command? That looks like the chain_head was not set correctly.
amundson (Thu, 23 Feb 2017 17:56:07 GMT):
@agunde: I did not
amundson (Thu, 23 Feb 2017 17:58:28 GMT):
@pschwarz ^
jjason (Thu, 23 Feb 2017 19:05:24 GMT):
@amundson Yes. I was having that problem yesterday. @pschwarz set me on the straight and narrow. I had failed to create the genesis block.
amundson (Thu, 23 Feb 2017 19:17:54 GMT):
I created a JIRA task for it
pschwarz (Thu, 23 Feb 2017 19:37:44 GMT):
@mfford and I added a task for documenting the start up process (a missing element for people)
joacomoreno (Fri, 24 Feb 2017 17:53:36 GMT):
Has joined the channel.
adamludvik (Fri, 24 Feb 2017 18:53:51 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=8jnkcnhxuQbJk6Nv8) @jsmitchell Did we find a work around for this, or are we not supporting lmdb on Windows?
adamludvik (Fri, 24 Feb 2017 18:54:38 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=iti2dZZSBzH3uy3n7) @Tom Barnes Probably a better post to reference...
jsmitchell (Fri, 24 Feb 2017 23:11:28 GMT):
Once the local config stuff is in place we can switch to a platform/machine specific config setting for the database size
jsmitchell (Fri, 24 Feb 2017 23:12:37 GMT):
Or we might insist that validators run in containers that have file systems that support sparse files with good performance
rjones (Fri, 24 Feb 2017 23:48:50 GMT):
Has joined the channel.
rjones (Fri, 24 Feb 2017 23:49:33 GMT):
I set up a test project with a new JIRA workflow, could you try it out and let me know if you want something like it for sawtoothlake? https://jira.hyperledger.org/projects/WFT/issues/?filter=allopenissues let me know who should be an admin
Dan (Sun, 26 Feb 2017 16:21:37 GMT):
@mfford --^
PacoEcotrust (Mon, 27 Feb 2017 08:54:06 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=sW89LdXs3Jjae7mnZ) @boydjohnson , thank you very much. I would like to ask to the developer of Marketplace Navigator, why is necessary a new server?. it would not be enough change only the User Interface (Terminal for Navigator)
mansoor (Mon, 27 Feb 2017 14:56:25 GMT):
Has joined the channel.
boydjohnson (Mon, 27 Feb 2017 15:31:55 GMT):
@pschwarz I am making changes to my transaction processor configuration list support in the Transaction Executor PR branch and a thought came to me that wasn't addressed by anyone's comments: Since there can be 1 Executor with several Executor threads the waiting for transaction processor functionality should probably be owned by the TransactionExecutor not the TransactionExecutorThread, since configuration and processors registered don't change by thread.
pschwarz (Mon, 27 Feb 2017 15:32:27 GMT):
That makes sense
boydjohnson (Mon, 27 Feb 2017 15:32:42 GMT):
Sounds good. Thanks!
pschwarz (Mon, 27 Feb 2017 15:34:37 GMT):
Just to make sure I'm thinking it makes sense: in this case, if one txn processor is blocking, others can still process txns on other families that may have available processors, correct?
boydjohnson (Mon, 27 Feb 2017 15:35:37 GMT):
Yeah, that will work with my implementation, but we won't see it until we have the parallel scheduler.
pschwarz (Mon, 27 Feb 2017 15:37:14 GMT):
Ok, still making sense then :)
boydjohnson (Mon, 27 Feb 2017 15:37:26 GMT):
Cool.
jsmitchell (Mon, 27 Feb 2017 16:33:36 GMT):
@boydjohnson: have you done any testing with interconnect using ipc transport uris?
jsmitchell (Mon, 27 Feb 2017 16:33:48 GMT):
i.e. ipc:///tmp/somefile
boydjohnson (Mon, 27 Feb 2017 16:34:07 GMT):
I have not except. The monitor socket in Stream in the python sdk uses ipc.
jsmitchell (Mon, 27 Feb 2017 16:34:22 GMT):
for some reason is is not working
jsmitchell (Mon, 27 Feb 2017 16:34:36 GMT):
the validator never sees the connection from the transaction processor
boydjohnson (Mon, 27 Feb 2017 16:35:18 GMT):
Hmm. I would have thought it would work. I'll try sometime.
jsmitchell (Mon, 27 Feb 2017 16:35:37 GMT):
i lied, it actually does work
boydjohnson (Mon, 27 Feb 2017 16:35:49 GMT):
Oh, was it the three slashes?
jsmitchell (Mon, 27 Feb 2017 16:35:58 GMT):
but it doesn't print out any kind of error if it can't open the fd
jsmitchell (Mon, 27 Feb 2017 16:36:18 GMT):
(I had started the validator as root and the tp not)
boydjohnson (Mon, 27 Feb 2017 16:36:47 GMT):
On the client side, right? oh. That is because the thread inside of the Stream class swallows errors.
boydjohnson (Mon, 27 Feb 2017 16:38:24 GMT):
@zac Saw similar issues on a bad hostname, where the Stream class wouldn't connect to it and there was an error, but the thread inside of the Stream class swallowed the error, possibly because it is a daemon thread.
jsmitchell (Mon, 27 Feb 2017 16:39:46 GMT):
can you create a jira about investigating a fix for that?
boydjohnson (Mon, 27 Feb 2017 16:39:56 GMT):
Yeah, I'll do that.
jsmitchell (Mon, 27 Feb 2017 17:17:06 GMT):
@boydjohnson @agunde @jjason @cianx: can one of you review/approve https://github.com/hyperledger/sawtooth-core/pull/118
jjason (Mon, 27 Feb 2017 18:19:01 GMT):
Done
boydjohnson (Mon, 27 Feb 2017 22:20:49 GMT):
@jsmitchell I have an initial network level test task that it is my understanding is a test for validator network functionality. Sort of like a gossip smoke test. Because it seems like you have some interesting network changes around peering that might be up soon, do you think it makes sense for me to base my current work off of your branch?
jsmitchell (Mon, 27 Feb 2017 22:56:14 GMT):
@boydjohnson: can you defer it for a few days, or do you need to work on it now?
boydjohnson (Tue, 28 Feb 2017 01:19:54 GMT):
@jsmitchell I can defer it.
boydjohnson (Tue, 28 Feb 2017 15:31:04 GMT):
`intkey load
batches: 1001 batch/sec: 304.1413737474129`
boydjohnson (Tue, 28 Feb 2017 15:31:04 GMT):
What do you make of the difference between ours? Mine is on my fix threading shutdown-startup issues branch.
jsmitchell (Tue, 28 Feb 2017 15:31:30 GMT):
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ ./bin/intkey load
batches: 1001 batch/sec: 743.2837209911658
```
boydjohnson (Tue, 28 Feb 2017 15:33:10 GMT):
Nice speedup on the secp signing! Is that about what you have been seeing for batches per second?
jsmitchell (Tue, 28 Feb 2017 15:33:26 GMT):
you should run intkey create_batch :)
boydjohnson (Tue, 28 Feb 2017 15:34:02 GMT):
Yeah, I saw that is much faster. It blew up for me without doing that.
boydjohnson (Tue, 28 Feb 2017 15:39:40 GMT):
I'm guessing "intkey create_batch -B 10" with the maximum txns per batch being 10 for your run?
jsmitchell (Tue, 28 Feb 2017 15:40:04 GMT):
@boydjohnson: have you seen a thing where a node gets more than the 2-tuple on initial recv_multipart and it throws ValueError on the unpack?
boydjohnson (Tue, 28 Feb 2017 15:40:40 GMT):
I have seen that while working on the SendReceive, but not on master.
jsmitchell (Tue, 28 Feb 2017 15:40:49 GMT):
for some reason this message contains multiple identities
jsmitchell (Tue, 28 Feb 2017 15:40:56 GMT):
prior to the payload
boydjohnson (Tue, 28 Feb 2017 15:41:09 GMT):
If you set an identity on the Router socket it will receive it on every message.
jsmitchell (Tue, 28 Feb 2017 15:41:21 GMT):
```[15:32:18.313 DEBUG gossip_handlers] got peer register message from b'tcp://0.0.0.0:8802-ab2b105fe389a01b126c455'. sending ack
[15:32:18.314 DEBUG gossip] Added identity b'tcp://0.0.0.0:8802-ab2b105fe389a01b126c455', connected identities are now [b'tcp://0.0.0.0:8801-37ba9c769772e1d98b713a9', b'tcp://0.0.0.0:8802-ab2b105fe389a01b126c455']
[15:32:18.314 DEBUG interconnect] ServerThread sending GOSSIP_ACK to b'tcp://0.0.0.0:8802-ab2b105fe389a01b126c455'
[15:32:18.321 CRITICALinterconnect] TOO MUCH FROM RECV_MULTIPART: [b'tcp://0.0.0.0:8801-37ba9c769772e1d98b713a9', b'tcp://0.0.0.0:8802-79688e7ad3bc8b6cd1baf99', b'\x08\xcb\x01\x12\x80\x018cba4e4e26a44433b982bcde9aa8fd5bc452e99015a554cee83b3f8db5eb7055510134147ca51e662c29230c1f20d79bd8670f4005430ba82636cba85338bcdb']
```
boydjohnson (Tue, 28 Feb 2017 15:41:23 GMT):
as well as the dealer's identity.
jsmitchell (Tue, 28 Feb 2017 15:41:56 GMT):
@boydjohnson: I think I just did `intkey create_batch -c 1000`
boydjohnson (Tue, 28 Feb 2017 15:42:27 GMT):
Wow, that is the default, I think.
boydjohnson (Tue, 28 Feb 2017 15:43:16 GMT):
In your branch have you changed SendReceive.setup(), where only the Dealer socket gets an identity?
jsmitchell (Tue, 28 Feb 2017 15:43:20 GMT):
(I changed the first part of the identity to be endpoint so I could make sense of what was going on)
jsmitchell (Tue, 28 Feb 2017 15:44:10 GMT):
yep, only the dealer has an identity set in setup()
boydjohnson (Tue, 28 Feb 2017 15:44:16 GMT):
Hmm.
jsmitchell (Tue, 28 Feb 2017 15:58:38 GMT):
the node being connected to also sends two acks as a result of this
boydjohnson (Tue, 28 Feb 2017 16:02:27 GMT):
Looking through those logging statements there look to be 2 8802 identities. In the line just before the CRITICAL logging it sends an ack to 8802 with one identity and receives a message where one identity is 8802.
jsmitchell (Tue, 28 Feb 2017 16:03:26 GMT):
yeah, it's like it does it twice
jsmitchell (Tue, 28 Feb 2017 16:03:40 GMT):
once correctly, and then with the extra identity
jsmitchell (Tue, 28 Feb 2017 16:15:31 GMT):
i see what it is
wheelsinar (Wed, 01 Mar 2017 13:25:52 GMT):
Has joined the channel.
amundson (Wed, 01 Mar 2017 14:59:50 GMT):
join #sawtoothlake-pr-review for PR notifications
jsmitchell (Wed, 01 Mar 2017 15:09:28 GMT):
@boydjohnson or @agunde: Could one of you do a quick review of https://github.com/hyperledger/sawtooth-core/pull/132
boydjohnson (Wed, 01 Mar 2017 15:11:05 GMT):
@jsmitchell Looking at it right now.
jsmitchell (Wed, 01 Mar 2017 15:11:15 GMT):
cheers
rjones (Wed, 01 Mar 2017 15:18:00 GMT):
the automatic PR notifications in #sawtoothlake-pr-review aren't quite hooked up yet, I'm still working on it :)
jsmitchell (Wed, 01 Mar 2017 15:18:31 GMT):
thanks, ry
rjones (Wed, 01 Mar 2017 15:33:54 GMT):
it should fire now on PR, let's wait and see
boydjohnson (Wed, 01 Mar 2017 15:35:26 GMT):
@jsmitchell I approved the PR. Something to think about when doing more of the peering stuff is keeping threadsafety during removing a connection to a peer. The dispatcher.remove_send_message modifies the dispatcher._send_message dict that could be being accessed from within the dispatcher thread.
jsmitchell (Wed, 01 Mar 2017 15:59:58 GMT):
are you suggesting I wrap the add and del in with self._condition: ?
awalias (Wed, 01 Mar 2017 16:03:51 GMT):
Has joined the channel.
jsmitchell (Wed, 01 Mar 2017 16:14:09 GMT):
@rjones: seem to be getting some dups on the PRs
boydjohnson (Wed, 01 Mar 2017 16:18:05 GMT):
@jsmitchell that seems like the easiest way to do it. You could make a threadsafe dict implementation just for this purpose. I don't fully know the best way. Since the _condition is also being used to keep theadsafety on _message_information it might make more sense to make a threadsafe dict and use it for both message_information and _send_message.
boydjohnson (Wed, 01 Mar 2017 16:18:05 GMT):
@jsmitchell that seems like the easiest way to do it. You could make a threadsafe dict implementation just for this purpose. I don't fully know the best way. Since the condition is also being used to keep theadsafety on message_information it might make more sense to make a threadsafe dict and use it for both message_information and _send_message.
boydjohnson (Wed, 01 Mar 2017 16:18:05 GMT):
@jsmitchell that seems like the easiest way to do it. You could make a threadsafe dict implementation just for this purpose. I don't fully know the best way. Since the condition is also being used to keep theadsafety on message_information it might make more sense to make a threadsafe dict and use it for both message_information and send_message.
jsmitchell (Wed, 01 Mar 2017 16:19:45 GMT):
premature optimization maybe. Let's take a closer look at it when we get to perf tuning and look at lock durations.
boydjohnson (Wed, 01 Mar 2017 16:20:07 GMT):
Sounds good.
mfford (Wed, 01 Mar 2017 18:49:38 GMT):
@rjones you can make me the admin of the Sawtooth Lake project in JIRA. As far as the test workflow goes, we are looking at requirements for further utilizing the Hyperledger JIRA for STL and will get back to you.
zac (Wed, 01 Mar 2017 19:17:24 GMT):
@amundson: Have had a chat with @boydjohnson and @agunde regarding `CLIENT_BATCH_SUBMIT_RESPONSE` Messages waiting until the batch has been committed or rejected to send. Would like to run an approach by you.
zac (Wed, 01 Mar 2017 19:18:10 GMT):
The idea is that a handler would be added to the batch submit process at the end, which would wait on a Condition from the block store and the batch cache
zac (Wed, 01 Mar 2017 19:18:47 GMT):
If the block store added the submitted batch, the handler is notified and sends the ZMQ response
rjones (Wed, 01 Mar 2017 19:19:06 GMT):
@mfford you already were an admin on JIRA for STL
zac (Wed, 01 Mar 2017 19:19:37 GMT):
Similarly, if the batch is removed from the batch cache but _not_ added to the block store, a response is sent back, notifying the client that the batch was rejected
mfford (Wed, 01 Mar 2017 19:49:08 GMT):
@rjones yup. Just was confirming that I retain that role, but I could have certainly said it better.
rjones (Wed, 01 Mar 2017 21:01:43 GMT):
@jsmitchell here is the javascript for the inbound hook: https://gist.github.com/rjones-lf/fbe68e5fc9cef6ae6a8847df7d08f739 this is a copy of the default one. I will be offline for a couple weeks but feel free to kibitz on how you want that hook (the one that generates traffic in #sawtoothlake-pr-review) modified
rjones (Wed, 01 Mar 2017 21:02:12 GMT):
or if you come up with anything you want changed in the next... three hours or so? I can make changes
amundson (Wed, 01 Mar 2017 23:16:56 GMT):
@rjones is someone your backup for the next few weeks?
rjones (Thu, 02 Mar 2017 00:00:15 GMT):
@amundson yes, @jwagantall will be
jwagantall (Thu, 02 Mar 2017 00:00:15 GMT):
Has joined the channel.
jwagantall (Thu, 02 Mar 2017 00:00:32 GMT):
me \o/
jwagantall (Thu, 02 Mar 2017 00:00:40 GMT):
:raised_hands:
jsmitchell (Thu, 02 Mar 2017 00:05:54 GMT):
nice! Thanks @rjones - see you in a few weeks
jsmitchell (Thu, 02 Mar 2017 00:06:16 GMT):
hi @jwagantall
jwagantall (Thu, 02 Mar 2017 00:06:28 GMT):
hi! :) tell me
domingohui (Thu, 02 Mar 2017 02:33:27 GMT):
Has joined the channel.
Dan (Thu, 02 Mar 2017 14:32:07 GMT):
@amundson for local config settings, I'll switch spec from StudlyCaps to snake_case for variables unless someone has a strong feeling for some other style.
adamludvik (Thu, 02 Mar 2017 14:58:34 GMT):
Jenkins is going down for a minute to create a backup image.
adamludvik (Thu, 02 Mar 2017 15:01:25 GMT):
Back up
boydjohnson (Thu, 02 Mar 2017 16:40:17 GMT):
Hi @pschwarz Can you confirm my understanding? The key provided for the config txns would be the wif key associated with whoever is making the batch, probably not the validator key. Then after the genesis file is made, with or without genesis batches, and the validator starts up it signs the genesis block with its own key.
jsmitchell (Thu, 02 Mar 2017 16:42:27 GMT):
@zac: looks like https://github.com/hyperledger/sawtooth-core/pull/146 is ready for merge
zac (Thu, 02 Mar 2017 16:43:11 GMT):
Merged
pschwarz (Thu, 02 Mar 2017 16:44:39 GMT):
@boydjohnson that's correct
pauln (Fri, 03 Mar 2017 06:54:33 GMT):
Has joined the channel.
Romanix (Fri, 03 Mar 2017 09:04:34 GMT):
Has joined the channel.
Romanix (Fri, 03 Mar 2017 09:13:42 GMT):
Hi. I intend to do a little shared ledger / blockchain prototype - with transaction confidentiality (not all nodes should see all transaction details). From the documentation https://intelledger.github.io/ it's not clear whether Sawtooth Lake transactions are visible to all nodes or not i.e. whether it's possible to encrypt transaction details or not.
Dan (Fri, 03 Mar 2017 16:55:06 GMT):
@Romanix Good question. Short answer is you can write a transaction family that uses encrypted transactions. The pattern I've seen emerging for this is that participants sign a transaction on the side, and then the encrypted result or its hash is stored back to the blockchain.
Dan (Fri, 03 Mar 2017 16:55:30 GMT):
That opaque transaction is what is reflected in the shared ledger.
Dan (Fri, 03 Mar 2017 16:56:33 GMT):
I will say that these side-band transaction models feel at odds with the premise of a shared database.
Dan (Fri, 03 Mar 2017 16:59:10 GMT):
To fit this model into sawtooth you'd have a more sophisticated client that would orchestrate the multi-sig. Then that client would submit the encrypted result or its hash to the blockchain proper.
boydjohnson (Fri, 03 Mar 2017 16:59:10 GMT):
@Dan Does the transaction family do much checking then, if the transaction is encrypted?
kelly_ (Fri, 03 Mar 2017 17:11:02 GMT):
@boydjohnson the transaction family could check signatures of relevant parties
kelly_ (Fri, 03 Mar 2017 17:11:15 GMT):
e.g party a and party b have both signed txn hash xyz
kelly_ (Fri, 03 Mar 2017 17:11:25 GMT):
that is how IBM Fabric works I believe
kelly_ (Fri, 03 Mar 2017 18:27:41 GMT):
yup, just checked with IBM
kelly_ (Fri, 03 Mar 2017 18:27:50 GMT):
slash fabric
kelly_ (Fri, 03 Mar 2017 18:28:16 GMT):
you could define a transaction family as requring signatures on an encrypted blob before it gets added to the journal
kelly_ (Fri, 03 Mar 2017 18:28:32 GMT):
then at least you have agreement from relevant parties on the blog prior to adding it to ledger
boydjohnson (Fri, 03 Mar 2017 19:15:11 GMT):
@kelly_ Would the pubkeys of the signers be added to the ledger? Like pubkey A, pubkey B are tied to the transaction?
pschwarz (Fri, 03 Mar 2017 19:33:57 GMT):
@jsmitchell Any reason we can't have `__contains__` on the MerkleDatabase for a given address?
boydjohnson (Fri, 03 Mar 2017 19:36:25 GMT):
https://docs.python.org/3.5/faq/library.html#what-kinds-of-global-value-mutation-are-thread-safe This is from the Python docs about operations on builtin data structures that are threadsafe
jsmitchell (Fri, 03 Mar 2017 21:13:28 GMT):
@pschwarz Seems eminently feasible
pauln (Sat, 04 Mar 2017 00:03:16 GMT):
Has anyone tried running (successfully I hope) Sawtooth on Bash on Ubuntu on Windows (Bash/WSL)?
boydjohnson (Sat, 04 Mar 2017 00:09:14 GMT):
Hi @pauln, I haven't heard of anyone doing that. One thing to know is that there is a big difference between the 0.7 branch and master. If you have time let us know what you find. For the master branch we have some docker support, so that would be an option too.
pauln (Sat, 04 Mar 2017 00:11:50 GMT):
From what I'm reading on installing vagrant and other VM stuff, Bash/WSL is not ready for prime time. I'll keep poking/googling around. In the mean time I'll RTFM and follow the instruction to install on a WIN10 platform. Thanks @boydjohnson !
boydjohnson (Sat, 04 Mar 2017 00:13:28 GMT):
Your welcome!
boydjohnson (Sat, 04 Mar 2017 00:13:28 GMT):
You're welcome!
jsmitchell (Mon, 06 Mar 2017 16:02:55 GMT):
@boydjohnson or @agunde: do we have an example of returning an error instead of an ack yet?
boydjohnson (Mon, 06 Mar 2017 16:03:54 GMT):
I thought pull #162 does that.
boydjohnson (Mon, 06 Mar 2017 16:03:54 GMT):
I thought PR #162 does that.
jsmitchell (Mon, 06 Mar 2017 16:05:15 GMT):
i mean in a network response
boydjohnson (Mon, 06 Mar 2017 16:05:29 GMT):
Oh, sorry. No.
jsmitchell (Mon, 06 Mar 2017 16:06:23 GMT):
Any concerns with a GOSSIP_ERROR concept?
jsmitchell (Mon, 06 Mar 2017 16:07:03 GMT):
where the message handler would either return a GOSSIP_ACK or GOSSIP_ERROR depending on the condition
boydjohnson (Mon, 06 Mar 2017 16:08:10 GMT):
Would that be a Status enum with those two types? I would probably make sense since we might not want to be too detailed in how it was an error.
jsmitchell (Mon, 06 Mar 2017 16:08:43 GMT):
no, I was thinking a separate message type/protobuf
jsmitchell (Mon, 06 Mar 2017 16:09:00 GMT):
for ERROR
jsmitchell (Mon, 06 Mar 2017 16:09:18 GMT):
which could contain error code and message
jsmitchell (Mon, 06 Mar 2017 16:09:55 GMT):
I guess there is already this ack.status
jsmitchell (Mon, 06 Mar 2017 16:10:12 GMT):
I'll just use that for now
boydjohnson (Mon, 06 Mar 2017 16:10:33 GMT):
Ok.
boydjohnson (Mon, 06 Mar 2017 16:20:03 GMT):
@jjason @jsmitchell https://sphinxcontrib-napoleon.readthedocs.io/en/latest/ Several comments on a PR about picking a style of doc string. Some people are using the rst style docstring and some people are using Python Google docstring style. Napolean is a plugin for sphinx (packaged with sphinx 1.3 and above). The above post makes the case for Google docstrings. As an aside the autodoc plugin for Pycharm will allow you (after setting some settings) will help you write Google style docstrings.
jsmitchell (Mon, 06 Mar 2017 16:20:43 GMT):
@boydjohnson: yep, that's the approach we took for 0.7 (napoleon + google style)
amundson (Mon, 06 Mar 2017 16:25:14 GMT):
I prefer the google style. We need to write up some text explaining the desired format, etc. Perhaps as part of http://intelledger.github.io/0.8/community/contributing.html
amundson (Mon, 06 Mar 2017 16:26:19 GMT):
@rbuysse @jsmitchell - should the validator aggressively attempt to create directories if they don't exist, such as data dir and key dir?
jsmitchell (Mon, 06 Mar 2017 16:26:44 GMT):
super aggressively
amundson (Mon, 06 Mar 2017 16:27:34 GMT):
trying to think of any other daemon process that creates directories if they don't exist
amundson (Mon, 06 Mar 2017 16:27:37 GMT):
I don't think it's a thing
amundson (Mon, 06 Mar 2017 16:28:13 GMT):
so it seems to me that the correct behavior is to exit if the directories don't exist (if they are needed)
amundson (Mon, 06 Mar 2017 16:28:29 GMT):
data_dir, log_dir are certainly needed
jsmitchell (Mon, 06 Mar 2017 16:29:23 GMT):
i think key generation should be explicit too
jsmitchell (Mon, 06 Mar 2017 16:29:49 GMT):
exit if not key_dir
jsmitchell (Mon, 06 Mar 2017 16:30:03 GMT):
exit if keys not found
amundson (Mon, 06 Mar 2017 16:31:07 GMT):
ok, how about this: 1) die w/message if data_dir, log_dir don't exist; 2) die w/message if key file can't be loaded; 3) continue to load if conf_dir does not exist
amundson (Mon, 06 Mar 2017 16:31:31 GMT):
for (2), it seems like the error should be about the key file, and we don't write to the directory, so we don't really need the directory to exist per-se
jsmitchell (Mon, 06 Mar 2017 16:32:12 GMT):
@boydjohnson: thoughts on how to dispatch/handle responses which resolve futures in _receive_message()?
jsmitchell (Mon, 06 Mar 2017 16:32:12 GMT):
@boydjohnson: thoughts on how to dispatch/handle responses which resolve futures in _receive_ message()?
jsmitchell (Mon, 06 Mar 2017 16:32:12 GMT):
@boydjohnson: thoughts on how to dispatch/handle responses which resolve futures in ```_receive_message()```?
jsmitchell (Mon, 06 Mar 2017 16:32:12 GMT):
@boydjohnson: thoughts on how to dispatch/handle responses which resolve futures in '_receive_message()'?
jsmitchell (Mon, 06 Mar 2017 16:32:26 GMT):
@amundson: sounds fine
boydjohnson (Mon, 06 Mar 2017 16:33:02 GMT):
Wouldn't the component that called send have the future and be able to do what it needs to with it?
jsmitchell (Mon, 06 Mar 2017 16:33:33 GMT):
yeah, but what's the calling event?
boydjohnson (Mon, 06 Mar 2017 16:34:24 GMT):
Oh, there also are callbacks on the server futures.
jsmitchell (Mon, 06 Mar 2017 16:34:32 GMT):
I'm looking at that try, except, else in '_receive_message()'
jsmitchell (Mon, 06 Mar 2017 16:35:08 GMT):
ahh
jsmitchell (Mon, 06 Mar 2017 16:35:16 GMT):
add_callback on set_result
jsmitchell (Mon, 06 Mar 2017 16:35:22 GMT):
nice
boydjohnson (Mon, 06 Mar 2017 16:35:57 GMT):
Yeah, it isn't so great right now because each time it starts up a new thread, but me validator shutdown pr will run those in a threadpool.
boydjohnson (Mon, 06 Mar 2017 16:35:57 GMT):
Yeah, it isn't so great right now because each time it starts up a new thread, but my validator shutdown pr will run those in a threadpool.
amundson (Mon, 06 Mar 2017 16:37:39 GMT):
I think this don't-create-the-directory approach also prevents race conditions between components
jjason (Mon, 06 Mar 2017 16:54:58 GMT):
@boydjohnson @jsmitchell Okay. I am going to keep doing what I am doing as I unwittingly was doing the "right" thing....and I had PyCharm there to help me out.
vkandy (Mon, 06 Mar 2017 18:07:23 GMT):
Has joined the channel.
amundson (Mon, 06 Mar 2017 19:18:32 GMT):
what is the right approach to determine whether the contents of a wif key are valid?
amundson (Mon, 06 Mar 2017 19:19:51 GMT):
```[19:17:22.601 INFO keys] Loading signing key: /home/ubuntu/sawtooth/keys/validator.wif
Traceback (most recent call last):
File "./bin/validator", line 37, in
amundson (Mon, 06 Mar 2017 19:20:24 GMT):
that's with a .wif file with a prepended 'a' in it
jsmitchell (Mon, 06 Mar 2017 19:24:30 GMT):
```
def get_privkey_format(priv):
if isinstance(priv, int_types): return 'decimal'
elif len(priv) == 32: return 'bin'
elif len(priv) == 33: return 'bin_compressed'
elif len(priv) == 64: return 'hex'
elif len(priv) == 66: return 'hex_compressed'
else:
bin_p = b58check_to_bin(priv)
if len(bin_p) == 32: return 'wif'
elif len(bin_p) == 33: return 'wif_compressed'
else: raise Exception("WIF does not represent privkey")```
jsmitchell (Mon, 06 Mar 2017 19:24:37 GMT):
how pybitcointools does it
jsmitchell (Mon, 06 Mar 2017 19:24:57 GMT):
```def b58check_to_bin(inp):
leadingzbytes = len(re.match('^1*', inp).group(0))
data = b'\x00' * leadingzbytes + changebase(inp, 58, 256)
assert bin_dbl_sha256(data[:-4])[:4] == data[-4:]
return data[1:-4]```
amundson (Mon, 06 Mar 2017 19:26:18 GMT):
``` try:
decoded_key = signing.decode_privkey(wif_key)
except AssertionError:
raise LocalConfigurationError(
"Could not decode key contained in file (AssertionError): "
"{}".format(key_path))```
amundson (Mon, 06 Mar 2017 19:26:25 GMT):
how about something like that for now?
amundson (Mon, 06 Mar 2017 19:26:38 GMT):
I think there should be an is_valid type of thing in signing if it gets more complex
jsmitchell (Mon, 06 Mar 2017 19:26:41 GMT):
seems legit
adamludvik (Mon, 06 Mar 2017 20:27:09 GMT):
Anybody want to review a PR for me?
jsmitchell (Mon, 06 Mar 2017 20:35:14 GMT):
yeah, sure @adamludvik
adamludvik (Mon, 06 Mar 2017 20:35:26 GMT):
https://github.com/hyperledger/sawtooth-core/pull/159
adamludvik (Mon, 06 Mar 2017 20:35:28 GMT):
Thanks!
jsmitchell (Mon, 06 Mar 2017 21:56:01 GMT):
The sdk doesn't care for unknown message types
jsmitchell (Mon, 06 Mar 2017 21:56:07 GMT):
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ ./bin/tp_intkey_python tcp://loost:40000 -vv
[21:46:59 DEBUG selector_events] Using selector: ZMQSelector
[21:46:59 INFO core] register attempt: OK
[21:47:07 DEBUG core] received message of type: GOSSIP_PING
Traceback (most recent call last):
File "./bin/tp_intkey_python", line 39, in
boydjohnson (Mon, 06 Mar 2017 22:02:39 GMT):
I'll make a jira for it.
jsmitchell (Mon, 06 Mar 2017 22:06:11 GMT):
thanks!
WeDoIoE (Tue, 07 Mar 2017 00:16:34 GMT):
Has joined the channel.
alihendavi (Tue, 07 Mar 2017 06:30:31 GMT):
Has joined the channel.
jsmitchell (Tue, 07 Mar 2017 15:30:27 GMT):
@boydjohnson: I have occasionally seen ZMQ bind issues when no processes are running
jsmitchell (Tue, 07 Mar 2017 15:30:33 GMT):
```Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/project/sawtooth-core/validator/sawtooth_validator/networking/interconnect.py", line 240, in setup
self._socket.bind(self._address)
File "zmq/backend/cython/socket.pyx", line 487, in zmq.backend.cython.socket.Socket.bind (zmq/backend/cython/socket.c:5156)
File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:7535)
zmq.error.ZMQError: Address already in use```
jsmitchell (Tue, 07 Mar 2017 15:31:05 GMT):
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ ps -ef | grep python
ubuntu 15003 14538 0 15:30 pts/0 00:00:00 grep --color=auto python```
jsmitchell (Tue, 07 Mar 2017 15:32:29 GMT):
I will attempt to catch it with lsof next time I see it
boydjohnson (Tue, 07 Mar 2017 15:37:36 GMT):
So that might be happening because of bad validator shutdown. When you shutdown a validator under load sometimes the multiprocessing processes hang on to sockets (for some strange reason). Doing "netstat -tp" sometimes shows processes, but other times it doesn't show a process, but just "TIME_WAIT". I hope it will be fixed in my validator shutdown task that will have a PR soon.
jsmitchell (Tue, 07 Mar 2017 20:27:40 GMT):
@agunde @boydjohnson @Dan: Can one of you give me a second review of https://github.com/hyperledger/sawtooth-core/pull/169
boydjohnson (Tue, 07 Mar 2017 20:40:30 GMT):
@jsmitchell I had a comment on it, but asked for changes or clarification.
jsmitchell (Tue, 07 Mar 2017 21:10:42 GMT):
@boydjohnson: updated
boydjohnson (Tue, 07 Mar 2017 21:10:55 GMT):
Cool, I'll take a look.
jsmitchell (Tue, 07 Mar 2017 23:17:38 GMT):
@boydjohnson: I put some logging in Interconnect.stop() for reasons and I noticed that stop() is getting called very early in validator startup, which confused me. Any clues?
boydjohnson (Tue, 07 Mar 2017 23:19:10 GMT):
Yes, validator.start doesn't wait anywhere and it falls through to finally in cli.py where validator.stop sits at service.stop() which has a join in it. Very bad behavior.
jsmitchell (Tue, 07 Mar 2017 23:19:23 GMT):
naughty naughty
boydjohnson (Tue, 07 Mar 2017 23:28:46 GMT):
So switching 'n' in the Lmdb block store constructor to '' or anything else really, seems too work. A test that starts validator (with genesis), tp_intkey_python, rest_api, then sigints them all, then starts them all again, and then runs intkey-smoke on them passes mostly with intermittent errors that don't seem validator related. I will no include the restart test in my PR since it is slowing me down. I will try to push up a PR this evening.
boydjohnson (Tue, 07 Mar 2017 23:28:46 GMT):
So switching 'n' in the Lmdb block store constructor to '' or anything else really, seems too work. A test that starts validator (with genesis), tp_intkey_python, rest_api, then sigints them all, then starts them all again, and then runs intkey-smoke on them passes mostly with intermittent errors that don't seem validator related. I will not include the restart test in my PR since it is slowing me down. I will try to push up a PR this evening.
Suma (Wed, 08 Mar 2017 15:45:02 GMT):
Has joined the channel.
jjason (Wed, 08 Mar 2017 18:17:32 GMT):
Stupid question. Anyone seen the following and can tell what stupid thing I am forgetting to do. The error results when I try to import transaction_pb2:
File "/project/sawtooth-core/validator/sawtooth_validator/journal/consensus/poet/poet_consensus/poet_block_publisher.py", line 35, in
jjason (Wed, 08 Mar 2017 18:18:21 GMT):
Invalid proto descriptor for file "sawtooth_sdk/protobuf/transaction.proto":
TransactionHeader.batcher_pubkey: "TransactionHeader.batcher_pubkey" is already defined in file "sawtooth_validator/protobuf/transaction.proto".
boydjohnson (Wed, 08 Mar 2017 18:25:15 GMT):
So I see weirdness, in that something on the validator/sawtooth_validator path would be importing something from sawtooth_sdk. When the protobuf classes are generated they are put in the sdk and sawtooth_validator and mixing them causes weird errors.
jjason (Wed, 08 Mar 2017 18:26:21 GMT):
Fair enough....let me fix that.
jjason (Wed, 08 Mar 2017 18:26:38 GMT):
I was cut-and-pasting from another file.....
boydjohnson (Wed, 08 Mar 2017 18:26:47 GMT):
Ahh.
boydjohnson (Wed, 08 Mar 2017 18:32:22 GMT):
Did that fix the error?
jjason (Wed, 08 Mar 2017 18:36:48 GMT):
Well...I ran into another problem first. A previous validator seems to have grabbed TCP port 40000 and won't let go (netstat tells me that the port is in ESTABLISHED state). I cannot find the process.... :(
boydjohnson (Wed, 08 Mar 2017 18:37:09 GMT):
netstat -tp doesn't show a process?
jjason (Wed, 08 Mar 2017 18:39:03 GMT):
Thx...that was the magic flag I was reading through the man page for ;)
jjason (Wed, 08 Mar 2017 18:39:14 GMT):
Saved me a couple of minutes of reading....
jjason (Wed, 08 Mar 2017 18:40:05 GMT):
Now I just have to wait for TIME_WAIT period to expire....
jjason (Wed, 08 Mar 2017 19:58:40 GMT):
@boydjohnson Thanks...got past that error and ran into other problems, working through them.
jsmitchell (Wed, 08 Mar 2017 19:59:52 GMT):
@jjason: I have seen address in use errors too. Does lsof -i :40000 show anything?
jsmitchell (Wed, 08 Mar 2017 20:02:25 GMT):
@boydjohnson: suggestions that linger settings may help
jsmitchell (Wed, 08 Mar 2017 20:02:38 GMT):
TIME_WAIT: https://hea-www.harvard.edu/~fine/Tech/addrinuse.html
boydjohnson (Wed, 08 Mar 2017 20:15:58 GMT):
@jsmitchell Thanks for that link, I added the linger stuff to the sdk, but somehow overlooked in the validator shutdown PR. I will add that right now.
jjason (Wed, 08 Mar 2017 21:47:57 GMT):
@jsmitchell Thanks. I'll try lsof next time. wrt TIME_WAIT, easy to kill transaction processors before killing validator....and although I like not having to stop transaction processors every time I restart the validator, if it means not waiting for the timeout....
yairfr (Thu, 09 Mar 2017 07:21:47 GMT):
Has joined the channel.
yairfr (Thu, 09 Mar 2017 15:06:36 GMT):
Hi, I'm trying to set up sawtoothlake for the first time and encountered problems.
yairfr (Thu, 09 Mar 2017 15:08:43 GMT):
It looks like it relates to the fact that I'm behinf a proxy. Figured to to set it up for vagrant, but it seems that I need to apply some more settings for npm :(
boydjohnson (Thu, 09 Mar 2017 15:11:08 GMT):
Hi @yairfr, are you using the 0-7 branch or master/0-8?
yairfr (Thu, 09 Mar 2017 15:22:23 GMT):
I think 0.8, but how can I verify?
yairfr (Thu, 09 Mar 2017 15:23:02 GMT):
(At least i try to follow the 0.8 instructions)
yairfr (Thu, 09 Mar 2017 15:24:19 GMT):
git clone https://github.com/IntelLedger/sawtooth-core.git
boydjohnson (Thu, 09 Mar 2017 15:41:49 GMT):
git clone will get you the current master, which we call 0-8. If git status says you are on branch master then that would tell you also. You mentioned npm, are you running the javascript sdk transaction processor?
yairfr (Thu, 09 Mar 2017 15:42:48 GMT):
Your branch is up-to-date with 'origin/master'.
yairfr (Thu, 09 Mar 2017 15:42:57 GMT):
anyway made some progress.
yairfr (Thu, 09 Mar 2017 15:43:13 GMT):
it seems that npm should respect the procy env cariables
yairfr (Thu, 09 Mar 2017 15:43:20 GMT):
those are correctly defined
yairfr (Thu, 09 Mar 2017 15:44:33 GMT):
there was a problem with the host file i bypassed it by adding ubuntu-xenial as an alias to localhost, it solved that problem
yairfr (Thu, 09 Mar 2017 15:44:44 GMT):
tthe current one is more difficult
yairfr (Thu, 09 Mar 2017 15:45:06 GMT):
npm install -g yarn fails
yairfr (Thu, 09 Mar 2017 15:45:19 GMT):
but no meaningful data in the logs
yairfr (Thu, 09 Mar 2017 15:46:11 GMT):
I'm still tryingto setup --> vagrant up
boydjohnson (Thu, 09 Mar 2017 15:49:52 GMT):
http://stackoverflow.com/questions/7559648/is-there-a-way-to-make-npm-install-the-command-to-work-behind-proxy This post talks about setting up npm for use behind a proxy. You have probably already seen it/done it.
yairfr (Thu, 09 Mar 2017 15:54:29 GMT):
I wasn't able to bring up the VM even once... so I can't configure npm. and it seems that the proxy environment variables are not propagated to the VM
yairfr (Thu, 09 Mar 2017 15:55:30 GMT):
FWIW i'm folowing http://intelledger.github.io/0.8/tutorial.html and stuck in the first vagrant VM setup
boydjohnson (Thu, 09 Mar 2017 15:56:22 GMT):
If you are getting to the install_js.sh script I would think the VM is running but not provisioned. After vagrant up exits with an error, what does vagrant status tell you?
yairfr (Thu, 09 Mar 2017 15:58:30 GMT):
running...
boydjohnson (Thu, 09 Mar 2017 15:59:29 GMT):
So there are a few things you could try. If you can vagrant ssh into the vm you could try setting up the proxy settings for npm and then manually running the install_js.sh script.
yairfr (Thu, 09 Mar 2017 16:08:43 GMT):
defenitly not a proxy problem since apt was successful. I'll try to see why npm can't install yarn
jsmitchell (Thu, 09 Mar 2017 16:09:15 GMT):
are you behind a corporate firewall that is selectively blocking sites?
yairfr (Thu, 09 Mar 2017 16:09:33 GMT):
yes
yairfr (Thu, 09 Mar 2017 16:10:03 GMT):
I'm being tempted just to that the whole thing home and set it there...
boydjohnson (Thu, 09 Mar 2017 16:14:20 GMT):
I might be wrong, but I thought npm uses https by default and apt uses http by default, so that might be an issue.
yairfr (Thu, 09 Mar 2017 16:15:56 GMT):
FFX seems to be able to get to https://registry.npmjs.org/yarn but the log show this error " https://registry.npmjs.org/yarn info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=socket hang up"
yairfr (Thu, 09 Mar 2017 16:16:26 GMT):
GTG will continue working on this next week... thank for helping me make ptogress
boydjohnson (Thu, 09 Mar 2017 16:16:42 GMT):
No problem. Good luck @yairfr.
jsmitchell (Thu, 09 Mar 2017 16:27:03 GMT):
@pschwarz: looks like https://github.com/hyperledger/sawtooth-core/pull/177 is ready to merge
Dan (Thu, 09 Mar 2017 17:24:51 GMT):
Does the `sawtooth admin genesis` command depend on having first generated config transactions?
boydjohnson (Thu, 09 Mar 2017 17:26:45 GMT):
@Dan No, you *can* (and in a production environment would) give it batches created by sawtooth config, but you can create genesis data without any batches.
Dan (Thu, 09 Mar 2017 17:29:19 GMT):
Ok, so it won't error, but I can I use that genesis batch in a meaningful way? i.e. if I was going to explain how to use the system to someone is the expected flow 1. create config transactions 2
boydjohnson (Thu, 09 Mar 2017 17:32:03 GMT):
Yes.
Dan (Thu, 09 Mar 2017 17:32:22 GMT):
thx
pschwarz (Thu, 09 Mar 2017 17:43:36 GMT):
@jsmitchell merged
GanapathyRajalingam (Thu, 09 Mar 2017 18:16:28 GMT):
Has joined the channel.
Dan (Fri, 10 Mar 2017 15:42:50 GMT):
@cianx what's an example of when consensus.blockpublisher.initialize_block(...) would return false?
cianx (Fri, 10 Mar 2017 15:46:52 GMT):
Validator does not have valid sign up info registered in global state for poet.
cianx (Fri, 10 Mar 2017 15:47:52 GMT):
Any case where it is a violation of the consensus algorithm for this validator to claim a block.
JatinderBali (Fri, 10 Mar 2017 15:51:17 GMT):
Has joined the channel.
Dan (Fri, 10 Mar 2017 20:24:16 GMT):
when addressing PR feedback, what does the author need to do to signal reviewers he or she is done with corrections? For example, @toddojala updated his PR but I didn't get it back in my review queue.
agunde (Fri, 10 Mar 2017 20:26:50 GMT):
The author needs to re-add them as a reviewer, by going back to the reviewer box, and adding the reviewer again the same way they had originally. This will reset the fact that you have a review request without removing your previously requested changes.
Dan (Fri, 10 Mar 2017 20:39:31 GMT):
thx @agunde
Dan (Fri, 10 Mar 2017 21:00:19 GMT):
What's the command to start the REST service?
boydjohnson (Fri, 10 Mar 2017 21:01:01 GMT):
rest_api
Dan (Fri, 10 Mar 2017 21:01:58 GMT):
think that's intuitive do you? :P
boydjohnson (Fri, 10 Mar 2017 21:02:24 GMT):
Ha!
Dan (Fri, 10 Mar 2017 21:05:49 GMT):
so the pattern looks a little different than bringing up the transaction processors.
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ rest_api -v tcp://127.0.0.1:40000
usage: rest_api [-h] [--port PORT] [--host HOST] [--stream-url STREAM_URL]
[--timeout TIMEOUT]`
rest_api: error: unrecognized arguments: -v tcp://127.0.0.1:40000```
is host and port the host and port of the validator?
Dan (Fri, 10 Mar 2017 21:05:49 GMT):
so the pattern looks a little different than bringing up the transaction processors.
`ubuntu@ubuntu-xenial:/project/sawtooth-core$ rest_api -v tcp://127.0.0.1:40000
usage: rest_api [-h] [--port PORT] [--host HOST] [--stream-url STREAM_URL]
[--timeout TIMEOUT]
rest_api: error: unrecognized arguments: -v tcp://127.0.0.1:40000`
is host and port the host and port of the validator?
Dan (Fri, 10 Mar 2017 21:05:49 GMT):
so the pattern looks a little different than bringing up the transaction processors.
`ubuntu@ubuntu-xenial:/project/sawtooth-core$ rest_api -v tcp://127.0.0.1:40000`
`usage: rest_api [-h] [--port PORT] [--host HOST] [--stream-url STREAM_URL]`
` [--timeout TIMEOUT]`
`rest_api: error: unrecognized arguments: -v tcp://127.0.0.1:40000`
is host and port the host and port of the validator?
agunde (Fri, 10 Mar 2017 21:07:51 GMT):
No, the port and host is for the api, the stream-url is the validator
Dan (Fri, 10 Mar 2017 21:09:07 GMT):
trying to list blocks I get this:
Dan (Fri, 10 Mar 2017 21:09:09 GMT):
Error: (503) The validator is not yet ready to be queried
agunde (Fri, 10 Mar 2017 21:09:27 GMT):
Do you have a running validator?
Dan (Fri, 10 Mar 2017 21:09:33 GMT):
yet the rest_api process says this:
Dan (Fri, 10 Mar 2017 21:09:33 GMT):
Handling GET request for /blocks
Dan (Fri, 10 Mar 2017 21:09:46 GMT):
lemme make sure the validator is still alive...
Dan (Fri, 10 Mar 2017 21:10:05 GMT):
[21:08:37.578 DEBUG interconnect] ServerThread sending CLIENT_BLOCK_LIST_RESPONSE to b'6a1898424cb55466'
boydjohnson (Fri, 10 Mar 2017 21:10:55 GMT):
Oh, so the validator can be in a not good state and it will say that, even though the validator process is there.
Dan (Fri, 10 Mar 2017 21:11:45 GMT):
so it looks like the validator thinks it's responding to the client, but the client is like hey that validator isn't ready yet.
Dan (Fri, 10 Mar 2017 21:11:45 GMT):
so it looks like the validator thinks its responding to the client, but the client is like hey that validator isn't ready yet.
Dan (Fri, 10 Mar 2017 21:11:57 GMT):
and the rest_api in the middle is like everything is cool.
boydjohnson (Fri, 10 Mar 2017 21:12:18 GMT):
What do your startup logging statements look like? Do you have a "building on top of block None"?
Dan (Fri, 10 Mar 2017 21:12:40 GMT):
I built on top of block f4343
Dan (Fri, 10 Mar 2017 21:13:35 GMT):
oh I take that back
Dan (Fri, 10 Mar 2017 21:14:28 GMT):
it is on top of None
Dan (Fri, 10 Mar 2017 21:14:32 GMT):
'[20:46:04.783 INFO publisher] Now building on top of block: None`
Dan (Fri, 10 Mar 2017 21:14:32 GMT):
`[20:46:04.783 INFO publisher] Now building on top of block: None`
agunde (Fri, 10 Mar 2017 21:14:37 GMT):
Did you run genesis?
jjason (Fri, 10 Mar 2017 21:14:47 GMT):
Is your computer on?>
Dan (Fri, 10 Mar 2017 21:14:49 GMT):
genesis w/ no config or anything
Dan (Fri, 10 Mar 2017 21:15:05 GMT):
wait... @jjason how do you check?
jjason (Fri, 10 Mar 2017 21:15:34 GMT):
First, you need to go down to the breaker box in your garage/basement/...
Dan (Fri, 10 Mar 2017 21:15:56 GMT):
@agunde @boydjohnson don't worry about it. I'm just trying to get to canonical operation so I can double check the tutorial. I think this is close enough.
agunde (Fri, 10 Mar 2017 21:17:32 GMT):
Okay
boydjohnson (Fri, 10 Mar 2017 21:17:51 GMT):
Thanks @Dan, it is good to get a n+1 pair of eyes on things.
Dan (Fri, 10 Mar 2017 21:18:13 GMT):
I do have many eyes.
agunde (Fri, 10 Mar 2017 21:18:22 GMT):
More than 2?
Dan (Fri, 10 Mar 2017 21:18:35 GMT):
I'm like a walking potato
boydjohnson (Fri, 10 Mar 2017 21:18:52 GMT):
We need an Eye of Sauron bug seer.
Dan (Fri, 10 Mar 2017 21:19:10 GMT):
n+1 eyes where n=i+1
Romanix (Sat, 11 Mar 2017 21:17:38 GMT):
Does Sawtooth Lake have a UTXO model? If not, is it more like Ethereum?
jsmitchell (Sat, 11 Mar 2017 21:20:08 GMT):
Hi @Romanix: Sawtooth pushes these implementation details out to Transaction Families. It would be easy to write a transaction family that does UTXO, or a transaction family that stores and executes bytecode 'smart contracts'
jsmitchell (Sat, 11 Mar 2017 21:20:33 GMT):
Both types of transactions could even coexist on the same instance of the blockchain
Romanix (Sat, 11 Mar 2017 21:42:29 GMT):
@jsmitchell Thanks.
jsmitchell (Sat, 11 Mar 2017 21:43:06 GMT):
Have you taken a look at our 0.8 transaction family documentation?
jsmitchell (Sat, 11 Mar 2017 21:44:28 GMT):
http://intelledger.github.io/0.8/txn_family_tutorial.html
jsmitchell (Sat, 11 Mar 2017 21:44:52 GMT):
And http://intelledger.github.io/0.8/architecture/transactions_and_batches.html
boydjohnson (Mon, 13 Mar 2017 14:27:27 GMT):
@agunde noticed that sawtooth admin keygen doesn't allow you to specify where the key goes, and it is in a different place than, by default, the validator expects it.
boydjohnson (Mon, 13 Mar 2017 14:28:22 GMT):
@amundson ^
Dan (Mon, 13 Mar 2017 14:47:48 GMT):
Would others find the PR channel more useful it it was just announcing a PR created? It's a little too noisy for my use right now.
pschwarz (Mon, 13 Mar 2017 14:48:19 GMT):
Yes - it's way too noisy
cianx (Mon, 13 Mar 2017 17:21:59 GMT):
@toddojala @dan can we make http://intelledger.github.io/ default to 0.8 instead of 0.7?
jsmitchell (Mon, 13 Mar 2017 17:23:57 GMT):
@rbuysse: ^
rbuysse (Mon, 13 Mar 2017 17:26:07 GMT):
that is achievable
boydjohnson (Mon, 13 Mar 2017 17:28:26 GMT):
@agunde amends my previous comment. The sawtooth admin keygen command can be given a directory to put the key in. That would fix cluster.
toddojala (Mon, 13 Mar 2017 18:19:07 GMT):
@cianx yes!
adamludvik (Mon, 13 Mar 2017 18:48:58 GMT):
Hey all, I added a new build step that needs to happen before run_tests will pass. Putting up a PR now, but the extra build steps are listed in the top of docker/sawtooth-build-java and docker/sawtooth-build-javascript
adamludvik (Mon, 13 Mar 2017 18:48:58 GMT):
Hey all, I added a new build step that needs to happen before run_tests will pass. Putting up a PR now to add this to build_all, but the extra build steps are listed in the top of docker/sawtooth-build-java and docker/sawtooth-build-javascript
pschwarz (Mon, 13 Mar 2017 22:11:50 GMT):
With the merge of https://github.com/hyperledger/sawtooth-core/pull/175, creating config transactions for the genesis block has changed slightly. Now, you do the following:```
pschwarz (Mon, 13 Mar 2017 22:11:50 GMT):
With the merge of https://github.com/hyperledger/sawtooth-core/pull/175, creating config transactions for the genesis block has changed slightly. Now, you do the following:
pschwarz (Mon, 13 Mar 2017 22:12:04 GMT):
```
pschwarz (Mon, 13 Mar 2017 22:12:04 GMT):
```
pschwarz (Mon, 13 Mar 2017 22:12:04 GMT):
```
pschwarz (Mon, 13 Mar 2017 22:14:06 GMT):
```
$ sawtooth config proposal set -k
pschwarz (Mon, 13 Mar 2017 22:14:06 GMT):
```
$ sawtooth config proposal create -k
pschwarz (Mon, 13 Mar 2017 22:15:06 GMT):
To submitted settings to a running validator:
```
$ sawtooth config proposal set -k
pschwarz (Mon, 13 Mar 2017 22:15:06 GMT):
To submitted settings to a running validator:
```
$ sawtooth config proposal create -k
pschwarz (Mon, 13 Mar 2017 22:15:37 GMT):
Or, omit the `--url`, and submit against `localhost`
pschwarz (Mon, 13 Mar 2017 22:15:51 GMT):
This does require running the `rest_api` process
jjason (Tue, 14 Mar 2017 04:30:57 GMT):
@adamludvik Running `docker run -v $(pwd):/project/sawtooth-core sawtooth-build-javascript` fails in vagrant on Windows. Crappy Windows does not support symlinks. Adding `--no-bin-links` to `yarn install --force` in both `bin/build_javascript` and `bin/build_intkey_javascript` seems to have fixed problem for me.
jjason (Tue, 14 Mar 2017 04:53:56 GMT):
BTW, don't know what the side effects of this will be on OSes that actually support symlinks. Sigh.
adamludvik (Tue, 14 Mar 2017 12:14:02 GMT):
@jjason thanks. I am working on PR 201 to cleanup a few things. Will add this and make you a reviewer.
Dan (Tue, 14 Mar 2017 13:07:53 GMT):
@rbuysse not withstanding your other work, maybe you and Ry can put your heads together on a narrower trigger for #sawtoothlake-pr-review
amundson (Tue, 14 Mar 2017 13:35:21 GMT):
@Dan there is hook (some Javascript code) on the rocket.chat side. many of the lines in #sawtoothlake-pr-review are assignee/reviewer related, so if we cut them out, it should be better
Dan (Tue, 14 Mar 2017 13:36:37 GMT):
Sounds like something only @Ry has access to?
jsmitchell (Tue, 14 Mar 2017 13:42:25 GMT):
here's the hook: https://gist.github.com/rjones-lf/fbe68e5fc9cef6ae6a8847df7d08f739
jsmitchell (Tue, 14 Mar 2017 13:42:32 GMT):
@jwagantall also can help
adamludvik (Tue, 14 Mar 2017 14:17:04 GMT):
@drozd and I are now seeing the tests pass with the startup sleep statements removed. Was there a change that went in recently that this is attributed to? I would like to remove them if possible, but want to understand why first.
amundson (Tue, 14 Mar 2017 14:28:56 GMT):
@adamludvik - recent changes to add jdk/js stuff to run_tests breaks it on vagrant without extra work (installing java, extra build steps) - is this addressed in anything you have in-progress?
adamludvik (Tue, 14 Mar 2017 14:29:12 GMT):
yes
adamludvik (Tue, 14 Mar 2017 14:29:37 GMT):
https://github.com/hyperledger/sawtooth-core/pull/201
adamludvik (Tue, 14 Mar 2017 14:32:26 GMT):
@jjason pointed out one more thing I needed to do, which I just pushed up
adamludvik (Tue, 14 Mar 2017 14:32:58 GMT):
Tested locally and it is passing, just need to verify it works on Jenkins now
amundson (Tue, 14 Mar 2017 14:33:44 GMT):
@adamludvik - I will test locally
agunde (Tue, 14 Mar 2017 14:34:02 GMT):
You may need to update virtualBox for it to work
adamludvik (Tue, 14 Mar 2017 14:34:46 GMT):
Thanks. I think you need VirtualBox >= 5.1.10
amundson (Tue, 14 Mar 2017 14:34:54 GMT):
@adamludvik - you should rebase so you have the install_cryptograph.sh fix
adamludvik (Tue, 14 Mar 2017 14:36:32 GMT):
will do. you can also test it on mac if you have docker installed.
adamludvik (Tue, 14 Mar 2017 14:36:32 GMT):
will do. you ~can also~ should be able to test it on mac if you have docker installed.
adamludvik (Tue, 14 Mar 2017 14:38:23 GMT):
Rebase is done.
adamludvik (Tue, 14 Mar 2017 14:47:08 GMT):
As soon as you are done testing it should be good to merge.
paulw (Tue, 14 Mar 2017 18:09:33 GMT):
Has joined the channel.
jsmitchell (Tue, 14 Mar 2017 19:31:17 GMT):
@agunde: I think I am seeing a regression in the completer where the publisher is reporting that it has batches with missing deps
jsmitchell (Tue, 14 Mar 2017 19:31:23 GMT):
```[19:29:53.868 DEBUG publisher] Transaction rejected due missing dependency, transaction 098d5100747cb71a53c3db3f8ef08afafdd6b48d5bf11e3a3673bc336b54ab7021e967949472ecdd6521571e3cae45f984b79055b264976a4173dd35bc332b22 depends on b02e001be0fbd1fddb7e4c380bbde1e9b32c6f4249c5ae46980e6102e0c61d7a029bc72099a1495fa357a69145963511231b2275343c6e81946eb496a10ae634
[19:29:53.869 DEBUG publisher] Dropping batch due to missing dependencies: d98761270e9f335b4bbd8da28e010fcb5a21204aaf9fc5417b8de6550538318953757a5914bb5b0de6b2c397741d5e956763da8c4363f82ba0d31623df06183c```
agunde (Tue, 14 Mar 2017 19:32:19 GMT):
Is this on master or your peering branch?
jsmitchell (Tue, 14 Mar 2017 19:32:34 GMT):
my branch
jsmitchell (Tue, 14 Mar 2017 19:46:23 GMT):
@agunde: PR raised on that branch https://github.com/hyperledger/sawtooth-core/pull/213
jsmitchell (Tue, 14 Mar 2017 19:46:32 GMT):
but I suspect the same thing would be visible on master
jsmitchell (Tue, 14 Mar 2017 19:46:34 GMT):
i'll check
jsmitchell (Tue, 14 Mar 2017 19:48:32 GMT):
yeah, same thing on master
jsmitchell (Tue, 14 Mar 2017 19:48:43 GMT):
start up a single validator and send it a couple of thousand intkey batches
jsmitchell (Tue, 14 Mar 2017 19:48:52 GMT):
it'll start spewing those
agunde (Tue, 14 Mar 2017 19:51:38 GMT):
okay i will take a look when i have a moment
pschwarz (Tue, 14 Mar 2017 20:13:48 GMT):
Sorry all mistyped the config proposal usage (edited in the original message:
```
$ sawtooth config proposal create ...
```
pschwarz (Tue, 14 Mar 2017 20:13:54 GMT):
not `set`
balashevich (Wed, 15 Mar 2017 12:37:43 GMT):
Has joined the channel.
victorsintnicolaas (Wed, 15 Mar 2017 13:13:24 GMT):
Has joined the channel.
TomBarnes (Wed, 15 Mar 2017 22:28:28 GMT):
When a client posts a /batches message directly to a validator via the REST interface, should it use the same key to sign both the transaction header and the batch, or should it use separate keys? It seams to me that it should use the same key, because it is acting as both the originator of the transaction and as the batcher.
jsmitchell (Wed, 15 Mar 2017 22:28:55 GMT):
yep, same key is the simple case
jsmitchell (Wed, 15 Mar 2017 22:29:53 GMT):
batcher_pubkey in the transaction header must also match
jsmitchell (Wed, 15 Mar 2017 22:30:27 GMT):
if a transaction signer wants to give another signer permission to include the transaction in a batch, then batcher_pubkey must be set appropriately in the transaction header
TomBarnes (Wed, 15 Mar 2017 22:50:24 GMT):
ok - thanks
ShowKobayashi (Thu, 16 Mar 2017 08:06:48 GMT):
Has joined the channel.
PacoEcotrust (Thu, 16 Mar 2017 11:35:31 GMT):
Has left the channel.
PacoEcotrust (Thu, 16 Mar 2017 11:44:56 GMT):
Has joined the channel.
amundson (Thu, 16 Mar 2017 17:41:04 GMT):
For http://intelledger.github.io/0.8/transaction_family_specifications/config_transaction_family.html, we could start by removing authorization_type and have it always be ballot-mode.
amundson (Thu, 16 Mar 2017 17:41:31 GMT):
Then have the CLI fill in sawtooth.config.vote.authorized_keys by default with it's authorized key? it is less clear if this works from a flow perspective, but the idea would be to usually set it.
jsmitchell (Thu, 16 Mar 2017 17:41:47 GMT):
@amundson: what's this in context of?
amundson (Thu, 16 Mar 2017 17:42:21 GMT):
simplifying the config txn family to have a more secure default mode (where at least one key is set)
amundson (Thu, 16 Mar 2017 17:46:42 GMT):
my original concept with respect to authorization_type no longer applies now that we have the broader idea of being a reference implementation that can be replaced
pschwarz (Thu, 16 Mar 2017 18:09:09 GMT):
That would probably work
pschwarz (Thu, 16 Mar 2017 18:10:14 GMT):
We might want have the genesis tool require input batches, as well, so at least some level of on-chain settings have been applied
adamludvik (Thu, 16 Mar 2017 18:20:53 GMT):
# Docker Build Update
With the recent changes, it should now be possible to build sawtooth and run
tests from an arbitrary environment that has docker installed and configured to
run with a linux kernel. Some substantial changes have gone into the build
process to accomplish this, and this document is a quick overview of the
process for current developers.
## tl;dr
If you are just doing python development for sawtooth, you should now be able
to build and run the tests from vagrant or Mac by doing the following:
```
$ ./bin/build_all -l python $ ./bin/run_tests -x java_sdk -x javascript_sdk
```
The build process may be faster if it is run from Mac instead of within
vagrant. To install docker on Mac, download
https://download.docker.com/mac/stable/Docker.dmg, drag docker into
applications, and open it. You will also need to have python3 and PyYAML
installed for run_tests to work.
## Building Sawtooth
The old build_all script has been moved to build_python and docker_build_all
has been moved to build_all.
The “new” build_all script handles building all the docker images that are
usually needed by a developer. Some of these build images are also used to
build the source code in sawtooth. This includes running protogen, maven, yarn,
etc. To make development in one language easier, it is now possible to pass
flags to the build_all script.
```
sawtooth-lake/sawtooth-core » ./bin/build_all -h
Usage: ./bin/build_all [-l Language] [-x Language]
Options:
-h print usage and exit
-l Language only build the specified language(s)
-x Language exclude the specified language(s)
```
The -l flag can be used multiple times to hand pick the languages that should
be built. The -x flag can be used to pick languages that should be skipped. For
example, to only build the python components of sawtooth you would do:
```
$ build_all -l python
```
Or to skip building java but still build python and javascript:
```
$ build_all -x java
```
One final note, if you are running in vagrant and do not want to build any of
the docker images, you can still run build_python to just build the python code
without using docker in anyway:
$ build_python
## Running Tests
The run_tests script has also been changed to accommodate finer grained control
of which tests should run. run_tests also no longer builds anything before
running the tests, so you will need to do build_all before run_tests now.
```
sawtooth-lake/sawtooth-core » ./bin/run_tests -h
Usage: ./bin/run_tests [-m Module] [-s Module]
(-m and -x can be passed multiple times)
Options:
-h print usage and exit
-m Module only run tests of specified module
-x Module exclude the tests of specified module
Current modules:
cli
java_sdk
javascript_sdk
poet
python_sdk
rest_api
signing
validator
```
The -m flag can now be passed multiple times to hand pick which modules should
be tested. Alternatively, the -s flag can also be passed multiple times to skip
certain modules. For example, to only run the python_sdk and poet modules, you
would do:
```
$ run_tests -m python_sdk -m poet
```
Or to skip the java and javascript sdk tests do:
```
$ run_tests -x java_sdk -x javascript_sdk
```
Running Lint The run_lint script has not changed, however it is now being run
inside the sawtooth-build-python container on Jenkins. You can still run the
script locally from outside of any container (in Vagrant) but to get the same
results as you would on Jenkins, you can instead do (after build_all):
```
$ docker run -v $(pwd):/project/sawtooth-core sawtooth-build-python ./bin/run_lint
```
adamludvik (Thu, 16 Mar 2017 18:20:53 GMT):
# Docker Build Update
With the recent changes, it should now be possible to build sawtooth and run
tests from an arbitrary environment that has docker installed and configured to
run with a linux kernel. Some substantial changes have gone into the build
process to accomplish this, and this document is a quick overview of the
process for current developers.
## tl;dr
If you are just doing python development for sawtooth, you should now be able
to build and run the tests from vagrant or Mac by doing the following:
```
$ ./bin/build_all -l python $ ./bin/run_tests -x java_sdk -x javascript_sdk
```
The build process may be faster if it is run from Mac instead of within
vagrant. To install docker on Mac, download
https://download.docker.com/mac/stable/Docker.dmg, drag docker into
applications, and open it. You will also need to have python3 and PyYAML
installed for run_tests to work.
## Building Sawtooth
The old build_all script has been moved to build_python and docker_build_all
has been moved to build_all.
The “new” build_all script handles building all the docker images that are
usually needed by a developer. Some of these build images are also used to
build the source code in sawtooth. This includes running protogen, maven, yarn,
etc. To make development in one language easier, it is now possible to pass
flags to the build_all script.
```
sawtooth-lake/sawtooth-core » ./bin/build_all -h
Usage: ./bin/build_all [-l Language] [-x Language]
Options:
-h print usage and exit
-l Language only build the specified language(s)
-x Language exclude the specified language(s)
```
The -l flag can be used multiple times to hand pick the languages that should
be built. The -x flag can be used to pick languages that should be skipped. For
example, to only build the python components of sawtooth you would do:
```
$ build_all -l python
```
Or to skip building java but still build python and javascript:
```
$ build_all -x java
```
One final note, if you are running in vagrant and do not want to build any of
the docker images, you can still run build_python to just build the python code
without using docker in anyway:
$ build_python
## Running Tests
The run_tests script has also been changed to accommodate finer grained control
of which tests should run. run_tests also no longer builds anything before
running the tests, so you will need to do build_all before run_tests now.
```
sawtooth-lake/sawtooth-core » ./bin/run_tests -h
Usage: ./bin/run_tests [-m Module] [-s Module]
(-m and -x can be passed multiple times)
Options:
-h print usage and exit
-m Module only run tests of specified module
-x Module exclude the tests of specified module
Current modules:
cli
java_sdk
javascript_sdk
poet
python_sdk
rest_api
signing
validator
```
The -m flag can now be passed multiple times to hand pick which modules should
be tested. Alternatively, the -s flag can also be passed multiple times to skip
certain modules. For example, to only run the python_sdk and poet modules, you
would do:
```
$ run_tests -m python_sdk -m poet
```
Or to skip the java and javascript sdk tests do:
```
$ run_tests -x java_sdk -x javascript_sdk
```
Running LintThe run_lint script has not changed, however it is now being run
inside the sawtooth-build-python container on Jenkins. You can still run the
script locally from outside of any container (in Vagrant) but to get the same
results as you would on Jenkins, you can instead do (after build_all):
```
$ docker run -v $(pwd):/project/sawtooth-core sawtooth-build-python ./bin/run_lint
```
adamludvik (Thu, 16 Mar 2017 18:20:53 GMT):
# Docker Build Update
With the recent changes, it should now be possible to build sawtooth and run
tests from an arbitrary environment that has docker installed and configured to
run with a linux kernel. Some substantial changes have gone into the build
process to accomplish this, and this document is a quick overview of the
process for current developers.
## tl;dr
If you are just doing python development for sawtooth, you should now be able
to build and run the tests from vagrant or Mac by doing the following:
```
$ ./bin/build_all -l python $ ./bin/run_tests -x java_sdk -x javascript_sdk
```
The build process may be faster if it is run from Mac instead of within
vagrant. To install docker on Mac, download
https://download.docker.com/mac/stable/Docker.dmg, drag docker into
applications, and open it. You will also need to have python3 and PyYAML
installed for run_tests to work.
## Building Sawtooth
The old build_all script has been moved to build_python and docker_build_all
has been moved to build_all.
The “new” build_all script handles building all the docker images that are
usually needed by a developer. Some of these build images are also used to
build the source code in sawtooth. This includes running protogen, maven, yarn,
etc. To make development in one language easier, it is now possible to pass
flags to the build_all script.
```
sawtooth-lake/sawtooth-core » ./bin/build_all -h
Usage: ./bin/build_all [-l Language] [-x Language]
Options:
-h print usage and exit
-l Language only build the specified language(s)
-x Language exclude the specified language(s)
```
The -l flag can be used multiple times to hand pick the languages that should
be built. The -x flag can be used to pick languages that should be skipped. For
example, to only build the python components of sawtooth you would do:
```
$ build_all -l python
```
Or to skip building java but still build python and javascript:
```
$ build_all -x java
```
One final note, if you are running in vagrant and do not want to build any of
the docker images, you can still run build_python to just build the python code
without using docker in anyway:
$ build_python
## Running Tests
The run_tests script has also been changed to accommodate finer grained control
of which tests should run. run_tests also no longer builds anything before
running the tests, so you will need to do build_all before run_tests now.
```
sawtooth-lake/sawtooth-core » ./bin/run_tests -h
Usage: ./bin/run_tests [-m Module] [-s Module]
(-m and -x can be passed multiple times)
Options:
-h print usage and exit
-m Module only run tests of specified module
-x Module exclude the tests of specified module
Current modules:
cli
java_sdk
javascript_sdk
poet
python_sdk
rest_api
signing
validator
```
The -m flag can now be passed multiple times to hand pick which modules should
be tested. Alternatively, the -s flag can also be passed multiple times to skip
certain modules. For example, to only run the python_sdk and poet modules, you
would do:
```
$ run_tests -m python_sdk -m poet
```
Or to skip the java and javascript sdk tests do:
```
$ run_tests -x java_sdk -x javascript_sdk
```
## Running Lint
The run_lint script has not changed, however it is now being run
inside the sawtooth-build-python container on Jenkins. You can still run the
script locally from outside of any container (in Vagrant) but to get the same
results as you would on Jenkins, you can instead do (after build_all):
```
$ docker run -v $(pwd):/project/sawtooth-core sawtooth-build-python ./bin/run_lint
```
Dan (Thu, 16 Mar 2017 18:22:55 GMT):
@adamludvik wins :medal: for biggest post. :-D
Seriously tho thanks for the update.
adamludvik (Thu, 16 Mar 2017 18:23:23 GMT):
Tried to upload it as file but :rocket: complained...
jjason (Thu, 16 Mar 2017 22:03:46 GMT):
what's the magic sauce for getting through Intel proxy?
jjason (Thu, 16 Mar 2017 22:03:59 GMT):
Besides connecting to the internet outside the firewall ;)
rbuysse (Thu, 16 Mar 2017 22:18:09 GMT):
@jjason we're passing four environment variables from the local machine into the docker images with the build_all script
rbuysse (Thu, 16 Mar 2017 22:18:58 GMT):
if you have http_proxy, https_proxy, HTTP_PROXY, and/or HTTPS_PROXY set on your local machine, those will get passed in to the docker containers.
jjason (Thu, 16 Mar 2017 22:19:09 GMT):
Shoot....I have them set.
rbuysse (Thu, 16 Mar 2017 22:19:30 GMT):
hmmmmmm
jsmitchell (Thu, 16 Mar 2017 22:19:34 GMT):
unplug your ethernet cable and see if anything is jamming it
jjason (Thu, 16 Mar 2017 22:19:35 GMT):
HTTPS_PROXY=http://proxy-us.intel.com:912
HTTP_PROXY=http://proxy-us.intel.com:911
http_proxy=http://proxy-us.intel.com:911
https_proxy=http://proxy-us.intel.com:912
rbuysse (Thu, 16 Mar 2017 22:20:00 GMT):
are you running build_all in vagrant?
jjason (Thu, 16 Mar 2017 22:20:03 GMT):
Oh crap. The problem was that someone in the break room was using the microwave and it f***ed with my WiFi ;)
jjason (Thu, 16 Mar 2017 22:20:29 GMT):
Yes....in vagrant....I am relegated to that because of the Windows laptop.
jjason (Thu, 16 Mar 2017 22:21:00 GMT):
Um....I think that problem is that the token from the token ring fell out on the floor...let me find it and put it back in.
jjason (Thu, 16 Mar 2017 22:21:00 GMT):
Um....I think that problem is the the token from the token ring fell out on the floor...let me find it and put it back in.
jjason (Thu, 16 Mar 2017 22:21:00 GMT):
Um....I think the problem is that the token from the token ring fell out on the floor...let me find it and put it back in.
rbuysse (Thu, 16 Mar 2017 22:21:45 GMT):
and when you type "env" the proxy variables are set?
jjason (Thu, 16 Mar 2017 22:22:11 GMT):
ubuntu@ubuntu-xenial:/project/sawtooth-core$ env | grep http
http_proxy=http://proxy-us.intel.com:911
https_proxy=http://proxy-us.intel.com:912
HTTPS_PROXY=http://proxy-us.intel.com:912
HTTP_PROXY=http://proxy-us.intel.com:911
rbuysse (Thu, 16 Mar 2017 22:22:36 GMT):
gimme a sec.
rbuysse (Thu, 16 Mar 2017 22:22:41 GMT):
I will test locally
jjason (Thu, 16 Mar 2017 22:25:56 GMT):
Also, while you are at that....I am having problems running `./bin/run_lint` locally in vagrant in that it is tripping up importing modules that I could swear that I have in `PYTHONPATH`. Anyone else or did I just mess up somewhere.
rbuysse (Thu, 16 Mar 2017 22:34:16 GMT):
well I guess the good news is that I am experiencing behavior here other than what I would expect
rbuysse (Thu, 16 Mar 2017 22:34:24 GMT):
gimme a bit to take better look.
jjason (Thu, 16 Mar 2017 22:35:47 GMT):
sure
jjason (Thu, 16 Mar 2017 22:36:14 GMT):
Time to go work at Starbucks...where they don't have no stinkin' firewall ;)
jjason (Thu, 16 Mar 2017 23:27:14 GMT):
Stand down everyone. False alarm. The problem was apparently with Intel IT. Everything seems to be getting through proxy successfully now. Thx @rbuysse
rbuysse (Thu, 16 Mar 2017 23:27:35 GMT):
^5 glad you're up and running.
jjason (Thu, 16 Mar 2017 23:27:52 GMT):
Please return to Defcon 5.
jjason (Thu, 16 Mar 2017 23:28:25 GMT):
A strange game. The only winning move is not to play. How about a nice game of chess?
sstone1 (Thu, 16 Mar 2017 23:50:16 GMT):
Has joined the channel.
amundson (Fri, 17 Mar 2017 03:03:48 GMT):
I bumped the tolkien ring, and it made a big thud as it hit the floor.
jsmitchell (Fri, 17 Mar 2017 03:04:07 GMT):
that one ring?
tiennv (Fri, 17 Mar 2017 09:58:35 GMT):
Has joined the channel.
tiennv (Fri, 17 Mar 2017 10:00:38 GMT):
Hi,
tiennv (Fri, 17 Mar 2017 10:01:25 GMT):
Sawtooth Lake is a private or public blockchain?
tiennv (Fri, 17 Mar 2017 10:02:15 GMT):
I wan to know about privacy and security of Sawtooth Lake.
tiennv (Fri, 17 Mar 2017 10:02:35 GMT):
Please tell me what resources I can refer to?
Romanix (Fri, 17 Mar 2017 13:23:11 GMT):
@tiennv I think you can compare it with the Ethereum *Software*. The software is once used for the public Ethereum blockchain (mainnet), but is also used for various private blockchains.
jsmitchell (Fri, 17 Mar 2017 14:23:43 GMT):
@boydjohnson: I'm trying to do some things on exit of the validator. I put a finally: after the try: validator.start() in server/cli.py, but that is executed immediately. This behavior differs from doing the same thing in the transaction processors (it works as expected there). Do you have some advice on where to do this?
boydjohnson (Fri, 17 Mar 2017 15:02:31 GMT):
So this may sound strange, but I would put a try-except in finally in server/cli.py and except a KeyboardInterrupt there and do your shutdown stuff in the except clause.
Dan (Fri, 17 Mar 2017 16:49:15 GMT):
@boydjohnson you mentioned in passing something about integration tests failing on master or false negatives... I got lost in the double negatives. Are things clean or broken right now?
boydjohnson (Fri, 17 Mar 2017 16:51:10 GMT):
Everything is good, except locally I found a way to trick the run_docker_test script into giving me a green light when it should have been a red light. I will push up a small change to the run_docker_test script that will make it less easy to trick.
Dan (Fri, 17 Mar 2017 16:53:58 GMT):
Nothing wrong with a little extra green today ;)
boydjohnson (Fri, 17 Mar 2017 16:55:04 GMT):
We could add a "Luck of the Irish" feature to the test script.
jjason (Fri, 17 Mar 2017 16:57:46 GMT):
Sound like you need to write a unit test to test the unit test tester.
jjason (Fri, 17 Mar 2017 16:57:59 GMT):
@boydjohnson ^^^^
boydjohnson (Fri, 17 Mar 2017 17:00:03 GMT):
Yeah, yesterday @amundson and I were talking about a way to deterministically start multiple threads in a unittest, and @jsmitchell said we should work on it as a research topic in our own time. We can add a unittest test testing framework to the research.
moeentariq (Fri, 17 Mar 2017 17:11:46 GMT):
Has joined the channel.
jjason (Fri, 17 Mar 2017 17:11:47 GMT):
:warning::warning::warning::warning::warning::warning::warning::warning::warning:
Just merged PR 228, which moves stuff around for PoET. It know that it will directly affect @pschwarz. Anyone else working on PoET or validator registry code will be affected as well. My apologies.
https://github.com/hyperledger/sawtooth-core/pull/228
:warning::warning::warning::warning::warning::warning::warning::warning::warning:
jjason (Fri, 17 Mar 2017 17:14:10 GMT):
If you update, you will need to re-provision your vagrant VM because of updates.
boydjohnson (Fri, 17 Mar 2017 17:20:18 GMT):
Addendum to the Addendum: I had convinced @adamludvik that the script wasn't right, but it was. Turns out when you manually 'echo $?' but you had previously run 'echo ?' (IDK) it echos the return code of the previously echo command not the test script.
MadhavaReddy (Fri, 17 Mar 2017 17:52:19 GMT):
Has joined the channel.
pschwarz (Fri, 17 Mar 2017 18:08:38 GMT):
W
boydjohnson (Fri, 17 Mar 2017 18:44:39 GMT):
https://github.com/hyperledger/sawtooth-core/pull/217 PR 217 is passing tests consistently and has received a green check from @pschwarz. @jjason @jsmitchell @amundson @agunde @drozd
jsmitchell (Fri, 17 Mar 2017 18:47:06 GMT):
I find that PR intimidating
jsmitchell (Fri, 17 Mar 2017 18:48:11 GMT):
it is a failing inside me @boydjohnson, not you
boydjohnson (Fri, 17 Mar 2017 18:49:07 GMT):
As long as the tests don't fail, I am fine with personal failings.
zac (Fri, 17 Mar 2017 19:14:52 GMT):
Yo, various stake holders: I'm starting to build the paging controls for the ZMQ API
zac (Fri, 17 Mar 2017 19:15:10 GMT):
Does anyone have a preference on how paging works by default?
zac (Fri, 17 Mar 2017 19:16:05 GMT):
Specifically, do you want to just get everything if you don't specify any paging controls, or do you want everything to always be paginated?
zac (Fri, 17 Mar 2017 19:16:32 GMT):
(perhaps unless you send some "don't paginate" command)
jsmitchell (Fri, 17 Mar 2017 19:17:52 GMT):
@boydjohnson: your "one weird trick" for doing stuff on KeyboardInterrupt didn't work
zac (Fri, 17 Mar 2017 19:18:30 GMT):
Those are always just click bait
jsmitchell (Fri, 17 Mar 2017 19:20:08 GMT):
@zac: clients shouldn't be able to DOS the rest api by forming a request for 40GB of stuff
jsmitchell (Fri, 17 Mar 2017 19:20:53 GMT):
if pagination enforces smallish responses, we can use rate limiting to keep things sane
jsmitchell (Fri, 17 Mar 2017 19:25:09 GMT):
@boydjohnson: I'm on tenterhooks here
boydjohnson (Fri, 17 Mar 2017 19:25:48 GMT):
@jsmitchell Looking at server/cli now, it seems to have changed in the recent past. Looking at it, there is no way to run shutdown tasks. It appears that most threads are started non-daemon (seems good). Main thread exits after validator.start and the long running nature of the validator is that the other threads don't shutdown.
adamludvik (Fri, 17 Mar 2017 19:32:49 GMT):
I restarted LR1 with bond and intkey and it forked again right away. I am trying an easier workload to see if it can handle that. My gut reaction is that eitherranger
adamludvik (Fri, 17 Mar 2017 19:37:43 GMT):
I restarted LR1 running a bond and intkey workload and it forked again right away. My gut says that either the changes to stats lib are causing the most recent block id to be reported incorrectly, given the impression of forking, or that it is related to adding the CloudPassage/halo service to all our AWS boxes. @Tom Barnes @nconde can you please review the PR that went in again to see if you can come up with any theories? I am restarting LR1 again with an easier workload to see if that helps.
adamludvik (Fri, 17 Mar 2017 19:37:43 GMT):
I restarted LR1 running a bond and intkey workload and it forked again right away. My gut says that either the changes to stats lib are causing the most recent block ids to be reported incorrectly, giving the impression of forking, or that it is related to adding the CloudPassage/halo service to all our AWS boxes. @Tom Barnes @nconde can you please review the PR that went in again to see if you can come up with any theories? I am restarting LR1 again with an easier workload to see if that helps.
nconde (Fri, 17 Mar 2017 19:37:43 GMT):
Has joined the channel.
boydjohnson (Fri, 17 Mar 2017 19:40:10 GMT):
700a0b7194c27eaa177ca4ef5e9684d224e0dd7f @jsmitchell this commit removed the finally from validator cli. Are you saying if you put a finally: back in with validator.stop() and then do your shutdown things in a new except clause in that finally, it doesn't work?
jsmitchell (Fri, 17 Mar 2017 19:40:32 GMT):
``` try:
yappi.set_clock_type('cpu')
yappi.start(builtins=True)
validator.start()
except KeyboardInterrupt:
print("Interrupted!", file=sys.stderr)
sys.exit(1)
except LocalConfigurationError as local_config_err:
LOGGER.error(str(local_config_err))
sys.exit(1)
except GenesisError as genesis_err:
LOGGER.error(str(genesis_err))
sys.exit(1)
except Exception as e:
LOGGER.exception(e)
sys.exit(1)
finally:
try:
pass
except KeyboardInterrupt:
stats = yappi.get_func_stats()
stats.print_all()
yappi.get_thread_stats().print_all()
stats.save("validator-callgrind.prof", type='callgrind')```
jsmitchell (Fri, 17 Mar 2017 19:40:35 GMT):
doesn't work
boydjohnson (Fri, 17 Mar 2017 19:41:27 GMT):
the pass should be validator.stop().
jsmitchell (Fri, 17 Mar 2017 19:41:57 GMT):
woot!
boydjohnson (Fri, 17 Mar 2017 19:42:19 GMT):
Does the woot! mean it worked?
jsmitchell (Fri, 17 Mar 2017 19:42:26 GMT):
what else would it mean?
jsmitchell (Fri, 17 Mar 2017 19:42:30 GMT):
HECK YES IT WORKED
boydjohnson (Fri, 17 Mar 2017 19:42:44 GMT):
Yay!
jsmitchell (Fri, 17 Mar 2017 19:43:05 GMT):
there is about to be callgrinding
Dan (Fri, 17 Mar 2017 19:43:19 GMT):
@adamludvik if it's not a lot of extra work you could try running LR1 with HEAD~1 and see if behavior holds.
adamludvik (Fri, 17 Mar 2017 19:44:51 GMT):
Sure. I am going to try just intkey on the current commit as I just started up that network, but will rollback to the latest version after.
adamludvik (Fri, 17 Mar 2017 19:47:36 GMT):
just an fyi, this does not affect the demonet or restarting it, as they are already pegged to a specific version
adamludvik (Fri, 17 Mar 2017 20:32:04 GMT):
Okay, LR1 seems to be doing fine with an 80TPM intkey workload. May just be that I left the settings for LR1 in a particularly nasty state. Going to set it back to the original 300TPM with the most recent commit.
Dan (Fri, 17 Mar 2017 21:30:01 GMT):
I'll be interested to hear how that goes @adamludvik
Dan (Fri, 17 Mar 2017 21:31:37 GMT):
In the future @here let's only commit critical fixes to 0.7.
zac (Fri, 17 Mar 2017 21:32:29 GMT):
Wow. Rocketchat's notification settings are . . . aggressive.
Dan (Fri, 17 Mar 2017 21:38:30 GMT):
Oh ya? was that pretty loud?
Dan (Fri, 17 Mar 2017 21:39:32 GMT):
It wouldn't let me do "@all". I took that to mean it wouldn't send a notice if you weren't logged in.
Dan (Fri, 17 Mar 2017 21:40:00 GMT):
Message Attachments
Dan (Fri, 17 Mar 2017 21:40:19 GMT):
rocket.cat ... cute eh?
jsmitchell (Fri, 17 Mar 2017 21:40:32 GMT):
hey @rocket.cat, can you turn off all notifications?
rocket.cat (Fri, 17 Mar 2017 21:40:32 GMT):
Has joined the channel.
Dan (Fri, 17 Mar 2017 21:41:00 GMT):
Do not taunt @rocket.cat
jjason (Fri, 17 Mar 2017 21:47:41 GMT):
I think that before you try to blast out to all, you need to either throw a yarn ball or shine a laser to distract @rocket.cat
adamludvik (Fri, 17 Mar 2017 21:48:56 GMT):
Message Attachments
boydjohnson (Fri, 17 Mar 2017 21:50:11 GMT):
I started @adamludvik on this path, but am not responsible for where the path took him.
jsmitchell (Fri, 17 Mar 2017 21:50:23 GMT):
did you do that by hand with graphviz?
boydjohnson (Fri, 17 Mar 2017 21:50:36 GMT):
pyreverse in pylint creates the dot file.
jsmitchell (Fri, 17 Mar 2017 21:51:05 GMT):
ok, so you could load the dot file into gephi and make the layout a lot better
adamludvik (Fri, 17 Mar 2017 21:51:13 GMT):
ahah
jsmitchell (Fri, 17 Mar 2017 21:51:21 GMT):
https://gephi.org/
boydjohnson (Fri, 17 Mar 2017 21:51:47 GMT):
Sweet.
jsmitchell (Fri, 17 Mar 2017 21:51:53 GMT):
the UI is fun to figure out
adamludvik (Fri, 17 Mar 2017 21:52:19 GMT):
I feel like I just upgraded my Sheikah Slate with a new rune..
adamludvik (Fri, 17 Mar 2017 22:06:30 GMT):
@Dan LR1 is now running fine with a 300TPM intkey load, which was the original LR1 test before I started messing with the workload. My guess is that I left the workload settings in a state that LR1 was already failing on, but didn't realize it. We'll see how long it lasts with 300TPM.
dragosh (Sat, 18 Mar 2017 00:14:14 GMT):
Has joined the channel.
bkman (Sat, 18 Mar 2017 02:44:28 GMT):
Has joined the channel.
midside (Mon, 20 Mar 2017 13:06:33 GMT):
Has joined the channel.
boydjohnson (Mon, 20 Mar 2017 16:45:12 GMT):
So our general pattern to do startup tasks in a validator container in a test has been to put bash -c "sawtooth admin keygen && sawtooth admin genesis &&..." in the entrypoint. This doesn't work for if you want to 1) send sig term or sig int to the validator process 2) stop and then start the process within the container (without doing the startup stuff again. I solve this by using a "startup tasks" container that shares directories with the validator container. @rbuysse @drozd @adamludvik It would be nice to be able to refer to a collection of services by name as one service, like validator-genesis is a genesis container along with a validator container and validator-non-genesis is a keygen container along with a validator container. Any thoughts?
adamludvik (Mon, 20 Mar 2017 16:49:43 GMT):
Are you suggesting we have a container for every command needed to startup a validator?
boydjohnson (Mon, 20 Mar 2017 16:50:50 GMT):
Not for every command, but every validator getting a "startup commands" container solves some problems, but seems messy.
adamludvik (Mon, 20 Mar 2017 17:02:40 GMT):
Would it be more clean to dynamically change the entrypoint as needed?
adamludvik (Mon, 20 Mar 2017 17:04:26 GMT):
Hmmm, that doesn't solver your signal issues
adamludvik (Mon, 20 Mar 2017 17:04:26 GMT):
Hmmm, that doesn't solve your signal issues
boydjohnson (Mon, 20 Mar 2017 17:05:25 GMT):
Yeah, if I understand you correctly that would solve 2) but not 1).
adamludvik (Mon, 20 Mar 2017 17:18:47 GMT):
Per offline discussion, I think it may make more sense to start the container with an entrypoint that doesn't do anything besides start the container. (`docker run -it --entrypoint=/bin/cat [image-name]` seems to work) Then you can send additional commands to the container using `docker exec`. Open question is whether you can read the exit code of the process started by `docker exec`.
adamludvik (Mon, 20 Mar 2017 17:18:47 GMT):
Per offline discussion, I think it may make more sense to start the container with an entrypoint that doesn't do anything besides start the container. `docker run -it --entrypoint=/bin/cat [image-name]` seems to work. Then you can send additional commands to the container using `docker exec`. Open question is whether you can read the exit code of the process started by `docker exec`.
ananth_s (Mon, 20 Mar 2017 17:41:54 GMT):
Has joined the channel.
dhuseby (Mon, 20 Mar 2017 17:55:34 GMT):
Has joined the channel.
Dan (Mon, 20 Mar 2017 18:07:56 GMT):
is this for launching with docker specifically or the pattern for starting sawtooth generally?
adamludvik (Mon, 20 Mar 2017 18:25:19 GMT):
This is just in reference to running integration tests that use multiple validators. This would not be user facing.
travin (Tue, 21 Mar 2017 12:29:33 GMT):
Has joined the channel.
PacoEcotrust (Tue, 21 Mar 2017 13:06:29 GMT):
I have changed softly the marketplace extension but I have a problem with one transaction. This transaction is identified as valid but it is never validated. I have deploy it over ubuntu not over docket and using only 1 validator with poet0. The transaction is to creat participant.
>//UNKNOWN> participant reg --name emkt --description "The new Marketplace"
The client is always asking for committing this transacction and the validator send 302 code.
Some idea?
Dan (Tue, 21 Mar 2017 13:13:12 GMT):
hi @PacoEcotrust can I ask you some questions on your environment? What does this report?
`$ git describe --tags`
adamludvik (Tue, 21 Mar 2017 14:48:46 GMT):
I need to define the entrypoint (command you type in bash to run the package you just installed) for each of the sawtooth deb packages that has one. The sawtooth-rest-api package already had `stl-rest-api` defined as the command you run to start the rest_api when installed, but this is different then our bin scripts. The sawtooth-cli package on the other hand defines `sawtooth` as the entrypoint. I also need to define entrypoints for sawtooth-validator and the existing transaction processors. Does anyone have any strong opinions about what these entrypoints should be or do we already have a naming convention established?
pschwarz (Tue, 21 Mar 2017 14:52:50 GMT):
@Dan @boydjohnson When you get a chance, can you review https://github.com/hyperledger/sawtooth-core/pull/232
adamludvik (Tue, 21 Mar 2017 15:16:14 GMT):
Hearing no strong opinions, I am going to impose the rule that the entrypoint has to match what is in sawtooth-core/bin and ask that we update the names of the bin scripts at a later date so we aren't installing generic names like `rest_api` to the users path.
jsmitchell (Tue, 21 Mar 2017 15:23:29 GMT):
@adamludvik: sounds reasonable
PacoEcotrust (Tue, 21 Mar 2017 15:24:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=JvNpYYfxYXvqpvzWC) @Dan [18:13:42 [PoolThread-WebThreadPool-0] journal.transaction DEBUG]
PacoEcotrust (Tue, 21 Mar 2017 15:24:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=JvNpYYfxYXvqpvzWC) @Dan Hello Dan, I do not know if you are going to catch some thing. [32m[16:42:11 INFO validator_cli][0m [37mvalidator started with arguments: ['/home/kiko/project/sawtooth-core/bin/txnvalidator', '-v'][0m
[32m[16:42:11 INFO validator_cli][0m [37mread signing key from /etc/sawtooth-validator/keys/base000.wif[0m
[33m[16:42:16 WARNING validator_cli][0m [37mvalidator pid is 3172[0m
[32m[16:42:16 INFO gossip_core][0m [37mlistening on IPv4Address(UDP, '0.0.0.0', 54184)[0m
[32m[16:42:16 INFO global_store_manager][0m [37mcreate blockstore from file /var/lib/sawtooth-validator/base000_state.dbm with flag c[0m
[32m[16:42:16 INFO validator][0m [37mset administration node to None[0m
[32m[16:42:16 INFO validator][0m [37mstarting ledger base000 with id 17A5QHJk at network address ('127.0.0.1', 54184)[0m
[32m[16:42:16 INFO web_api][0m [37mlisten for HTTP requests on (ip='localhost', port=8800)[0m
[32m[16:42:16 INFO validator_cli][0m [37madding transaction family: ledger.transaction.integer_key[0m
[32m[16:42:16 INFO validator_cli][0m [37madding transaction family: emktplace.transactions.market_place[0m
[32m[16:42:17 INFO journal_core][0m [37mrestore ledger state from persistence[0m
[32m[16:42:17 INFO global_store_manager][0m [37madd block 0a96be662e72daea to the queue for loading[0m
[32m[16:42:17 INFO global_store_manager][0m [37madd block 98e0efcd233b6981 to the queue for loading[0m
[32m[16:42:17 INFO global_store_manager][0m [37mload block 98e0efcd233b6981 from storage[0m
[32m[16:42:17 INFO global_store_manager][0m [37mload block 0a96be662e72daea from storage[0m
[32m[16:42:17 INFO journal_core][0m [37mcommit head: 0a96be662e72daea[0m
[32m[16:42:19 INFO validator][0m [37mledger connections using RandomWalk topology[0m
[32m[16:42:19 INFO random_walk][0m [37minitiate random walk topology update[0m
[32m[16:42:22 INFO validator][0m [37mledger initialization complete[0m
[32m[16:42:22 INFO journal_core][0m [37mprocess initial transactions and blocks[0m
[32m[16:42:22 INFO validator][0m [37mregister endpoint 17A5QHJk with name base000[0m
.........continue below
PacoEcotrust (Tue, 21 Mar 2017 15:24:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=JvNpYYfxYXvqpvzWC) @Dan [18:13:42 [PoolThread-WebThreadPool-0] journal.transaction DEBUG]
PacoEcotrust (Tue, 21 Mar 2017 15:24:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=JvNpYYfxYXvqpvzWC) @Dan Hello Dan, I do not know if you are going to catch some thing. [18:13:42 [PoolThread-WebThreadPool-0] journal.transaction DEBUG]
PacoEcotrust (Tue, 21 Mar 2017 15:24:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=JvNpYYfxYXvqpvzWC) @Dan Hello Dan, I do not know if you are going to catch some thing. [18:13:42 [PoolThread-WebThreadPool-0] journal.transaction DEBUG]
PacoEcotrust (Tue, 21 Mar 2017 15:24:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=JvNpYYfxYXvqpvzWC) @Dan Hello Dan, I do not know if you are going to catch some thing. [18:13:42 [PoolThread-WebThreadPool-0] journal.transaction DEBUG]
PacoEcotrust (Tue, 21 Mar 2017 16:10:48 GMT):
[33m[16:42:22 WARNING signed_object][0m [37mIdentifier 08b5d3480bb011dc of SignedObject has no public key and addr used to verify signature[0m
[32m[16:42:22 INFO journal_core][0m [37mbuild transaction block to extend 0a96be66 with 1 transactions[0m
[32m[16:42:22 INFO wait_timer][0m [37mwait timer created; TIMER, 5.00, 7.59, ra8rcvdvd67h8gks[0m
[32m[16:42:29 INFO journal_core][0m [37mnode base000 validates block with 1 transactions[0m
[32m[16:42:29 INFO wait_certificate][0m [37mwait certificate created; CERT, 5.00, 7.59, rdcjsu3akg4gzgxj, ra8rcvdvd67h8gks[0m
[32m[16:42:30 INFO market_place][0m [37mprepare to claim block 1aa846a079269264[0m
[33m[16:42:30 WARNING signed_object][0m [37mIdentifier 1aa846a079269264 of SignedObject has no public key and addr used to verify signature[0m
[33m[16:42:30 WARNING signed_object][0m [37mIdentifier 1aa846a079269264 of SignedObject has no public key and addr used to verify signature[0m
[33m[16:42:30 WARNING signed_object][0m [37mIdentifier 08b5d3480bb011dc of SignedObject has no public key and addr used to verify signature[0m
[32m[16:42:30 INFO journal_core][0m [37mblkid: 1aa846a0 - commit block from base000 with previous blkid: 0a96be66[0m
[32m[16:43:09 INFO base_page][0m [37mBlockPage.do_get /block[0m
[32m[16:43:09 INFO base_page][0m [37mStorePage.do_get /store/EMarketPlaceTransaction/*[0m
[32m[16:43:09 INFO base_page][0m [37mBlockPage.do_get /block[0m
[33m[16:43:38 WARNING root_page][0m [37m/emktplace.transactions.EMarketPlace/Transaction - NoResource[0m
[33m[16:43:38 WARNING root_page][0m [37m['emktplace.transactions.EMarketPlace', 'Transaction'] - 2[0m
[32m[16:43:38 INFO forward_page][0m [37mstarting local validation for txn id: 00c35d13d76e77a0 type: /EMarketPlaceTransaction[0m
[32m[16:43:38 INFO forward_page][0m [37mRegisterParticipant Updates[0m
[32m[16:43:38 INFO forward_page][0m [37mtransaction 00c35d13d76e77a0 is valid[0m
[32m[16:43:38 INFO base_page][0m [37mTransactionPage.do_get /transaction/00c35d13d76e77a0[0m
[32m[16:43:43 INFO base_page][0m [37mTransactionPage.do_get /transaction/00c35d13d76e77a0[0m
[32m[16:43:58 INFO base_page][0m [37mTransactionPage.do_get /transaction/00c35d13d76e77a0[0mthe client command was: emktclient -v --name emkt --keyfile /home/kiko/project/sawtooth-core/validator/keys/emkt.wif --config /home/kiko/project/sawtooth-core/extensions/emktplace/etc/mktclient.js //UNKNOWN> participant reg --name emkt --description "The New Marketplace". In this command all time asking for commit the transaction
Dan (Tue, 21 Mar 2017 16:29:34 GMT):
@PacoEcotrust two quick thoughts... First it looks like you are launching your ledger restoring from a previous database. It might help to purge that and start fresh. Really it should work either way though.
Second, I see some signed object warnings. That could mean that you don't have key files. Take a look at keygen .. sorry I'd look up the place in the docs but I'm on my way to a meeting.
PacoEcotrust (Tue, 21 Mar 2017 16:39:30 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=xtq9RCDv7Po98neQ9) @D , thankyou, could be the Second. I will take at look
Amanskywalker (Tue, 21 Mar 2017 18:14:05 GMT):
Has joined the channel.
Dan (Tue, 21 Mar 2017 18:38:14 GMT):
Hi @PacoEcotrust if your code is online somewhere like github any of us on the channel can take a look at your modified marketplace transaction family. The next place I'd look is the validation method.. something like check_valid().
PacoEcotrust (Tue, 21 Mar 2017 18:40:08 GMT):
Thanks, I will try to go deeper. I will to report you about my progress
boydjohnson (Tue, 21 Mar 2017 18:51:58 GMT):
@zac Did you see that the aiohttp test_utils package just changed in the last few days? https://github.com/aio-libs/aiohttp/commit/02145b1792f251fc2ca32f167fc30ccb4e0fd400
zac (Tue, 21 Mar 2017 20:19:46 GMT):
Yeah, 2.0 just dropped
zac (Tue, 21 Mar 2017 20:19:59 GMT):
There are a couple of possible breaking changes
zac (Tue, 21 Mar 2017 20:20:16 GMT):
I think we should stick with 1.x for now
boydjohnson (Tue, 21 Mar 2017 20:35:33 GMT):
Yeah, aiohttp==1.3.5 allows for all the rest api tests to pass.
tkuhrt (Tue, 21 Mar 2017 21:14:10 GMT):
Has joined the channel.
speffers (Wed, 22 Mar 2017 01:39:44 GMT):
Has joined the channel.
taishi (Wed, 22 Mar 2017 03:19:28 GMT):
Has joined the channel.
taishi (Wed, 22 Mar 2017 03:40:46 GMT):
Hi.I am a beginner. Please let question. Is there a detailed document about PoET? I do not understand even if I read the official docs. Also, is Sawtooth Lake assuming a permissoned environment?
foobarometer (Wed, 22 Mar 2017 05:56:42 GMT):
hi, i'm also beginner. i was going thru the tutorial http://intelledger.github.io/tutorial.html & it seems some commands needed to be executed twice in order to take effect. near the end:
```
//alice> exchange --type ExchangeOffer --src /USD --dst /jars/choc_chip --offers //bob/choc_chip_sale --count 24
http://localhost:8800/block?blockcount=10
transaction ee36338a123d4790 submitted
//alice> waitforcommit
Waiting for ee36338a123d4790.
Transaction committed.
//alice> holdings --creator //bob
1000 //bob/USD
24 //bob/batches/choc_chip001
1 //bob/holding/token
0 //bob/jars/choc_chip
//alice> holdings --creator //alice
1000 //alice/USD
1 //alice/holding/token
0 //alice/jars/choc_chip
//alice> waitforcommit
Waiting for ee36338a123d4790.
Transaction committed.
//alice> holdings --creator //alice
1000 //alice/USD
1 //alice/holding/token
0 //alice/jars/choc_chip
//alice> holdings --creator //bob
1000 //bob/USD
24 //bob/batches/choc_chip001
1 //bob/holding/token
0 //bob/jars/choc_chip
//alice> exchange --type ExchangeOffer --src /USD --dst /jars/choc_chip --offers //bob/choc_chip_sale --count 24
http://localhost:8800/block?blockcount=10
http://localhost:8800/store/MarketPlaceTransaction/*?delta=1&blockid=e62acd704c025c6a
transaction eb8735fa2f2ba81d submitted
//alice> holdings --creator //bob
1024 //bob/USD
12 //bob/batches/choc_chip001
1 //bob/holding/token
0 //bob/jars/choc_chip
//alice> holdings --creator //alice
976 //alice/USD
1 //alice/holding/token
12 //alice/jars/choc_chip
```
foobarometer (Wed, 22 Mar 2017 06:00:19 GMT):
the other one that seemed to need a 2nd run was:
```
//bob> exchangeoffer reg --output /batches/choc_chip001 --input /USD --ratio 2 1 --name /choc_chip_sale
```
I ran `waitforcommit` after this command. it said it was `commited`. However, when I tried to look at offers, I got:
```
//bob> offers --creator //bob
Ratio Input Asset (What You Pay) Output Asset (What You Get) Name
//bob>
```
foobarometer (Wed, 22 Mar 2017 06:00:19 GMT):
the other one that seemed to need a 2nd run was:
```
//bob> exchangeoffer reg --output /batches/choc_chip001 --input /USD --ratio 2 1 --name /choc_chip_sale
```
I ran `waitforcommit` after this command. it said it was `committed`. However, when I tried to look at offers, I got:
```
//bob> offers --creator //bob
Ratio Input Asset (What You Pay) Output Asset (What You Get) Name
//bob>
```
foobarometer (Wed, 22 Mar 2017 06:01:58 GMT):
of course, when I ran it a 2nd time, I got an error:
```
//bob> exchangeoffer reg --output /batches/choc_chip001 --input /USD --ratio 2 1 --name /choc_chip_sale
http://localhost:8800/block?blockcount=10
http://localhost:8800/store/MarketPlaceTransaction/*?delta=1&blockid=739231fca7d153bd
[05:52:33 mktplace.mktplace_communication WARNING] operation failed with response: 400
[05:52:33 mktplace.mktplace_communication WARNING] Error from server, detail information: ?eerrorpName isn't validierrorTypewInvalidTransactionErrorfstatus?
[05:52:33 mktplace.mktplace_client ERROR] message post failed for some unusual reason
Traceback (most recent call last):
File "/project/sawtooth-core/extensions/mktplace/mktplace/mktplace_client.py", line 172, in _sendtxn
msg
File "/project/sawtooth-core/extensions/mktplace/mktplace/mktplace_communication.py", line 180, in postmsg
.format(err_content))
InvalidTransactionError: Error from server:
failed to create transaction
```
but the offer showed up:
```
//bob> offers --creator //bob
Ratio Input Asset (What You Pay) Output Asset (What You Get) Name
0.5 //mkt/asset/currency/USD //mkt/asset/cookie/choc_chip //bob/choc_chip_sale
```
sitomani (Wed, 22 Mar 2017 08:48:05 GMT):
Has joined the channel.
Dan (Wed, 22 Mar 2017 14:36:23 GMT):
@toddojala ^
toddojala (Wed, 22 Mar 2017 14:37:59 GMT):
@foobarometer Thanks for sharing that experience. Let me look into that, to find out if anyone else has seen that, or if it's a known issue.
adamludvik (Wed, 22 Mar 2017 14:53:18 GMT):
@pschwarz Do you know what the plan for the poet cli for 0.8 is? Will this be a part of the "sawtooth" command, or a separate command?
pschwarz (Wed, 22 Mar 2017 14:53:33 GMT):
It's a separate command
pschwarz (Wed, 22 Mar 2017 14:53:59 GMT):
Given that poet is (in the long run) an optional feature, this should make sense
adamludvik (Wed, 22 Mar 2017 14:55:28 GMT):
Sounds good. We have a separate sawtooth-poet-cli package which makes sense if that's true. We don't have that command implemented yet though, correct?
pschwarz (Wed, 22 Mar 2017 14:55:40 GMT):
We do!
adamludvik (Wed, 22 Mar 2017 14:56:05 GMT):
... Is it the poet command....
adamludvik (Wed, 22 Mar 2017 14:56:08 GMT):
?
pschwarz (Wed, 22 Mar 2017 14:56:48 GMT):
Should the script at `bin/poet` be in the `consensus/poet/cli` package somewhere?
adamludvik (Wed, 22 Mar 2017 14:56:56 GMT):
I should probably add that as an entrypoint to the sawtooth-poet-cli package so it gets installed to the users path.
adamludvik (Wed, 22 Mar 2017 14:57:00 GMT):
Yes
pschwarz (Wed, 22 Mar 2017 14:57:17 GMT):
Cool - you should do the needful on that, then
adamludvik (Wed, 22 Mar 2017 14:57:28 GMT):
:+1:
jsmitchell (Wed, 22 Mar 2017 14:57:51 GMT):
:musical_note: _do the needful_ _do do do di do do do di_
jsmitchell (Wed, 22 Mar 2017 14:58:02 GMT):
sung to the tune of "Do the Hustle"
adamludvik (Wed, 22 Mar 2017 15:09:14 GMT):
I am creating docker containers based on these deb packages. I have a validator-registry container which runs tp_validator_registry, which requires the sawtooth-poet-families package. Are there any other poet processes we'd like to run in containers?
pschwarz (Wed, 22 Mar 2017 15:48:41 GMT):
We should considered locking the versions of our python dependencies. This will keep the builds more predictable and avoid any future issues like we're currently having the aiohttp library's recent update.
boydjohnson (Wed, 22 Mar 2017 15:52:06 GMT):
We should make a docker-blockchain, where global state controls the specific docker images available to download. This seems like the best fix.
jsmitchell (Wed, 22 Mar 2017 15:52:17 GMT):
dockchain
toddojala (Wed, 22 Mar 2017 15:59:20 GMT):
@foobarometer I will try to reproduce your issue today.
foobarometer (Wed, 22 Mar 2017 16:06:55 GMT):
Thanks!
foobarometer (Wed, 22 Mar 2017 16:06:55 GMT):
Thanks @toddojala !
toddojala (Wed, 22 Mar 2017 18:13:24 GMT):
@taishi This is the documentation we do have on PoET: http://intelledger.github.io/introduction.html#proof-of-elapsed-time-poet
toddojala (Wed, 22 Mar 2017 18:14:04 GMT):
@taishi Could you explain in more detail what you mean by a "permissioned environment"? Thanks!
jsmitchell (Wed, 22 Mar 2017 18:40:40 GMT):
A permissioned environment usually means a private instance of a validator network with specific controls around which nodes may join the network.
adamludvik (Wed, 22 Mar 2017 19:46:49 GMT):
@pschwarz Can you make a JIRA task for that?
Dan (Wed, 22 Mar 2017 19:51:09 GMT):
@taishi Sawtooth does not assume a permissioned network. It is designed to be deployable across a spectrum of public to private policy rules. That is to say that there are many possible policies that could control different aspects of the network. We have a couple policies implemented that reflect different usages, but also serve as examples of how you could customize your distributed ledger / network policy.
jjason (Wed, 22 Mar 2017 19:55:32 GMT):
In the PoET consensus module, because it may need to walk back blocks in the block store to gather information necessary to make a decision about (or gather statistics to make future decisions about) whether or not a block should be initialized or verified, it also needs to be able to create a state view for that block. This means that it needs access to the state view factory. A couple of options:
1. Change the BlockPublisher, BlockVerifier, and ForkResolver interfaces so that the state view factory, in place of the state view, is provided when an object is created.
2. Leave the BlockPublisher and BlockVerifier interfaces alone, but change ForkResolver interface to also take a state view object on creation. In addition, change the state view object so that it has a factory property that is the factory that created it. Publisher/Verifier/Resolver can then use that property to create new state view objects for arbitrary blocks as they see need for.
I originally favored 2 as I thought that it would not require a change to the interface, but now am indifferent as I realized that the ForkResolver needs to be updated with a state view object at a minimum anyway.
jjason (Wed, 22 Mar 2017 20:05:33 GMT):
^^^^^^ @jsmitchell @cianx @Dan @pschwarz ^^^^^^^
pschwarz (Wed, 22 Mar 2017 20:21:24 GMT):
I think we would want to pass the combination of (state_hash, state_view_factory), which is equivalent to a single state_view, but gives the consensus module the ability to look at state views from previous blocks.
pschwarz (Wed, 22 Mar 2017 20:22:27 GMT):
I'm also wondering if there's a missing life-cycle seam here - initialize, which could do things like build the consensus cache from an existing chain, and then processing is on a block-by-block basis
pschwarz (Wed, 22 Mar 2017 20:22:27 GMT):
I'm also wondering if there's a missing life-cycle seam here - `initialize`, which could do things like build the consensus cache from an existing chain, and then processing is on a block-by-block basis
jjason (Wed, 22 Mar 2017 20:30:51 GMT):
For the PoET stuff, I was going to hide the building of the consensus cache from the publisher/verifier/resolver so that it thinks it is simply working on a block-by-block basis.
pschwarz (Wed, 22 Mar 2017 20:38:54 GMT):
Does PoET need access to the whole block chain at any other time then rebuilding that cache?
boydjohnson (Wed, 22 Mar 2017 21:12:08 GMT):
So I have two green checkmarks on PR176, the graceful shutdown PR, but wanted to give anyone who wanted to look at it a second chance.
jjason (Wed, 22 Mar 2017 21:47:50 GMT):
@pschwarz In theory, if the PoET consensus module is working properly, the only time it would ever need the entire blockchain would be in the case of the validator coming up with an existing block store but for some reason the consensus store was not there. However, I do need to guard against forks that cause the consensus module to not have complete stats for the blockchain.
pschwarz (Wed, 22 Mar 2017 22:00:10 GMT):
Fair enough
adamludvik (Wed, 22 Mar 2017 22:11:23 GMT):
I am going to put in a request to have the following docker repositories added to the hyperledger namespace unless somebody stops me:
```
sawtooth-rest_api
sawtooth-tp_config
sawtooth-tp_intkey_python
sawtooth-tp_validator_registry
sawtooth-tp_xo_python
sawtooth-validator
```
jjason (Wed, 22 Mar 2017 22:17:07 GMT):
Anyone besides @pschwarz have feedback on publisher/verifier/resolver interface? If not, I am going to update to have state view factory replace state view in interfaces.
boydjohnson (Wed, 22 Mar 2017 22:36:18 GMT):
@adamludvik Is the intkey javascript docker image not ready? java will soon be ready. Why not grab namespaces for those as well.
jjason (Wed, 22 Mar 2017 22:40:08 GMT):
@adamludvik Should `sawtooth-tp_validator_registry` be `sawtooth-tp_validator_registry_python` for consistency with intkey. Note - that does not mean I am signing up to port the validator registry to JavaScript or Java.
jjason (Wed, 22 Mar 2017 22:40:38 GMT):
@adamludvik Same goes for `sawtooth-tp_config` @pschwarz
pschwarz (Wed, 22 Mar 2017 22:41:25 GMT):
We don't have alternative implementations of those TP's
boydjohnson (Wed, 22 Mar 2017 22:42:31 GMT):
But we might in the future, right?
adamludvik (Wed, 22 Mar 2017 22:43:38 GMT):
@boydjohnson I can reserve those too, but they still need the source mounted.
boydjohnson (Wed, 22 Mar 2017 22:45:06 GMT):
What does source mounted mean in this context?
adamludvik (Wed, 22 Mar 2017 22:45:22 GMT):
@jjason you make a good point. Although doesn't the validator registry depend on PoET and so a non-python implementation would require rewriting PoET?
jjason (Wed, 22 Mar 2017 22:45:49 GMT):
@adamludvik Nope. It would only require rewriting the TP.
jjason (Wed, 22 Mar 2017 22:46:48 GMT):
I could also argue that since Python is the "canonical" language, Python implementations could drop the `_python` moniker.
jjason (Wed, 22 Mar 2017 22:47:07 GMT):
Okay. I have pulled the pin out of the grenade and walked away. My work here is done. ;)
boydjohnson (Wed, 22 Mar 2017 22:47:25 GMT):
I've got to get going, but @jjason could you talk more about the consensus store
adamludvik (Wed, 22 Mar 2017 22:47:36 GMT):
I have not created debs for Java and JavaScript or done any work to make them isolated like the Python components. Theoretically I could just copy the source/compiled code into the image to achieve this though...
boydjohnson (Wed, 22 Mar 2017 22:48:03 GMT):
Oh, thanks @adamludvik.
jjason (Wed, 22 Mar 2017 22:50:54 GMT):
@boydjohnson The PoET consensus module needs to potentially load an arbitrary state view (based upon looking at blocks back in history) to gather enough information to make decisions about whether a validator should initialize a block (BlockPublisher.initialize_block), whether a block should be accepted from another validator (BlockVerifier.verify_block), or which branch of a fork to accept (ForkResolver.compare_forks). Currently, the block publisher and block verifier objects only have the state view for the most-recently-committed block. In order to get the state view for other blocks, they actually need the state view factory.
jjason (Wed, 22 Mar 2017 22:56:28 GMT):
The consensus store would be a mapping of block (block ID, state root hash, whatever) to the PoET consensus state/statistics at that point (for example, the number of blocks claimed by each validator, etc.). That way when a block is to be initialized or verified, the consensus store can be consulted to see if the PoET policies would allow it.
Dan (Thu, 23 Mar 2017 00:07:14 GMT):
@jjason trying to read upwards here... can you clarify for me...
The state view is to let consensus look at the data in the merkle trie at a given time. In poet's case specifically for the validator registry?
Where as the consensus store is intended to store and manage block metadata (like weight) that is not part of 'state' proper?
And you are asking for feedback on consensus receiving a factory method so it can look at state at a variety of states? Can you say more about what that use case is? Is that to calculate c, k, z of the publishing validator?
Dan (Thu, 23 Mar 2017 00:52:58 GMT):
@rjones can you create a sawtooth-consensus channel for us?
jjason (Thu, 23 Mar 2017 03:42:44 GMT):
@dan Yes. The PoET consensus module needs to store additional data that is not part of the state 'proper' and it needs access to the validator registry as it existed when a particular block is the head of the chain (so, for example it knows the PoET public key for a validator). There may be cases in which the consensus module may not have computed statistics for a block and it needs to look up that block's merkle trie to obtain the validator registry at that point in time. These statistics are then used to in the decisions around enforcing the c, k, and z polices when determining in the block publisher whether it should initialize a block (i.e., no reason to initialize a block if it is just going to be rejected by the other validators) or determining in the block verifier if the block should be accepted.
jjason (Thu, 23 Mar 2017 03:42:44 GMT):
@dan Yes. The PoET consensus module needs to store additional data that is not part of the state 'proper' and it needs access to the validator registry as it existed when a particular block was the head of the chain (so, for example it knows the PoET public key for a validator). There may be cases in which the consensus module may not have computed statistics for a block and it needs to look up that block's merkle trie to obtain the validator registry at that point in time. These statistics are then used to in the decisions around enforcing the c, k, and z polices when determining in the block publisher whether it should initialize a block (i.e., no reason to initialize a block if it is just going to be rejected by the other validators) or determining in the block verifier if the block should be accepted.
rjones (Thu, 23 Mar 2017 05:26:36 GMT):
@jjason @Dan I created #sawtooth-consensus for you
Dan (Thu, 23 Mar 2017 13:07:17 GMT):
thanks @rjones!
PacoEcotrust (Thu, 23 Mar 2017 13:13:49 GMT):
hello, the documentation of MarketPlace in the latest tutorial does not appear. why?
PacoEcotrust (Thu, 23 Mar 2017 13:13:49 GMT):
hello, the documentation of MarketPlace in the latest tutorial does not appear. why? It is obsolete with the 0.8 version?
Dan (Thu, 23 Mar 2017 13:14:59 GMT):
Oh sorry about that @PacoEcotrust you hit the project just as we moved from 0.7 to 0.8.
Dan (Thu, 23 Mar 2017 13:15:36 GMT):
No one has ported marketplace into the 0.8 APIs yet
Dan (Thu, 23 Mar 2017 13:16:40 GMT):
You can continue to work through the old tutorial on 0.7 though. If you have the repos you can build the 0.7 docs ... that's not my ideal thing for you to do, but its there.
Dan (Thu, 23 Mar 2017 13:17:29 GMT):
@toddojala are the 0.7 docs still available on github.io? How hard is it to put that dropdown list back on so people can select 0.7?
PacoEcotrust (Thu, 23 Mar 2017 13:19:54 GMT):
ok, thanks, I will try
toddojala (Thu, 23 Mar 2017 13:50:25 GMT):
@PacoEcotrust and @Dan : http://intelledger.github.io/0.7/
toddojala (Thu, 23 Mar 2017 13:50:44 GMT):
The dropdown is still there on http://intelledger.github.io
toddojala (Thu, 23 Mar 2017 13:51:18 GMT):
We switched the default to 0.8, but anyone can still switch to 0.7. If not, let us know. Ryan and I switched and tested, but you never know!
Dan (Thu, 23 Mar 2017 13:51:31 GMT):
thanks @toddojala I could have sworn that dropdown wasn't there last night... maybe its browser dependent ... or maybe I was just too tired. :)
toddojala (Thu, 23 Mar 2017 13:51:38 GMT):
caching issue?
toddojala (Thu, 23 Mar 2017 13:51:56 GMT):
Caches are great, but can be inaccurate. ;)
Dan (Thu, 23 Mar 2017 13:52:08 GMT):
could be. looks good now though. thanks.
Dan (Thu, 23 Mar 2017 16:26:41 GMT):
anyone want to take a stab at expected "normal" transaction size? And max size?
jkilpatr (Thu, 23 Mar 2017 17:36:30 GMT):
Has joined the channel.
jsmitchell (Thu, 23 Mar 2017 17:39:24 GMT):
I have sent 10MB+ blocks over the network
mahesh_rao (Thu, 23 Mar 2017 18:23:10 GMT):
Has joined the channel.
boydjohnson (Thu, 23 Mar 2017 18:41:12 GMT):
```diff --git a/validator/sawtooth_validator/journal/consensus/dev_mode/dev_mode_consensus.py b/validator/sawtooth_validator/journal/consensus/dev_mode/dev_mode_consensus.py
index f42b0d3..078bc90 100644
--- a/validator/sawtooth_validator/journal/consensus/dev_mode/dev_mode_consensus.py
+++ b/validator/sawtooth_validator/journal/consensus/dev_mode/dev_mode_consensus.py
@@ -116,7 +116,8 @@ class BlockVerifier(BlockVerifierInterface):
self._state_view = state_view
def verify_block(self, block_wrapper):
- return block_wrapper.header.consensus == b"Devmode"
+ # return block_wrapper.header.consensus == b"Devmode"
+ return True
class ForkResolver(ForkResolverInterface):```
jsmitchell (Thu, 23 Mar 2017 18:41:49 GMT):
@cianx ^
boydjohnson (Thu, 23 Mar 2017 18:41:55 GMT):
So this diff causes the poet-smoke test to pass *sometimes*.
boydjohnson (Thu, 23 Mar 2017 18:43:29 GMT):
It is because the config is set in the genesis block so the non-genesis validators aren't using Poet yet, but are using dev-mode. The block fails the dev-mode consensus check on those validators.
jsmitchell (Thu, 23 Mar 2017 18:43:37 GMT):
@nconde ^
jsmitchell (Thu, 23 Mar 2017 18:44:47 GMT):
does the consensus check happen before or after the state transition?
jsmitchell (Thu, 23 Mar 2017 18:45:06 GMT):
seems like the state view should be built on top of the transient state from the block
jsmitchell (Thu, 23 Mar 2017 18:45:09 GMT):
@jjason ^
pschwarz (Thu, 23 Mar 2017 18:51:31 GMT):
In genesis, it is using the transient state. There was an issue that I remember discussing with @jjason where this sort of problem occurred on the first block _post_ genesis
pschwarz (Thu, 23 Mar 2017 18:51:51 GMT):
I recall it being fixed by using the transient state
pschwarz (Thu, 23 Mar 2017 18:52:04 GMT):
Could be misremembering, though... :/
cianx (Thu, 23 Mar 2017 18:56:57 GMT):
That dif is not a fix. This is caused by the genesis controller using partial state to instantiate consensus.
cianx (Thu, 23 Mar 2017 18:56:57 GMT):
That dif is not a fix. This is caused by the genesis controller using partial state to onstantiate
boydjohnson (Thu, 23 Mar 2017 18:57:59 GMT):
Yeah, the diff isn't a good fix.
cianx (Thu, 23 Mar 2017 18:59:08 GMT):
State needs to take effect when the block is commited not in middle of a block transition. Which leaves us with a genesis conundrum. What algorithm should validate genesis? Do consensus algorithm s need to be aware of consensus changes?
cianx (Thu, 23 Mar 2017 18:59:08 GMT):
State needs to take effect when the block is commited not in middle of a block transition. Which leaves us with a genesis conundrum. Who should d
cianx (Thu, 23 Mar 2017 18:59:08 GMT):
State needs to take effect when the block is commited not in middle of a block transition. Which leaves us with a genesis conundrum. What algorithm should validate genesis? Do consensus algorithm s need to be aqare of consensus es changes?
jsmitchell (Thu, 23 Mar 2017 19:06:04 GMT):
what are the arguments against first doing the state transition with the transactions in the block to calculate a transient (unapplied) state, then doing consensus validation using a config view based on that transient state, and then applying the transient state once the block is considered valid in all dimensions?
Dan (Thu, 23 Mar 2017 19:13:21 GMT):
@boydjohnson et al ... no reason to change channels now, but note we now have a consensus channel.
cianx (Thu, 23 Mar 2017 19:14:33 GMT):
@Dan we just can't chat right for you.
jsmitchell (Thu, 23 Mar 2017 19:14:58 GMT):
we are chatting the best we can. can't you see that @dan?!!
Dan (Thu, 23 Mar 2017 19:17:12 GMT):
You're just ungrateful. I go get you a nice shiny new channel and you use the old one.
Dan (Thu, 23 Mar 2017 19:18:54 GMT):
no more presents from me
cianx (Thu, 23 Mar 2017 19:23:08 GMT):
When we publish a block we have to do it in the context of the chain head. Since we have to instantiate a consensus algorithm to approve the next block for publishing. The timing of this block approval for publishing affects the batch list for the block. So the final state root hash of the block is dependent on the timing of the consensus algorithm, using transient state makes determining what consensus algorithm to use indeterminate. The determination of the Consensus algorithm in the BlockValidator needs to match the behavior BlockPublisher.
jsmitchell (Thu, 23 Mar 2017 19:25:17 GMT):
yep
jsmitchell (Thu, 23 Mar 2017 19:25:36 GMT):
i buy that
jsmitchell (Thu, 23 Mar 2017 19:26:20 GMT):
ok, so block validation _must_ be grounded in the previous block's ending state
jsmitchell (Thu, 23 Mar 2017 19:26:23 GMT):
for config view
pschwarz (Thu, 23 Mar 2017 19:29:06 GMT):
Which makes sense (and how I thought things were supposed to work), except in during genesis time, which is special
jsmitchell (Thu, 23 Mar 2017 19:29:18 GMT):
but the specialness is causing breakage here, right?
pschwarz (Thu, 23 Mar 2017 19:29:47 GMT):
Yes, which means it's not actually selecting the right consensus module
jsmitchell (Thu, 23 Mar 2017 19:31:22 GMT):
seems like we need a genesis consensus which is the default
jsmitchell (Thu, 23 Mar 2017 19:31:46 GMT):
and is what the genesis block uses
jsmitchell (Thu, 23 Mar 2017 19:32:08 GMT):
which sets config values and establishes the base state for consensus transition in the next block
cianx (Thu, 23 Mar 2017 19:35:15 GMT):
There is already handling in the BlockValidator for the genesis block. It could be modified to return the genesis block state in the case of the genesis block. That would make the BlockValidate match the genesis controllers behavior.
cianx (Thu, 23 Mar 2017 19:35:27 GMT):
I have to go see if I feel dirty for typing that.
cianx (Thu, 23 Mar 2017 19:36:42 GMT):
def _get_previous_block_root_state_hash(self, blkw):
if blkw.previous_block_id == NULL_BLOCK_IDENTIFIER:
*return blkw.state_root_hash*
else:
prev_blkw = self._block_cache[blkw.previous_block_id]
return prev_blkw.state_root_hash
cianx (Thu, 23 Mar 2017 19:37:10 GMT):
the bold line would be the change to the block validator.
cianx (Thu, 23 Mar 2017 19:37:24 GMT):
@boydjohnson ^ can you try that patch
boydjohnson (Thu, 23 Mar 2017 19:38:03 GMT):
Yeah, Just a second.
boydjohnson (Thu, 23 Mar 2017 19:43:38 GMT):
My vagrant locked up during running a test. So halting and upping vagrant.
jjason (Thu, 23 Mar 2017 19:52:48 GMT):
Special casing the genesis block in such a way means that PoET consensus needs to special case it as well as now the block will not have a wait certificate as expected.
jjason (Thu, 23 Mar 2017 19:54:08 GMT):
Also, because of the change to the BlockPublisher/et al interfaces, we need to make sure that the code above is put somewhere common so they don't have to worry about special casing when they want to create a state view with the state view factory.
cianx (Thu, 23 Mar 2017 19:54:12 GMT):
@jjason the patch I gave boyd will not create that situation.
jjason (Thu, 23 Mar 2017 19:56:39 GMT):
@cianx Sure
cianx (Thu, 23 Mar 2017 19:57:51 GMT):
The oddity is the system definition of block validation state, the Genesis block is validated in the context of its own state root hash. All other blocks are validated in the context of the previous blocks state root hash.
jsmitchell (Thu, 23 Mar 2017 19:59:59 GMT):
feels like we can make that cleaner
boydjohnson (Thu, 23 Mar 2017 20:04:49 GMT):
'''[20:03:07.980 ERROR chain] 'hash 61ec0eb93c0c3f2477e5dc83cf52a213f538cc0818c4511afa4d304e1854618d not found in database'
Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/journal/chain.py", line 193, in validate_block
create_view(prev_state)
File "/project/sawtooth-core/validator/sawtooth_validator/state/state_view.py", line 41, in create_view
return StateView(MerkleDatabase(self._database, state_root_hash))
File "/project/sawtooth-core/validator/sawtooth_validator/state/merkle.py", line 36, in __init__
self.set_merkle_root(merkle_root)
File "/project/sawtooth-core/validator/sawtooth_validator/state/merkle.py", line 66, in set_merkle_root
self._root_node = self._get_by_hash(merkle_root)
File "/project/sawtooth-core/validator/sawtooth_validator/state/merkle.py", line 77, in _get_by_hash
raise KeyError("hash {} not found in database".format(key_hash))
KeyError: 'hash 61ec0eb93c0c3f2477e5dc83cf52a213f538cc0818c4511afa4d304e1854618d not found in database''''
boydjohnson (Thu, 23 Mar 2017 20:05:43 GMT):
So when the genesis block comes in to a non-genesis validator, the state root on that block is not in the state of the non-genesis validator.
boydjohnson (Thu, 23 Mar 2017 20:06:16 GMT):
@cianx ^
jjason (Thu, 23 Mar 2017 20:54:58 GMT):
@cianx RE: "The oddity is the ...." means also that giving BlockPublisher, et al, the state factory, creating a state view must be postponed until initialize_block, et al, as trying to do so in the __init__ method when being fired up to process the genesis block results in a different state view being available to it. For example, the BlockPublisher.__init__ method, in the case of the genesis block, the object only has access to the state view asscoiated with INIT_ROOT_KEY because it doesn't have access to a block wrapper yet. However, in the BlockPublisher.initialize_block method it would have access to the state view for the genesis block it is being asked to initialize.
jjason (Thu, 23 Mar 2017 20:56:04 GMT):
Found this out the hard way when trying to start up the enclave and working through why the config TP settings were not being honored (e.g., sawtooth.poet.target_wait_time).
jjason (Thu, 23 Mar 2017 21:03:16 GMT):
Actually....I may be seeing something else...in publisher, it calls _build_block with self._chain_head (line 413). It uses this to create the state view (line 111). At this point, am I right in assuming this is not in the block store/block cache yet? Is the state view for this not-yet-initialized block a copy of the state view from the previous block?
jjason (Thu, 23 Mar 2017 21:03:16 GMT):
Actually....I may be seeing something else...in publisher, it calls `_build_block` with self._chain_head (line 413). It uses this to create the state view (line 111). At this point, am I right in assuming this is not in the block store/block cache yet? Is the state view for this not-yet-initialized block a copy of the state view from the previous block?
cianx (Thu, 23 Mar 2017 21:05:21 GMT):
The candidate block does not exist until after finalize block, as with all other blocks that don't exist it will not exist in the block cache.
jjason (Thu, 23 Mar 2017 21:08:15 GMT):
Okay. That is what thought/hoped.
pschwarz (Thu, 23 Mar 2017 21:25:33 GMT):
Chatting a bit out of band with @jsmitchell, @cianx and @Dan on the subject of the genesis block on non-genesis validators, and we arrived at the solution of introducing a GenesisConsensus module that would be the default consensus as configured from the empty state. This change requires that a genesis.batch needs some settings transactions for configuring the consensus modules for blocks 1+ - not an unreasonable ask since we're planning on making sawtooth_settings vote-only with a minimum of one approved public key, which changes `sawtooth admin genesis` to require at least one set of batches -- unlike now, where it has none.
Dan (Thu, 23 Mar 2017 21:26:16 GMT):
@jjason how does poet handle genesis block (or I guess generally any non-poet block) when it comes to stats like aggregate local mean?
adamludvik (Thu, 23 Mar 2017 21:39:05 GMT):
Hey all, I put up a PR to add security linting as a build step. Right now we fail the test but I have it setup so the build doesn't fail...yet. It seems like we could pass with a reasonable amount of effort. https://github.com/hyperledger/sawtooth-core/pull/248 Feel free to review it or add comments even if I didn't request you.
adamludvik (Thu, 23 Mar 2017 21:43:34 GMT):
Message Attachments
adamludvik (Thu, 23 Mar 2017 21:44:06 GMT):
^ That's a PDF of output from bandit run on our code.
Dan (Thu, 23 Mar 2017 21:46:30 GMT):
If we resolve that an issue is a false positive how do we turn it off? Do we have to do like what we do with inline statements to pylint?
adamludvik (Thu, 23 Mar 2017 21:48:32 GMT):
There is a way to create a baseline, and have bandit only fail if new issues are created: https://wiki.openstack.org/wiki/Security/Projects/Bandit#Bandit_Baseline_Gate
jjason (Thu, 23 Mar 2017 21:49:02 GMT):
Great. So, we just run it twice every time and the second time will find no issues. Problem solved.
adamludvik (Thu, 23 Mar 2017 21:49:10 GMT):
I am looking to see if there is something like what pylint has.
adamludvik (Thu, 23 Mar 2017 21:49:18 GMT):
@jjason lol
adamludvik (Thu, 23 Mar 2017 21:53:48 GMT):
We can also configure it to exclude certain directories, skip certain tests, and control thresholds for severity & confidence before it fails the build.
adamludvik (Thu, 23 Mar 2017 21:54:50 GMT):
And you can add a `# nosec` comment to disable checking for a specific line.
Dan (Thu, 23 Mar 2017 21:59:28 GMT):
Cool. @Tom Barnes ^
jsmitchell (Thu, 23 Mar 2017 22:11:03 GMT):
this is groovy
pschwarz (Thu, 23 Mar 2017 22:34:12 GMT):
That's very cool
adamludvik (Thu, 23 Mar 2017 22:52:41 GMT):
We now have published docker images: https://hub.docker.com/u/hyperledger/dashboard/?page=2
adamludvik (Thu, 23 Mar 2017 22:52:56 GMT):
They are all tagged as unstable though, and subject to change at my whim and fancy.
adamludvik (Thu, 23 Mar 2017 22:54:00 GMT):
@amundson
adamludvik (Thu, 23 Mar 2017 22:54:43 GMT):
https://hub.docker.com/r/hyperledger/sawtooth-validator/
arb_shl (Fri, 24 Mar 2017 12:54:25 GMT):
Has joined the channel.
Dan (Fri, 24 Mar 2017 13:20:38 GMT):
Gits giving me a lot of this error lately (since we changed pr process) when I pull master. It clears up if I pull again. Just curious if anyone else sees this or has a remedy:
`Unlink of file '.git/objects/pack/pack-3bc9cf86a7886eae7bbc72b1703fd1760d2f21d7.idx' failed. Should I try again? (y/n) y`
Dan (Fri, 24 Mar 2017 13:20:38 GMT):
Git's giving me a lot of this error lately (since we changed pr process) when I pull master. It clears up if I pull again. Just curious if anyone else sees this or has a remedy:
`Unlink of file '.git/objects/pack/pack-3bc9cf86a7886eae7bbc72b1703fd1760d2f21d7.idx' failed. Should I try again? (y/n) y`
jsmitchell (Fri, 24 Mar 2017 13:26:50 GMT):
are you running git from inside a vm on a shared filesystem?
Dan (Fri, 24 Mar 2017 14:26:28 GMT):
running git through git bash from windows. I don't pull from within vagrant.. do all my git ops from the git bash shell.
jsmitchell (Fri, 24 Mar 2017 14:26:38 GMT):
oh, windows
Dan (Fri, 24 Mar 2017 14:27:03 GMT):
yes I anticipated that reply ;)
Dan (Fri, 24 Mar 2017 14:34:35 GMT):
hey @adamludvik to run_tests am I expected to first build_all or build_python or ?
adamludvik (Fri, 24 Mar 2017 14:36:18 GMT):
`build_all`
adamludvik (Fri, 24 Mar 2017 14:36:59 GMT):
https://chat.hyperledger.org/channel/sawtoothlake?msg=Ksd3jaG6J3BeeX54o
jjason (Fri, 24 Mar 2017 14:48:25 GMT):
@dan If you only want to run Python tests I only do `build_all -l python` and then `run_tests -x java_sdk -x javascript_sdk`
jjason (Fri, 24 Mar 2017 14:48:53 GMT):
@dan I have not see that unlink problem, but I am not surprised at all as Windows doesn't have a real file system anyway.
jjason (Fri, 24 Mar 2017 14:48:53 GMT):
@dan I have not seen that unlink problem, but I am not surprised at all as Windows doesn't have a real file system anyway.
jsmitchell (Fri, 24 Mar 2017 14:50:52 GMT):
yeah, plus it's probably constantly dorking around stat-ing files and reading them to build searchable indexes or some crap
jsmitchell (Fri, 24 Mar 2017 14:55:36 GMT):
reminder: if you want to lint your code _before_ you push a PR, you can run ./bin/run_lint
jjason (Fri, 24 Mar 2017 14:57:12 GMT):
Stronger reminder: don't even think of pushing your PR without running `./bin/run_lint first`. ;)
jjason (Fri, 24 Mar 2017 14:57:12 GMT):
Stronger reminder: don't even think of pushing your PR without running `./bin/run_lint` first. ;)
jjason (Fri, 24 Mar 2017 15:17:46 GMT):
Question about testing/mocks. I seem several mocks have been created in specific unit test directories under `validator/tests/unit3`. I also see that some unit tests are importing mocks form other unit tests. Since some of these mocks seem generally useful to multiple tests (for example, `MockBlockStore`), would it be beneficial to collect the generic mocks into their own directory for use in multiple unit tests?
agunde (Fri, 24 Mar 2017 15:28:08 GMT):
The idea is that any mocks that are only useful to one set of unit tests for (example only used to test the scheduler) then it should go in the specific unit test directories. If it is a class that could be useful to many unit tests (aka testing library code) it should be moved to a new top level directory called test/sawtooth_test (this has not been created yet)
jjason (Fri, 24 Mar 2017 15:32:54 GMT):
Sounds like a plan to me.
Dan (Fri, 24 Mar 2017 16:11:17 GMT):
I like all my lint publicly exposed
adamludvik (Fri, 24 Mar 2017 17:52:12 GMT):
Could use a couple reviews on this quick versioning fix. Also fixes Ctrl+C not working during the java/javascript steps in build_all: https://github.com/hyperledger/sawtooth-core/pull/250
jsmitchell (Fri, 24 Mar 2017 18:13:59 GMT):
looks like there are some mergeable PRs out there
jsmitchell (Fri, 24 Mar 2017 18:17:02 GMT):
@zac @adamludvik
jsmitchell (Fri, 24 Mar 2017 18:17:54 GMT):
@zac
jsmitchell (Fri, 24 Mar 2017 18:19:58 GMT):
@zac excellent
zac (Fri, 24 Mar 2017 18:20:10 GMT):
Hello
adamludvik (Fri, 24 Mar 2017 18:20:21 GMT):
Waiting for @rbuysse
jsmitchell (Fri, 24 Mar 2017 18:20:52 GMT):
aren't we all
rbuysse (Fri, 24 Mar 2017 18:36:40 GMT):
hi
jsmitchell (Fri, 24 Mar 2017 18:36:52 GMT):
OUR WAIT IS OVER!
jsmitchell (Fri, 24 Mar 2017 18:36:54 GMT):
rejoice!
rbuysse (Fri, 24 Mar 2017 18:37:10 GMT):
don't we have to joice first?
jsmitchell (Fri, 24 Mar 2017 18:38:59 GMT):
If you choose not to deride, you still have made a joice?
Dan (Fri, 24 Mar 2017 19:28:14 GMT):
Did you Rush to that pun?
boydjohnson (Fri, 24 Mar 2017 19:39:16 GMT):
Just calling out, and people are probably doing this regularly, but @zac's merge requires that protogen or build_all be run.
jsmitchell (Fri, 24 Mar 2017 19:39:41 GMT):
I'm basically like while 1: build_all
jsmitchell (Fri, 24 Mar 2017 19:39:50 GMT):
always be building
rjones (Fri, 24 Mar 2017 19:42:37 GMT):
not quite as catchy as Always. Be. Closing.
jsmitchell (Fri, 24 Mar 2017 19:42:50 GMT):
Coffee is for Builders
rjones (Fri, 24 Mar 2017 19:45:51 GMT):
_puts the coffee down_
jsmitchell (Fri, 24 Mar 2017 19:46:07 GMT):
i suspect you build stuff a lot @rjones
rjones (Fri, 24 Mar 2017 19:46:29 GMT):
it's my lot in life ¯\_(ツ)_/¯
pschwarz (Fri, 24 Mar 2017 20:30:01 GMT):
@cianx Right now, the developer experience for creating transaction processors with the Javascript SDK requires a little bit of additionaly setup:
1. Run `bin/build_javascript_sdk`.
2. In their own transaction processor project, add the `sawtooth-sdk` dependency via
```
yarn add file:/project/sawtooth-core/sdk/javascript
```
It will be added as a relative file dependency.
3. From there, they can use `sdk/examples/intkey_javascript` project as an example.
cianx (Fri, 24 Mar 2017 20:31:33 GMT):
Thanks
pschwarz (Fri, 24 Mar 2017 20:32:28 GMT):
Once we are deploying the sdk to the NPM repo, this should be much easier.
cianx (Mon, 27 Mar 2017 06:01:57 GMT):
What is the best way to run a intkey workload against a validator?
cianx (Mon, 27 Mar 2017 06:02:44 GMT):
2nd related but completely different question, what is the best way to write a transaction tester for a new transaction processor?
cianx (Mon, 27 Mar 2017 06:22:18 GMT):
@agunde ^ you might have an answer to the workload?
cianx (Mon, 27 Mar 2017 06:23:52 GMT):
@boydjohnson @drozd ^^ is there a good pattern to follow for building transaction processor/family test frameworks
cianx (Mon, 27 Mar 2017 10:01:15 GMT):
```VAGRANT_BOX = ubuntu/xenial64
VAGRANT_FORWARD_PORTS = true
VAGRANT_MEMORY = 2048
VAGRANT_CPUS = 2
Configuring proxyconf plugin!
http_proxy: http://proxy-us.intel.com:911
https_proxy: http://proxy-us.intel.com:912
no_proxy: intel.com,.intel.com,10.0.0.0,10.0.0.8,192.168.0.0,192.168.0.16,localhost,127.0.0.0,127.0.0.8,134.134.0.0,134.134.0.16,172.16.0.0,172.16.0.20
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: Setting the name of the VM: sawtooth
==> default: Destroying VM and associated drives...
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.3/lib/vagrant/util/is_port_open.rb:21:in `initialize': The requested address is not valid in its context. - connect(2) for "0.0.0.0" port 8800 (Errno::EADDRNOTAVAIL)
from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.3/lib/vagrant/util/is_port_open.rb:21:in `new'
```
cianx (Mon, 27 Mar 2017 10:02:51 GMT):
@adamludvik @amundson ^ I am seeing the error on vagrant up, with Vagrant 1.9.3 and VirtualBox 5.1.18
cianx (Mon, 27 Mar 2017 11:33:44 GMT):
I have seen this on 5 separate machines today. So far it seems to be every windows machine.
cianx (Mon, 27 Mar 2017 11:36:35 GMT):
I put up a pr for this to disable port forwarding but would rather have a fix for port forwarding on windows.
adamludvik (Mon, 27 Mar 2017 12:46:12 GMT):
@cianx Look at sawtooth integration, config, and validator registry for examples of tp tests. They all use some framework code I built in sdk/python/sawtooth_processor_test
adamludvik (Mon, 27 Mar 2017 12:48:34 GMT):
The intkey workload command has a pretty good usage flag if I remember, `intkey workload -h` I think. (I'm on the bus atm.)
adamludvik (Mon, 27 Mar 2017 12:49:47 GMT):
Is the port forwarding issue new? Did anything change recently?
cianx (Mon, 27 Mar 2017 12:52:53 GMT):
I started seeing it Saturday, when I updated my laptop to the latest virtual box and vagrant
cianx (Mon, 27 Mar 2017 12:54:35 GMT):
Today I helped 4 people setup new dev environments all clean installs of the latest virtual box and vagrant. They all had the port forwarding issue.
cianx (Mon, 27 Mar 2017 12:54:46 GMT):
I could not find any leads on the internet.
adamludvik (Mon, 27 Mar 2017 12:58:11 GMT):
Alright, I will take a look soon.
jsmitchell (Mon, 27 Mar 2017 13:02:24 GMT):
https://github.com/mitchellh/vagrant/issues/8395
jsmitchell (Mon, 27 Mar 2017 13:03:48 GMT):
tldr try 127.0.0.1 instead of 0.0.0.0
jsmitchell (Mon, 27 Mar 2017 13:04:01 GMT):
Until the fix is in
adamludvik (Mon, 27 Mar 2017 13:23:59 GMT):
@jsmitchell I will test that and put up a PR if it works, unless you're already working on it
Dan (Mon, 27 Mar 2017 13:47:13 GMT):
baby seal ripe for clubbing: https://github.com/hyperledger/sawtooth-core/pull/254
jsmitchell (Mon, 27 Mar 2017 13:48:10 GMT):
@adamludvik Go for it
agunde (Mon, 27 Mar 2017 13:58:14 GMT):
@cianx Did you get the intkey workload to work?
adamludvik (Mon, 27 Mar 2017 14:14:02 GMT):
@cianx Can you test if this fixes the port forwarding issue? I tested it on a Windows box with the same versions of vagrant and virtual box you mentioned above after reproducing the issue and it seems to work: https://github.com/hyperledger/sawtooth-core/pull/264
Dan (Mon, 27 Mar 2017 15:11:27 GMT):
What's our process for dependent PRs? At least with regard to this scenario.. I put up a simple PR{commit1}. Got to some more involved changes that depend on that PR a day or so later so I put up PR2 {commit1,2,3}. If PR1 gets merged then PR2{commit2,3} is a little easier to review.
pschwarz (Mon, 27 Mar 2017 15:12:32 GMT):
Technically, I think the later PR, if closed first, will auto-close the earlier PR since its commit will also be merged, so long as there wasn't any fix-up/squashes
pschwarz (Mon, 27 Mar 2017 15:13:46 GMT):
Might be best to just close them in favor of the later one, as long as the commits are still nicely separated anyway. They are as easy to review in one PR as multiples.
Dan (Mon, 27 Mar 2017 15:17:05 GMT):
ok, closed #254 in favor of grander #261.
Dan (Mon, 27 Mar 2017 15:17:14 GMT):
ooh colorful.
pschwarz (Mon, 27 Mar 2017 15:17:42 GMT):
That is unexpected - PR's will naturally move though the spectrum as the project ages...
rjones (Mon, 27 Mar 2017 15:33:03 GMT):
@dan I think I've posted the javascript event handler for #sawtoothlake-pr-review before, if anyone can help change it to do what you want I'm all ears (or rather, I'm all copy-paste)
silliman (Mon, 27 Mar 2017 15:38:55 GMT):
Has left the channel.
zac (Mon, 27 Mar 2017 16:07:10 GMT):
Do we want to add a `batch_status` command to the CLI?
zac (Mon, 27 Mar 2017 16:07:23 GMT):
Is that something people would use?
zac (Mon, 27 Mar 2017 16:07:46 GMT):
You can currently `batch show`, and `submit` a batch
jsmitchell (Mon, 27 Mar 2017 16:07:57 GMT):
what would batch_status return?
jsmitchell (Mon, 27 Mar 2017 16:08:09 GMT):
(other than the status of batches)?
zac (Mon, 27 Mar 2017 16:08:19 GMT):
Mostly that
jsmitchell (Mon, 27 Mar 2017 16:08:20 GMT):
like, more specifically, I mean
jsmitchell (Mon, 27 Mar 2017 16:08:31 GMT):
i was just heading off your snark at the pass
zac (Mon, 27 Mar 2017 16:08:37 GMT):
But you coudl tell it to `--wait` if you wanted to know when a batch was committed
zac (Mon, 27 Mar 2017 16:08:42 GMT):
separate from submitting it
jsmitchell (Mon, 27 Mar 2017 16:09:03 GMT):
what are the different possible statuseses
zac (Mon, 27 Mar 2017 16:09:04 GMT):
Because you can already do that with `submit`
zac (Mon, 27 Mar 2017 16:09:32 GMT):
Right now, just `COMMITTED`, `PENDING`, and `UNKNOWN` (i.e. probably rejected)
jsmitchell (Mon, 27 Mar 2017 16:09:47 GMT):
how would it answer COMMITTED?
zac (Mon, 27 Mar 2017 16:09:58 GMT):
There is a place for an `INVALID` status, but no mechanism for detecting that state at the moment
zac (Mon, 27 Mar 2017 16:11:06 GMT):
If you were querying multiple ids:
```
jsmitchell (Mon, 27 Mar 2017 16:11:21 GMT):
no, how does it ask the core if a batch is committed?
zac (Mon, 27 Mar 2017 16:11:47 GMT):
Same a a `batch show` essentially
zac (Mon, 27 Mar 2017 16:11:51 GMT):
Is it in the block store?
jsmitchell (Mon, 27 Mar 2017 16:12:20 GMT):
and pending?
zac (Mon, 27 Mar 2017 16:12:33 GMT):
Checks the batch cache
zac (Mon, 27 Mar 2017 16:12:40 GMT):
If not in either it is Unknown
zac (Mon, 27 Mar 2017 16:12:54 GMT):
Eventually there should be some sort of reject pile
jsmitchell (Mon, 27 Mar 2017 16:13:06 GMT):
batche
zac (Mon, 27 Mar 2017 16:13:13 GMT):
Where Invalid batches would be found, along with a reason
jsmitchell (Mon, 27 Mar 2017 16:13:31 GMT):
yes, this is useful
cianx (Mon, 27 Mar 2017 16:16:04 GMT):
What happened to the docker_build_all command referenced by sawtooth cluster?
cianx (Mon, 27 Mar 2017 16:16:04 GMT):
@adamludvik
zac (Mon, 27 Mar 2017 16:22:38 GMT):
Okay, should be a fairly straightforward add
adamludvik (Mon, 27 Mar 2017 16:23:06 GMT):
`docker_build_all` became `build_all` and `build_all` became `build_python`. Are there residual comments in sawtooth cluster that refer to docker_build_all?
adamludvik (Mon, 27 Mar 2017 16:23:15 GMT):
^ @cianx
zac (Mon, 27 Mar 2017 16:24:21 GMT):
I'm thinking `sawtooth batch status
zac (Mon, 27 Mar 2017 16:25:01 GMT):
Though that would limit it to one batch's status
zac (Mon, 27 Mar 2017 16:25:19 GMT):
Is it important to be able to check multiple batches at a time with this command?
Dan (Mon, 27 Mar 2017 16:27:56 GMT):
thanks @rjones I found the gist you put up before. https://gist.github.com/rjones-lf/fbe68e5fc9cef6ae6a8847df7d08f739#file-gistfile1-txt
rjones (Mon, 27 Mar 2017 16:29:22 GMT):
@dan I didn't mean to send you on a hunt, I got distracted. thank you. IIRC the issue is we either get a small subset of github events that isn't what you need, or we get the flood from github, so the issue is how to prune the flood to just what you need.
rjones (Mon, 27 Mar 2017 16:31:00 GMT):
Message Attachments
rjones (Mon, 27 Mar 2017 16:32:34 GMT):
Message Attachments
Dan (Mon, 27 Mar 2017 16:42:12 GMT):
It's all good @rjones the search on here is pretty good. We could try taking OFF `pull request`. It looks like `pull request review` might be sufficient. Would be a cheap experiment anyway.
rjones (Mon, 27 Mar 2017 16:42:51 GMT):
OK, so leave `push` and `pull request review` ?
boydjohnson (Mon, 27 Mar 2017 16:44:15 GMT):
So I am closing the fix shutdown smoke PR. The details are that right now in master parallel jobs on jenkins will sometimes fail because of how I wrote the test. All that needs to be done is rebuild the PR if you get a "container already exists" type of error on the shutdown-smoke test. When we switch to running our tests with built packages in a few weeks, I will fix the shutdown-smoke test so that parallel jobs on jenkins can be run.
PacoEcotrust (Mon, 27 Mar 2017 16:49:08 GMT):
Hi, I have this problem with the 0.8 version. I think this error I had with the version 0.7 but I do not remember how I resolved. Some one have any idea. Thanks There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", "ac466053-04d0-49e8-8dd7-c74850011916", "--type", "headless"]
Stderr: VBoxManage: error: The virtual machine 'sawtooth' has terminated unexpectedly during startup with exit code 1 (0x1)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine
PacoEcotrust (Mon, 27 Mar 2017 16:49:08 GMT):
Hi, I have this problem with the 0.8 version. I think this error I had with the version 0.7 but I do not remember how I resolved. Some one have any idea. Thanks There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", "ac466053-04d0-49e8-8dd7-c74850011916", "--type", "headless"]
Stderr: VBoxManage: error: The virtual machine 'sawtooth' has terminated unexpectedly during startup with exit code 1 (0x1)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine
I am using ubuntu 16.04 and virtualbox 5.1
PacoEcotrust (Mon, 27 Mar 2017 16:49:08 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=uzwqwR5W4Kr5tzvXs) @boydjohnson I had to reinstall the virtualbox new version. I saved in another place the virtualmachines of 0.7 version. And I had to try several times the vagrant up because I had some problems. I got to finished to run vagrant up, and now I am in this fase. But, dont worry sure it is my fault with mix of versions, Thanks you.
adamludvik (Mon, 27 Mar 2017 16:53:23 GMT):
Can I get a quick review on this PR? Cian needs it for the hackathon: https://github.com/hyperledger/sawtooth-core/pull/264
Dan (Mon, 27 Mar 2017 16:58:04 GMT):
@rjones yes please. Lets see how it looks if we just turn off `pull request`
Dan (Mon, 27 Mar 2017 16:59:38 GMT):
@adamludvik looks like you got 2 green :heavy_check_mark:'s. Are you good to go or still need more eyes on that?
adamludvik (Mon, 27 Mar 2017 16:59:52 GMT):
Just merged
jsmitchell (Mon, 27 Mar 2017 17:00:02 GMT):
@PacoEcotrust: do you have up to date VirtualBox _and_ up to date VirtualBox guest additions?
rjones (Mon, 27 Mar 2017 17:00:13 GMT):
@dan done
PacoEcotrust (Mon, 27 Mar 2017 17:01:27 GMT):
guest additions, no. I will install it, thanks
cianx (Mon, 27 Mar 2017 17:23:58 GMT):
@adamludvik '''
cianx (Mon, 27 Mar 2017 17:24:06 GMT):
```C:\Users\clmontgo\Workspaces\sawtooth\sawtooth-core\manage\sawtooth_manage\docker.py:
189 raise ManagementError(
190 'Docker images not built: {}. Try running '
191: '"docker_build_all"'.format(
192 ', '.join(unbuilt)))
193
adamludvik (Mon, 27 Mar 2017 17:37:04 GMT):
Do we have an intended usage for the cluster command? Now that we are publishing docker images on dockerhub, we could change it so it downloads the images automatically?
jjason (Mon, 27 Mar 2017 17:45:28 GMT):
With the merge of the genesis consensus stuff, the PoET consensus stuff is broken for a bit. I need to make a fix. Will try to push a PR ASAP.
jjason (Mon, 27 Mar 2017 17:45:39 GMT):
:warning: :warning: :warning: :warning: :warning: :warning: :warning:
Dan (Mon, 27 Mar 2017 17:46:04 GMT):
@adamludvik I feel like @amundson and @Tom Barnes have usages and opinions on cluster but might not be available today.
jsmitchell (Mon, 27 Mar 2017 17:51:00 GMT):
Message Attachments
jsmitchell (Mon, 27 Mar 2017 17:51:24 GMT):
:neutral_face:
boydjohnson (Mon, 27 Mar 2017 17:51:31 GMT):
So cluster manage type docker doesn't do peering right now. @adamludvik and I have talked about how to fix it.
toddojala (Mon, 27 Mar 2017 17:51:52 GMT):
@boydjohnson I noticed that today. I was going to mention that.
jsmitchell (Mon, 27 Mar 2017 17:55:33 GMT):
a rare slip-up from the usually perfect @jjason
jsmitchell (Mon, 27 Mar 2017 17:55:38 GMT):
this is a dark day indeed
jsmitchell (Mon, 27 Mar 2017 17:56:00 GMT):
i don't know what to believe anymore
adamludvik (Mon, 27 Mar 2017 17:59:47 GMT):
Cluster manage type docker is actually further broken... I renamed the dockerfiles it depends on. We should clarify its usage and intent before making the fix as that will influence what the right fix is.
jjason (Mon, 27 Mar 2017 18:03:01 GMT):
@jsmitchell I knew that I was going to have to make a fix - that was our discussion about what to do if a consensus module encounters a block it didn't create. I was just hoping I would have at least a little more breathing room before I had to do it ;)
jjason (Mon, 27 Mar 2017 18:03:21 GMT):
It only took @drozd an hour to get tripped up by it :(
cianx (Mon, 27 Mar 2017 18:47:06 GMT):
@dan @adamludvik i have some opinions about the sawtooth cluster tool and how it should work with (on support) of the sdks. But details on those will have to wait until I finish at this mexican bar.
cianx (Mon, 27 Mar 2017 18:47:24 GMT):
Yes I am ar a mexican bar in tel aviv.
cianx (Mon, 27 Mar 2017 18:47:24 GMT):
Yes I am at a mexican bar in tel aviv.
Dan (Mon, 27 Mar 2017 18:49:32 GMT):
You're really doubling down on this reentry problem @cintel.
cianx (Mon, 27 Mar 2017 18:50:51 GMT):
You know how I am when I gamble.
jjason (Mon, 27 Mar 2017 18:50:58 GMT):
It's not like they built a wall around the Mexican bar.
Dan (Mon, 27 Mar 2017 18:51:35 GMT):
yet
jjason (Mon, 27 Mar 2017 18:55:38 GMT):
Worse places to be trapped inside
cianx (Mon, 27 Mar 2017 18:57:44 GMT):
I have two teams at the hackathon using sawtooth, 7 developers -- 4 from intel, 3 from the stock exchange.
jsmitchell (Mon, 27 Mar 2017 19:01:18 GMT):
define 'using'
jsmitchell (Mon, 27 Mar 2017 19:01:23 GMT):
:)
jsmitchell (Mon, 27 Mar 2017 19:01:30 GMT):
that's awesome!
kelly_ (Mon, 27 Mar 2017 19:45:22 GMT):
nice @cianx !
mhart (Mon, 27 Mar 2017 20:07:21 GMT):
Has joined the channel.
mhart (Mon, 27 Mar 2017 20:15:52 GMT):
Hi all! Question: getting lots of `Transaction 210f7ec in batch 0db752 has unsatisfied dependency: d8699` type messages coming from the validator (latest master) – what does this mean exactly?
jsmitchell (Mon, 27 Mar 2017 20:16:24 GMT):
@mhart: where are your batches coming from? intkey?
jsmitchell (Mon, 27 Mar 2017 20:16:36 GMT):
or did you write your own transaction family?
mhart (Mon, 27 Mar 2017 20:16:40 GMT):
intkey
mhart (Mon, 27 Mar 2017 20:16:55 GMT):
but also from my own transaction family :-)
mhart (Mon, 27 Mar 2017 20:17:24 GMT):
I saw them in my own transaction family, then tried with intkey and noticed the same thing
jsmitchell (Mon, 27 Mar 2017 20:18:49 GMT):
yeah, i think there is a bug in publishing
jsmitchell (Mon, 27 Mar 2017 20:18:57 GMT):
@agunde @cianx: ^
jsmitchell (Mon, 27 Mar 2017 20:19:09 GMT):
any additional clues?
jsmitchell (Mon, 27 Mar 2017 20:19:46 GMT):
@mhart: the completer enforces ordered delivery of batches to the publisher
jsmitchell (Mon, 27 Mar 2017 20:20:22 GMT):
where 'ordered' means - "if there is a dependent transaction or batch, make sure it is submitted to the publisher first"
mhart (Mon, 27 Mar 2017 20:20:44 GMT):
there's also no feedback at all from the transaction handler – shouldn't there be errors or something? seems to just be silent
jsmitchell (Mon, 27 Mar 2017 20:21:10 GMT):
@mhart: the transaction handler is never reached in this case
mhart (Mon, 27 Mar 2017 20:21:18 GMT):
ah
jsmitchell (Mon, 27 Mar 2017 20:21:31 GMT):
the headers contain enough information for the publisher to decide that the dependency is unsatisfied
cianx (Mon, 27 Mar 2017 20:21:31 GMT):
@mhart can you see if the dependencies were committed on a block or dropped?
cianx (Mon, 27 Mar 2017 20:21:31 GMT):
@mhart can you see if the drpendencies were committed on a block or dropped?
jsmitchell (Mon, 27 Mar 2017 20:21:56 GMT):
so, there is no sense in scheduling the transactions in the batch for processing
mhart (Mon, 27 Mar 2017 20:22:57 GMT):
@cianx before the first `unsatisfied dependency` message there's a collection of `ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST` messages
mhart (Mon, 27 Mar 2017 20:23:04 GMT):
nothing in between
jsmitchell (Mon, 27 Mar 2017 20:23:35 GMT):
those receiving CLIENT_BATCH_SUBMIT_REQUEST messages are the client submitting the batches to the component interconnect
mhart (Mon, 27 Mar 2017 20:24:18 GMT):
(this is when running `validator -vv` btw)
cianx (Mon, 27 Mar 2017 20:24:32 GMT):
Does @agunde have a recipe to repeat this on intkey?
mhart (Mon, 27 Mar 2017 20:25:46 GMT):
Is it a result of the blockchain being in a certain state? If I delete `/data` for example, should that work again?
jsmitchell (Mon, 27 Mar 2017 20:26:33 GMT):
the 'start fresh' procedure is: rm -rf /home/ubuntu/sawtooth/data/*; ./bin/sawtooth admin genesis; ./bin/validator -vv
mhart (Mon, 27 Mar 2017 20:26:55 GMT):
right, pretty sure that's what I did and ended up with the same problems – lemme try again
jsmitchell (Mon, 27 Mar 2017 20:27:07 GMT):
yeah, i know i've seen this too.
mhart (Mon, 27 Mar 2017 20:27:24 GMT):
this was on master – from a commit sometime yesterday – dunno if that's part of the issue? should I be using a specific tag?
jsmitchell (Mon, 27 Mar 2017 20:27:49 GMT):
no, i think it's a current defect
mhart (Mon, 27 Mar 2017 20:27:52 GMT):
kk
jsmitchell (Mon, 27 Mar 2017 20:29:06 GMT):
@mhart: how are you loading intkey? `intkey workload` or `intkey create_batch; intkey load`
jsmitchell (Mon, 27 Mar 2017 20:29:06 GMT):
@mhart: how are you loading intkey? `intkey workload` or `intkey create_batch; intkey load`?
mhart (Mon, 27 Mar 2017 20:29:17 GMT):
the latter
jsmitchell (Mon, 27 Mar 2017 20:29:24 GMT):
@mhart: also, how many validators are you running?
mhart (Mon, 27 Mar 2017 20:29:27 GMT):
just one
jsmitchell (Mon, 27 Mar 2017 20:29:30 GMT):
ok, cool
jsmitchell (Mon, 27 Mar 2017 20:36:31 GMT):
@cianx: @agunde is going to ping you on this
jsmitchell (Mon, 27 Mar 2017 20:38:27 GMT):
@cianx: is it like midnight there?
cianx (Mon, 27 Mar 2017 20:38:35 GMT):
K, get the dets on how to repro it and I will see what I can do in the am
jsmitchell (Mon, 27 Mar 2017 20:39:11 GMT):
start up a validator and do `./bin/intkey create_batch -c 1000; ./bin/intkey load`
cianx (Mon, 27 Mar 2017 20:39:27 GMT):
Pretty much, good thing I swore off sleep
Dan (Mon, 27 Mar 2017 20:48:01 GMT):
Good thing taco bell is open all night.
rjones (Mon, 27 Mar 2017 20:48:18 GMT):
_ehhhh_
jjason (Mon, 27 Mar 2017 20:48:19 GMT):
Seems like you picked a bad week to stop sniffing glue.
jsmitchell (Mon, 27 Mar 2017 20:48:19 GMT):
Bell Aviv
jjason (Mon, 27 Mar 2017 20:48:30 GMT):
:airplan:
jjason (Mon, 27 Mar 2017 20:48:30 GMT):
:airplane:
rjones (Mon, 27 Mar 2017 20:48:45 GMT):
:woo:
mhart (Mon, 27 Mar 2017 20:58:50 GMT):
hmmm, just reset everything and rebuilt everything and the batches are loading ok now... so I'm not *exactly* sure how to repro
jsmitchell (Mon, 27 Mar 2017 20:59:16 GMT):
yeah, it's not every time
mhart (Mon, 27 Mar 2017 21:02:28 GMT):
I'm assuming loading the same batch of transactions twice is supposed to error? It's not exactly clear what's happening, just a bunch of `ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'961c31a4279c4e33'` messages
mhart (Mon, 27 Mar 2017 21:03:02 GMT):
`intkey load` doesn't error in any way, nor does the validator
jsmitchell (Mon, 27 Mar 2017 21:03:15 GMT):
did you `rm -rf /home/ubuntu/sawtooth/data/*` and `./bin/sawtooth admin genesis`
jsmitchell (Mon, 27 Mar 2017 21:03:25 GMT):
prior to starting validator
jsmitchell (Mon, 27 Mar 2017 21:03:26 GMT):
?
mhart (Mon, 27 Mar 2017 21:03:38 GMT):
yep
jsmitchell (Mon, 27 Mar 2017 21:03:41 GMT):
if you don't do that, it will just sit there on batch submission
jsmitchell (Mon, 27 Mar 2017 21:04:13 GMT):
are you running tp_intkey_python with -vv?
mhart (Mon, 27 Mar 2017 21:04:37 GMT):
yup – I'm talking about submitting the same batch twice right now
jsmitchell (Mon, 27 Mar 2017 21:04:55 GMT):
they will be dropped at the border as duplicates
mhart (Mon, 27 Mar 2017 21:05:04 GMT):
right, no messages indicating that though
jsmitchell (Mon, 27 Mar 2017 21:05:22 GMT):
are you running the validator with -vv?
mhart (Mon, 27 Mar 2017 21:05:26 GMT):
yup
mhart (Mon, 27 Mar 2017 21:05:36 GMT):
Message Attachments
jsmitchell (Mon, 27 Mar 2017 21:05:48 GMT):
if they come in over the network interface, there is definitely a dup message
jsmitchell (Mon, 27 Mar 2017 21:06:15 GMT):
@agunde: ^ re: submitting batches over the interconnect - a good reason to refactor the intkey stuff to the rest api
mhart (Mon, 27 Mar 2017 21:07:13 GMT):
interesting – if I generate a new batch and submit I seem to get a mix of success and `Transaction rejected due missing dependency`
mhart (Mon, 27 Mar 2017 21:07:29 GMT):
so some work, some don't (I think that's what's happening)
mhart (Mon, 27 Mar 2017 21:08:02 GMT):
so maybe that's one way to reproduce... not sure
jsmitchell (Mon, 27 Mar 2017 21:08:16 GMT):
we'll check into it
mhart (Mon, 27 Mar 2017 21:08:46 GMT):
cool – but basically, if I see it again, just reset things and try again?
jsmitchell (Mon, 27 Mar 2017 21:09:09 GMT):
yeah, i suspect you'll see it somewhat frequently :)
mhart (Mon, 27 Mar 2017 21:09:48 GMT):
are there any specific requirements for what a transaction handler must do – or can it just do nothing (ie, log and return) and that will be considered a success?
jsmitchell (Mon, 27 Mar 2017 21:10:53 GMT):
@boydjohnson: interesting question. What happens if a transaction processor doesn't interact with state on a context?
boydjohnson (Mon, 27 Mar 2017 21:12:33 GMT):
The handler.apply doesn't have to do anything, the sdk will interpret the lack of InvalidTransactionError, and InternalError as success.
agunde (Mon, 27 Mar 2017 21:13:55 GMT):
@jsmitchell I can make a story to refactor intkey to use the rest api
mhart (Mon, 27 Mar 2017 21:14:22 GMT):
@boydjohnson ok, thanks
jjason (Mon, 27 Mar 2017 21:29:06 GMT):
Looking to unblock @drozd . Need 2 reviewers for https://github.com/hyperledger/sawtooth-core/pull/265
drozd (Mon, 27 Mar 2017 21:34:04 GMT):
@jjason I don't think I should be part of the approval process, but it seems to pass the test now
jjason (Mon, 27 Mar 2017 21:36:42 GMT):
@drozd No worries.
mhart (Mon, 27 Mar 2017 21:36:43 GMT):
@boydjohnson @jsmitchell is there something special about the intkey batches that require a response? If I change the handler to just return (not modify any state), then it only seems to process one transaction – all the rest don't seem to make it
mhart (Mon, 27 Mar 2017 21:37:07 GMT):
the validator just fills up with `unsatisfied dependency` messages
mhart (Mon, 27 Mar 2017 21:39:00 GMT):
is it maybe better to stick with the REST API for submitting transactions (like in the XO example) instead of the intkey batch examples?
boydjohnson (Mon, 27 Mar 2017 21:39:25 GMT):
I would wonder if there is a bug in the context manager when committing a context that doesn't update state, and so not only doesn't the merkle root get changed, but it may get set to something odd.
jsmitchell (Mon, 27 Mar 2017 21:39:41 GMT):
@mhart: definitely use the rest api for submission
mhart (Mon, 27 Mar 2017 21:39:56 GMT):
@jsmitchell ok, will do
jsmitchell (Mon, 27 Mar 2017 21:40:06 GMT):
the intkey method predates the existence of the rest api
mhart (Mon, 27 Mar 2017 22:00:58 GMT):
Hmmm...
mhart (Mon, 27 Mar 2017 22:01:16 GMT):
Struggling to get `xo` to work
mhart (Mon, 27 Mar 2017 22:01:22 GMT):
Message Attachments
mhart (Mon, 27 Mar 2017 22:01:51 GMT):
the `create` seems to have worked – but the `show` can't find it...?
mhart (Mon, 27 Mar 2017 22:02:14 GMT):
validator says `Unable to find entry at address 5b7349c2f7ee46bc96272...`
jsmitchell (Mon, 27 Mar 2017 22:04:19 GMT):
you started ./bin/tp_xo_python, right?
mhart (Mon, 27 Mar 2017 22:04:55 GMT):
yup – but no logs there so far
mhart (Mon, 27 Mar 2017 22:05:07 GMT):
started with `tp_xo_python -vv`
jsmitchell (Mon, 27 Mar 2017 22:05:11 GMT):
hm. i just tried your steps and it worked for me
jsmitchell (Mon, 27 Mar 2017 22:05:24 GMT):
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ ./bin/tp_xo_python
+-------------------------------+
+ Player 0341ae created a game. +
+-------------------------------+
+-------------------------------+
+ Player 0341ae created a game. +
+-------------------------------+```
mhart (Mon, 27 Mar 2017 22:05:48 GMT):
ok, will restart the transaction processor
mhart (Mon, 27 Mar 2017 22:06:47 GMT):
same thing – here are the validator logs...
mhart (Mon, 27 Mar 2017 22:07:08 GMT):
Message Attachments
mhart (Mon, 27 Mar 2017 22:07:50 GMT):
Message Attachments
jsmitchell (Mon, 27 Mar 2017 22:08:21 GMT):
the dispatch to the transaction processor is not occurring
mhart (Mon, 27 Mar 2017 22:09:33 GMT):
maybe need to reset data again? just weird that there's no errors anywhere
jsmitchell (Mon, 27 Mar 2017 22:10:07 GMT):
yes, every time you restart the validator, you need to delete the data dir and redo `sawtooth admin genesis`
mhart (Mon, 27 Mar 2017 22:10:17 GMT):
yup
mhart (Mon, 27 Mar 2017 22:10:46 GMT):
why is that? surely that's not intended in production?
jsmitchell (Mon, 27 Mar 2017 22:11:14 GMT):
no, we just haven't focused on the restart case yet
mhart (Mon, 27 Mar 2017 22:11:56 GMT):
ok, worked after validator/data reset
mhart (Mon, 27 Mar 2017 22:14:47 GMT):
so – question – if the `create` wasn't actually working, how come there was no error anywhere? is it because the xo client doesn't handle errors at the moment?
jsmitchell (Mon, 27 Mar 2017 22:14:57 GMT):
it's not an error
mhart (Mon, 27 Mar 2017 22:15:02 GMT):
or is there some other step you need to do?
jsmitchell (Mon, 27 Mar 2017 22:15:13 GMT):
the validator accepted your batch for processing
jsmitchell (Mon, 27 Mar 2017 22:15:19 GMT):
and it is enqueued
jsmitchell (Mon, 27 Mar 2017 22:15:48 GMT):
it's just not processing because it's in an inconsistent state based on loading files off of disk
jsmitchell (Mon, 27 Mar 2017 22:15:51 GMT):
(which is a bug)
mhart (Mon, 27 Mar 2017 22:15:57 GMT):
oh – you need to poll the batch state to see if it succeeded or not?
jsmitchell (Mon, 27 Mar 2017 22:16:01 GMT):
yes
mhart (Mon, 27 Mar 2017 22:16:05 GMT):
huh, ok
jsmitchell (Mon, 27 Mar 2017 22:16:12 GMT):
and 'succeded' means very different things in blockchain land
jsmitchell (Mon, 27 Mar 2017 22:16:12 GMT):
and 'succeeded' means very different things in blockchain land
jsmitchell (Mon, 27 Mar 2017 22:16:44 GMT):
for example, it could be put on a block and committed to state, and then _reversed_ by a fork
mhart (Mon, 27 Mar 2017 22:17:13 GMT):
I have a feeling that's something many ppl will want to do (wait until the batch was actually processed) – are there plans to add support to the APIs for that?
jsmitchell (Mon, 27 Mar 2017 22:17:24 GMT):
finality of transactions is a matter of a confidence interval based on the depth in the chain
jsmitchell (Mon, 27 Mar 2017 22:17:32 GMT):
yes, that's in there. It's called wait for commit
mhart (Mon, 27 Mar 2017 22:17:36 GMT):
ok
jsmitchell (Mon, 27 Mar 2017 22:18:21 GMT):
https://github.com/hyperledger/sawtooth-core/pull/252
mhart (Mon, 27 Mar 2017 22:19:21 GMT):
gotcha – also noticed it just now in the REST API – I guess xo just doesn't use it (yet)
jsmitchell (Mon, 27 Mar 2017 22:19:35 GMT):
look at the date on that PR. :)
mhart (Mon, 27 Mar 2017 22:21:12 GMT):
I'm not sure xo uses that? or does it?
mhart (Mon, 27 Mar 2017 22:21:20 GMT):
i thought it was just making raw HTTP calls
jsmitchell (Mon, 27 Mar 2017 22:21:20 GMT):
no, the feature was just added today
jsmitchell (Mon, 27 Mar 2017 22:21:31 GMT):
xo doesn't do it yet
mhart (Mon, 27 Mar 2017 22:21:33 GMT):
i mean, it doesn't use the rest client
jsmitchell (Mon, 27 Mar 2017 22:22:04 GMT):
no, probably not. @zac and @adamludvik can provide more context
jsmitchell (Mon, 27 Mar 2017 22:22:37 GMT):
gotta run
mhart (Mon, 27 Mar 2017 22:22:59 GMT):
cool – I think I've got enough to go on now – thanks!
zac (Tue, 28 Mar 2017 01:20:49 GMT):
I believe XO uses the REST API, but I don't think it uses the `wait` parameter yet
mhart (Tue, 28 Mar 2017 04:12:34 GMT):
@zac right, it uses the REST API, but it doesn't use the rest client that james was referring to in that PR
zac (Tue, 28 Mar 2017 13:57:51 GMT):
Ah sure. For the record, I would consider the rest client to be an internal tool, mostly just for the CLI, though I think a couple of tests borrow it. It might be useful to build some sort of rest client sdk at some point, but the existing client is not functionally complete, well documented, or well tested. It just does what the CLI needs and no more.
zac (Tue, 28 Mar 2017 13:58:39 GMT):
I would recommend using whatever HTTP/JSON libraries you prefer and interact with the REST API directly.
adamludvik (Tue, 28 Mar 2017 14:04:17 GMT):
@mhart I wrote the xo client and it predates the existence of the wait parameter and the RestClient, so it does not utilize either. I would second @zac's suggestion that the REST API be used directly, as he has put a lot of work into defining and documenting that interface, whereas the RestClient hasn't been clearly defined or documented.
mhart (Tue, 28 Mar 2017 14:06:30 GMT):
@zac @adamludvik yeah, thanks all – have actually gotten a REST client working in Node.js talking XO transactions, so all good so far 👍
zac (Tue, 28 Mar 2017 14:06:44 GMT):
Excellent
agunde (Tue, 28 Mar 2017 14:07:15 GMT):
@mhart Currently working on a fix for the dependency issue you were seeing yesterday. Hopefully will have a fix up later today.
jsmitchell (Tue, 28 Mar 2017 14:07:32 GMT):
@mhart: cool! if you want to contribute that at some point to core, go ahead and push a PR.
mhart (Tue, 28 Mar 2017 14:08:10 GMT):
the docs are pretty unclear on the signing stuff to be honest (ie, which fields expect bytes, which fields expect hex strings) – but using-the-source-luke got me most of the way
jsmitchell (Tue, 28 Mar 2017 14:08:37 GMT):
yeah, we have some cleanup and some docs to improve for sure
mhart (Tue, 28 Mar 2017 14:09:53 GMT):
@jsmitchell to be honest, having the signing stuff written in a number of langs will probably be better than documentation anyway – even for newer lang implementations – always hard to exactly describe those requirements without some sort of code examples
jsmitchell (Tue, 28 Mar 2017 14:10:26 GMT):
A PR went in yesterday which simplified the singing interface
mhart (Tue, 28 Mar 2017 14:10:29 GMT):
Once I've gotten our custom transaction family up and running, will be happy to commit some Node.js REST client code back – wherever it fits
jsmitchell (Tue, 28 Mar 2017 14:10:38 GMT):
(got rid of some of the encode/decode stuff)
jsmitchell (Tue, 28 Mar 2017 14:10:47 GMT):
https://github.com/hyperledger/sawtooth-core/pull/261
zac (Tue, 28 Mar 2017 14:13:02 GMT):
Sounds like something for `/sdk`
zac (Tue, 28 Mar 2017 14:13:35 GMT):
Is it an extension of the exist JavaScript SDK?
zac (Tue, 28 Mar 2017 14:13:35 GMT):
Is it an extension of the existing JavaScript SDK?
mhart (Tue, 28 Mar 2017 14:13:43 GMT):
oh cool – as long as the basic standards haven't changed (wif for key storage, secp256k1 for signing, public keys and signatures specified as hex in transactions), I think the Node.js code I've written shouldn't change
mhart (Tue, 28 Mar 2017 14:14:05 GMT):
@zac it reaches in to the existing JS SDK to get the protobuf descriptors
mhart (Tue, 28 Mar 2017 14:14:19 GMT):
As in, I have to do `require('sawtooth-sdk/protobuf/protobuf_bundle.json')`
mhart (Tue, 28 Mar 2017 14:14:27 GMT):
Because it's not currently exported
mhart (Tue, 28 Mar 2017 14:14:34 GMT):
Aside from that, doesn't use anything from the SDK
mhart (Tue, 28 Mar 2017 14:15:06 GMT):
Because the SDK is all around transaction handlers
mhart (Tue, 28 Mar 2017 14:15:08 GMT):
so far
jsmitchell (Tue, 28 Mar 2017 14:15:23 GMT):
@mhart: yeah, that stuff should all be consistent (signing formats)
zac (Tue, 28 Mar 2017 14:15:29 GMT):
Ah yes, that's right
zac (Tue, 28 Mar 2017 14:15:48 GMT):
We do have a task for adding client functionality to it actually
zac (Tue, 28 Mar 2017 14:16:11 GMT):
But the team is putting most of their time into core functionality at the moment
mhart (Tue, 28 Mar 2017 14:16:12 GMT):
I use https://www.npmjs.com/package/secp256k1 and https://www.npmjs.com/package/wif for the various unpacking/signing requirements
zac (Tue, 28 Mar 2017 14:16:44 GMT):
So a PR with those improvements could definitely be helpful
mhart (Tue, 28 Mar 2017 14:17:02 GMT):
Once the right incantations were made with the signing, it was very straightforward – ain't that always the way? :-)
mhart (Tue, 28 Mar 2017 14:18:23 GMT):
Took me many hours to get the signing right though – this code in particular had me scratching my head – trying to figure out exactly what the "compact" serialization was: https://github.com/hyperledger/sawtooth-core/blob/master/signing/sawtooth_signing/secp256k1_signer.py#L136-L137
mhart (Tue, 28 Mar 2017 14:19:52 GMT):
Also took me a long time to figure out that "signing a message" was actually really "signing the sha256 of the message"
mhart (Tue, 28 Mar 2017 14:20:58 GMT):
Because that's not dealt with by the `secp256k1` npm package – it kept complaining that the data being signed wasn't 32 bytes... anyway, got there in the end
jsmitchell (Tue, 28 Mar 2017 14:21:52 GMT):
@pschwarz: ^ good bits for a js signing interface
mhart (Tue, 28 Mar 2017 14:23:23 GMT):
It's as simple as: ```function sign(msg, key) {
const msg32 = crypto.createHash('sha256').update(msg).digest()
return secp256k1.sign(msg32, key).signature.toString('hex')
}
```
mhart (Tue, 28 Mar 2017 14:23:23 GMT):
It's as simple as: ```function sign(msg, key) {
const msg32 = crypto.createHash('sha256').update(msg).digest()
return secp256k1.sign(msg32, key).signature.toString('hex')
}
```
mhart (Tue, 28 Mar 2017 14:23:23 GMT):
It's as simple as:```function sign(msg, key) {
const msg32 = crypto.createHash('sha256').update(msg).digest()
return secp256k1.sign(msg32, key).signature.toString('hex')
}
```
mhart (Tue, 28 Mar 2017 14:23:23 GMT):
It's as simple as:
```
function sign(msg, key) {
const msg32 = crypto.createHash('sha256').update(msg).digest()
return secp256k1.sign(msg32, key).signature.toString('hex')
}
```
jsmitchell (Tue, 28 Mar 2017 14:23:26 GMT):
looks like that compact serialization is 64 bytes (32 of r, 32 of s)
mhart (Tue, 28 Mar 2017 14:24:19 GMT):
Just took me ages to get there :-)
jsmitchell (Tue, 28 Mar 2017 14:25:55 GMT):
if you could jot down notes on things that are confusing or missing in the code or the docs as you go, that would be very helpful feedback for us
mhart (Tue, 28 Mar 2017 14:28:20 GMT):
I'm still a little unsure about the serialization to be honest – the docs mentioned DER format, but when I used the DER serializer from the Node module it came out differently from what the python code was giving me – it ended up just being that the raw signature in hex worked, so that's what I left it as – but I'm unsure as to whether that will fail in certain cases... has matched the python signatures so far, so we'll see
jsmitchell (Tue, 28 Mar 2017 14:29:18 GMT):
@Dan: ^
mhart (Tue, 28 Mar 2017 14:32:15 GMT):
From the npm module docs, it seems that they follow https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki for the DER serialization
mhart (Tue, 28 Mar 2017 14:34:53 GMT):
(it's this document that mentions DER serialization btw: http://intelledger.github.io/0.8/sawtooth_developers_guide/signing_transactions.html )
Dan (Tue, 28 Mar 2017 14:35:59 GMT):
Thanks @mhart I will take a look.
jsmitchell (Tue, 28 Mar 2017 14:36:21 GMT):
@mhart: another area we've had feedback on confusion is the state tree key encoding. It's 35 bytes represented as a hexdigest, where the first three bytes are the namespace for the transaction family and the remaining 32 bytes are transaction family specific encoding.
jsmitchell (Tue, 28 Mar 2017 14:37:12 GMT):
the examples right now typically generate a fixed 6 hex character namespace prefix and append 64 characters of hash of some sensible domain specific natural key structure
mhart (Tue, 28 Mar 2017 14:37:15 GMT):
@jsmitchell you're talking about the `address` scheme?
jsmitchell (Tue, 28 Mar 2017 14:37:17 GMT):
yeah
mhart (Tue, 28 Mar 2017 14:37:20 GMT):
yeah, I noticed that
mhart (Tue, 28 Mar 2017 14:37:51 GMT):
so it's got a fixed size of 35 bytes?
jsmitchell (Tue, 28 Mar 2017 14:37:57 GMT):
that is the intent
mhart (Tue, 28 Mar 2017 14:37:58 GMT):
or is the size variable?
jsmitchell (Tue, 28 Mar 2017 14:38:03 GMT):
it's not currently enforced
jsmitchell (Tue, 28 Mar 2017 14:38:08 GMT):
but it is the intent
jsmitchell (Tue, 28 Mar 2017 14:38:34 GMT):
right now you can write to non 'leaf' nodes in the tree using partial addresses
jsmitchell (Tue, 28 Mar 2017 14:38:38 GMT):
i would not recommend that
mhart (Tue, 28 Mar 2017 14:39:02 GMT):
ok – so "natural" addresses like `namespace/entityType/entityId` can't really be done – without encoding
mhart (Tue, 28 Mar 2017 14:39:18 GMT):
I mean – not unless you're always within 35 bytes
jsmitchell (Tue, 28 Mar 2017 14:39:27 GMT):
that's a perfect thing to hash[:64]
mhart (Tue, 28 Mar 2017 14:39:36 GMT):
yeah, sort of – ideally you wouldn't have to
mhart (Tue, 28 Mar 2017 14:39:49 GMT):
I'm guessing range queries over addresses isn't a thing
jsmitchell (Tue, 28 Mar 2017 14:39:54 GMT):
not a thing
jsmitchell (Tue, 28 Mar 2017 14:41:00 GMT):
we can enumerate the tree from a given partial address, but if the addresses are unstructured, that doesn't really have any meaning, other than 'everything under a namespace'
jsmitchell (Tue, 28 Mar 2017 14:41:19 GMT):
if you wish, you can come up with another encoding scheme that is meaning preserving under the namespace
jsmitchell (Tue, 28 Mar 2017 14:41:53 GMT):
as long as the addresses you generate are 70 hex characters
mhart (Tue, 28 Mar 2017 14:42:07 GMT):
gotcha
mhart (Tue, 28 Mar 2017 14:42:34 GMT):
hashes always make me nervous when it comes to requiring unique addresses
jsmitchell (Tue, 28 Mar 2017 14:42:44 GMT):
the universe is a big place :)
mhart (Tue, 28 Mar 2017 14:42:48 GMT):
truedat
jsmitchell (Tue, 28 Mar 2017 14:43:02 GMT):
plus, you can deal with collisions in your design if you are a paranoid type
mhart (Tue, 28 Mar 2017 14:44:01 GMT):
I guess a 1 in 1.94266889e84 chance ain't that big
mhart (Tue, 28 Mar 2017 14:44:05 GMT):
:-)
pschwarz (Tue, 28 Mar 2017 14:44:39 GMT):
The settings values are a good, simple example of that: we treat them the way you'd tree hash map collisions - highly, highly unlikely hashmap collisions in this case
mhart (Tue, 28 Mar 2017 14:44:59 GMT):
I guess it's really 1 in 1.15792089e77 within a namespace (256 bits)
mhart (Tue, 28 Mar 2017 14:46:11 GMT):
i'm definitely nervous about namespace clashes – I would have thought it's best *not* to hash the namespace, but to declare it explicitly
jsmitchell (Tue, 28 Mar 2017 14:46:47 GMT):
yeah, we have more thinking to do on that topic
jsmitchell (Tue, 28 Mar 2017 14:47:14 GMT):
potentially will do something like a namespace registry for an instance of the blockchain
mhart (Tue, 28 Mar 2017 14:47:27 GMT):
right
mhart (Tue, 28 Mar 2017 14:47:30 GMT):
otherwise it's opaque – and you can't see anywhere whether you might have a collision
jsmitchell (Tue, 28 Mar 2017 14:47:45 GMT):
and then also have configurable 'write permissions' which determine which transaction families can write to that namespace
jsmitchell (Tue, 28 Mar 2017 14:47:59 GMT):
(obvs. everything can read from everywhere)
jsmitchell (Tue, 28 Mar 2017 14:48:41 GMT):
but the data stored at a location is domain specific, so we need to think about a sensible abstraction for transaction families to share that interface/implementation
jsmitchell (Tue, 28 Mar 2017 14:49:45 GMT):
@mhart: it would also be nice to avoid having clients query the running instance to be able to construct transactions
jsmitchell (Tue, 28 Mar 2017 14:50:12 GMT):
which is a current benefit to the lazy approach
mhart (Tue, 28 Mar 2017 14:57:12 GMT):
right, I wouldn't necessarily think you'd need that – I think you could keep it "lazy", just instead of creating an opaque hash, make the 3 bytes explicit (eg, `'xo '), so that even those browsing code could have a good guess of whether the namespaces might clash (and then perhaps it's only on transaction submission that the write permissions, etc are checked)
mhart (Tue, 28 Mar 2017 14:57:12 GMT):
right, I wouldn't necessarily think you'd need that – I think you could keep it "lazy", just instead of creating an opaque hash, make the 3 bytes explicit (eg, `'xo '`), so that even those browsing code could have a good guess of whether the namespaces might clash (and then perhaps it's only on transaction submission that the write permissions, etc are checked)
mhart (Tue, 28 Mar 2017 15:01:41 GMT):
guess it's kinda situation specific – and depends on how much ownership of the namespaces you have in your cluster
mhart (Tue, 28 Mar 2017 15:03:18 GMT):
anyway, not too important at this stage for the proof-of-concept stuff
mhart (Tue, 28 Mar 2017 15:03:31 GMT):
can someone explain how dependencies work across transaction batches?
jsmitchell (Tue, 28 Mar 2017 15:04:03 GMT):
http://intelledger.github.io/0.8/architecture/transactions_and_batches.html
mhart (Tue, 28 Mar 2017 15:04:13 GMT):
as in – if I specify a dependency on another transaction in another batch – how does the validator schedule them?
mhart (Tue, 28 Mar 2017 15:04:20 GMT):
or is the idea that it just rejects them
mhart (Tue, 28 Mar 2017 15:04:24 GMT):
and you resubmit
jsmitchell (Tue, 28 Mar 2017 15:04:44 GMT):
there is a component called the Completer which will not submit a batch to the publisher until its dependencies have been satisfied
mhart (Tue, 28 Mar 2017 15:04:54 GMT):
so it waits?
jsmitchell (Tue, 28 Mar 2017 15:04:59 GMT):
it will request the dependent batch from the network
jsmitchell (Tue, 28 Mar 2017 15:05:07 GMT):
yes, it waits
jsmitchell (Tue, 28 Mar 2017 15:05:31 GMT):
if the dependent batch doesn't arrive, at some point the orphaned batch will be dropped
mhart (Tue, 28 Mar 2017 15:05:40 GMT):
ok
mhart (Tue, 28 Mar 2017 15:07:15 GMT):
btw, do transaction IDs have to be the header signature, or is that just a convenient scheme?
jsmitchell (Tue, 28 Mar 2017 15:07:29 GMT):
they have to be the header signature
mhart (Tue, 28 Mar 2017 15:08:04 GMT):
right, yeah, sorry, just read the docs `List of transaction.header_signatures`
Dan (Tue, 28 Mar 2017 15:11:54 GMT):
Is cbor just an example for serializing the transaction body or is that mandatory.
Dan (Tue, 28 Mar 2017 15:11:54 GMT):
Is cbor just an example for serializing the transaction ~body~ payload or is that mandatory.
jsmitchell (Tue, 28 Mar 2017 15:12:15 GMT):
@Dan: the transaction payload?
jsmitchell (Tue, 28 Mar 2017 15:12:20 GMT):
it is opaque to the core
jsmitchell (Tue, 28 Mar 2017 15:12:31 GMT):
it's an implementation decision by the transaction family developer
pschwarz (Tue, 28 Mar 2017 15:13:07 GMT):
e.g the sawtooth_config transactions use protobuf for the transaction bodies
pschwarz (Tue, 28 Mar 2017 15:13:07 GMT):
e.g the sawtooth_config transactions use protobuf for the transaction ~bodies~ payloads.
jsmitchell (Tue, 28 Mar 2017 15:13:14 GMT):
payloads
pschwarz (Tue, 28 Mar 2017 15:13:27 GMT):
err..yes, that
Dan (Tue, 28 Mar 2017 15:13:32 GMT):
yea sorry payload
mhart (Tue, 28 Mar 2017 15:30:59 GMT):
@Dan for example, XO uses utf8 csv for its encoding instead of cbor
Dan (Tue, 28 Mar 2017 15:32:03 GMT):
cool. I was taking a look at the signing docs you pointed out. cbor read like a requirement, so making some notes about what needs updating there. thanks for pointing this stuff out. it's really timely feedback.
mhart (Tue, 28 Mar 2017 15:32:21 GMT):
yeah, i thought the same initially 👍
Dan (Tue, 28 Mar 2017 15:34:18 GMT):
on the DER encoding were you making a separate call to a DER encoder method after getting the signature?
mhart (Tue, 28 Mar 2017 15:34:39 GMT):
yeah, I was
mhart (Tue, 28 Mar 2017 15:34:47 GMT):
So, looking into the code behind the npm module
mhart (Tue, 28 Mar 2017 15:35:06 GMT):
I think they're doing the compact serialization by default – just on the normal exposed `sign` method: https://github.com/cryptocoinjs/secp256k1-node/blob/master/src/ecdsa.cc#L76
mhart (Tue, 28 Mar 2017 15:35:31 GMT):
Which is why, when I convert that to hex, it matches up with the way the python code is doing things
mhart (Tue, 28 Mar 2017 15:35:46 GMT):
But the "DER" serialization threw me
mhart (Tue, 28 Mar 2017 15:35:55 GMT):
I thought I had to do something extra with it
Dan (Tue, 28 Mar 2017 15:37:04 GMT):
Got it. Before you figured that out were you putting the result into a DER encoder provided by a different node library?
mhart (Tue, 28 Mar 2017 15:37:14 GMT):
no, same library
mhart (Tue, 28 Mar 2017 15:37:26 GMT):
just wasn't comparing the raw sig to begin with
mhart (Tue, 28 Mar 2017 15:38:28 GMT):
the `signatureExport` method in the node module, uses the native `secp256k1_ecdsa_signature_serialize_der` behind the scenes: https://github.com/cryptocoinjs/secp256k1-node/blob/master/src/signature.cc#L47
mhart (Tue, 28 Mar 2017 15:38:46 GMT):
So – are you sure what you're doing is DER serialization?
Dan (Tue, 28 Mar 2017 15:39:17 GMT):
I need to look at the js code but I think they are both getting an already DER encoded sig from the c library.
mhart (Tue, 28 Mar 2017 15:39:22 GMT):
Because when I used that, it *didn't* work – only the "compact" serialization works
Dan (Tue, 28 Mar 2017 15:40:36 GMT):
yeah there's a couple signature formats and then there's the encoding for what constitutes a number.
Dan (Tue, 28 Mar 2017 15:41:35 GMT):
I had picked 'compact' for consistency with some older code, but I'll take a look again this week and make sure we are making good general purpose decisions there.
mhart (Tue, 28 Mar 2017 15:42:15 GMT):
I think the compact serialization might be different from DER
mhart (Tue, 28 Mar 2017 15:42:30 GMT):
esp based on my reading of https://github.com/ludbb/secp256k1-py#class-secp256k1ecdsa
jsmitchell (Tue, 28 Mar 2017 15:43:12 GMT):
yeah, compact looks like r and s packed together into an array of 64 bytes
mhart (Tue, 28 Mar 2017 15:43:17 GMT):
Message Attachments
mhart (Tue, 28 Mar 2017 15:46:26 GMT):
raises a question I had – who determines whether the signature is good? is it just the validator? or do the transaction handlers do it too?
mhart (Tue, 28 Mar 2017 15:46:38 GMT):
signature(s)
Dan (Tue, 28 Mar 2017 15:46:53 GMT):
thanks I'll take a look. My recollection is DER just prescribes what constitutes different number formats. It's not specific to ecdsa. but I will take a look later this week and make sure we are clean there.
jsmitchell (Tue, 28 Mar 2017 15:47:05 GMT):
there is a signature verification step at ingress into the validator
jsmitchell (Tue, 28 Mar 2017 15:47:17 GMT):
the transaction handlers do not do it
mhart (Tue, 28 Mar 2017 15:47:25 GMT):
ok – so the signature scheme, encoding, etc is essentially bound to the sawtooth lake version?
jsmitchell (Tue, 28 Mar 2017 15:48:03 GMT):
yep, although obviously we'll want that to be stable long term
mhart (Tue, 28 Mar 2017 15:48:21 GMT):
ie, "sawtooth v0.8 uses secp256k1 ECDSA compact"
mhart (Tue, 28 Mar 2017 15:48:28 GMT):
etc
Dan (Tue, 28 Mar 2017 15:50:59 GMT):
Yep. We need to be clear on external interface expectations. Signature format is <> and public key format is <> (for signature verification). Private key storage format is up to the user as I don't think there's a use case right now for passing private keys around.
mhart (Tue, 28 Mar 2017 15:52:21 GMT):
Ah right, that's a good point – so the transaction handlers are responsible for checking the key signing?
mhart (Tue, 28 Mar 2017 15:54:15 GMT):
wait, that doesn't make any asense
mhart (Tue, 28 Mar 2017 15:54:15 GMT):
wait, that doesn't make any sense
mhart (Tue, 28 Mar 2017 15:54:22 GMT):
forget that question :-)
Dan (Tue, 28 Mar 2017 15:55:39 GMT):
:)
mhart (Tue, 28 Mar 2017 16:00:12 GMT):
Question around the `inputs`/`outputs` fields – they're a control mechanism? So the transaction handler can't read/write to any addresses except those specified?
mhart (Tue, 28 Mar 2017 16:00:12 GMT):
Question around the `inputs` / `outputs` fields – they're a control mechanism? So the transaction handler can't read/write to any addresses except those specified?
jsmitchell (Tue, 28 Mar 2017 16:01:53 GMT):
Yes
mhart (Tue, 28 Mar 2017 16:01:55 GMT):
if so, that's kinda interesting – makes a very tight coupling between the transaction body and transaction handler
jsmitchell (Tue, 28 Mar 2017 16:02:54 GMT):
It allows us to do parallel execution of transactions via isolation of state changes
mhart (Tue, 28 Mar 2017 16:02:56 GMT):
ie, you have to know ahead of time all the things the transaction may want to look up
mhart (Tue, 28 Mar 2017 16:02:56 GMT):
ie, you have to know ahead of time all the things the transaction handler may want to look up
jsmitchell (Tue, 28 Mar 2017 16:03:05 GMT):
You can specify wildcards
mhart (Tue, 28 Mar 2017 16:03:09 GMT):
ah
mhart (Tue, 28 Mar 2017 16:03:15 GMT):
cool cool
jsmitchell (Tue, 28 Mar 2017 16:03:24 GMT):
That just means we get less parallelism
mhart (Tue, 28 Mar 2017 16:03:52 GMT):
gotcha – ok, didn't realize the wildcard thing – that's a bit more flexible
jsmitchell (Tue, 28 Mar 2017 16:04:14 GMT):
Yeah, you can just specify your namespace in a worst case scenario
mhart (Tue, 28 Mar 2017 16:04:57 GMT):
right – good to know – ideally you don't do that, but if you have to...
mhart (Tue, 28 Mar 2017 16:14:02 GMT):
Just a nit on the XO transaction handler – a number of the exception details are swallowed, eg: https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/xo_python/sawtooth_xo/processor/handler.py#L53-L57 – this makes it hard to figure out what the actual problem might be (in my case I had to convert to a utf8 buffer instead of using a utf8 string in my Node.js client code)
mhart (Tue, 28 Mar 2017 16:14:57 GMT):
the underlying exception was a utf8 conversion exception, but it was just being rethrown as a generic "Invalid payload serialization" exception
mhart (Tue, 28 Mar 2017 16:16:07 GMT):
so including details of the original caught exception would be a bit more useful
agunde (Tue, 28 Mar 2017 16:25:45 GMT):
@mhart I just merged a fix that should resolve that dropping batches that should have satisfied dependencies issue you were seeing yesterday
mhart (Tue, 28 Mar 2017 16:26:20 GMT):
@agunde oh cool, thanks! will give the intkey batches another shot
mhart (Tue, 28 Mar 2017 16:33:38 GMT):
@agunde seems to be working much better so far – all batches processing successfully
agunde (Tue, 28 Mar 2017 16:34:02 GMT):
Sweet! Thanks for testing again :)
mhart (Tue, 28 Mar 2017 16:35:42 GMT):
Seems to be taking a while though...
mhart (Tue, 28 Mar 2017 16:36:37 GMT):
Can't tell if there's some sort of infinite loop or not – it seems to be processing a hell of a lot of transactions, but I think there are only 1000 generated by `intkey create_batch` aren't there?
agunde (Tue, 28 Mar 2017 16:37:45 GMT):
1000 batches with up to 20 transactions each
mhart (Tue, 28 Mar 2017 16:37:45 GMT):
Unless... does `intkey create_batch` append, or rewrite batches.intkey?
mhart (Tue, 28 Mar 2017 16:37:54 GMT):
if it appends... then that might explain it
agunde (Tue, 28 Mar 2017 16:38:08 GMT):
It should rewrite
mhart (Tue, 28 Mar 2017 16:38:20 GMT):
ok – ah, so 20k transactions, got it
agunde (Tue, 28 Mar 2017 16:39:23 GMT):
The actual number of transaction is randomly chosen between 1 and 20 so yes up to 20k transactions
mhart (Tue, 28 Mar 2017 16:39:43 GMT):
Ah, done
agunde (Tue, 28 Mar 2017 16:39:49 GMT):
Also currently we do not have a limit on the number of batches in a block so most of those will end up in one block
mhart (Tue, 28 Mar 2017 16:42:33 GMT):
Ok – so here's a question – if I change the intkey transaction handler to just log and return, and then I load the batches – it processes the very first transaction, but then nothing after that (ie, doesn't look like the validator sends anymore to the transaction handler)
mhart (Tue, 28 Mar 2017 16:43:58 GMT):
Message Attachments
mhart (Tue, 28 Mar 2017 16:44:27 GMT):
this is after resetting the data, restarting everything, etc
mhart (Tue, 28 Mar 2017 16:47:01 GMT):
Message Attachments
mhart (Tue, 28 Mar 2017 16:47:36 GMT):
Message Attachments
mhart (Tue, 28 Mar 2017 16:48:11 GMT):
so... is the validator (or something) expecting the transaction handler to modify the state in some way?
mhart (Tue, 28 Mar 2017 16:54:12 GMT):
Just tried again – this time I get a bunch of `unsatisfied dependency` logs in the validator – still just the one transaction log from the transaction handler though
jsmitchell (Tue, 28 Mar 2017 17:31:05 GMT):
try setting some state
jsmitchell (Tue, 28 Mar 2017 17:31:25 GMT):
i've never tried a no-op handler before
mhart (Tue, 28 Mar 2017 17:35:18 GMT):
Confirmed
mhart (Tue, 28 Mar 2017 17:35:35 GMT):
If I call `state.set` – even with an invalid address
mhart (Tue, 28 Mar 2017 17:35:38 GMT):
It works
jsmitchell (Tue, 28 Mar 2017 17:35:50 GMT):
@boydjohnson: ^ can you create a defect story for this?
mhart (Tue, 28 Mar 2017 17:35:53 GMT):
Message Attachments
mhart (Tue, 28 Mar 2017 17:36:22 GMT):
I mean – it errors when trying to set the state – but all the transactions continue to process
boydjohnson (Tue, 28 Mar 2017 17:36:30 GMT):
yeah, I'll do that.
pschwarz (Tue, 28 Mar 2017 17:36:50 GMT):
Weird
jjason (Tue, 28 Mar 2017 20:59:51 GMT):
Anyone else seen issues when a consensus module returns `False` from its `initialize_block()` method? I am seeing the publisher still coming back calling `check_publish_block()` on a failed block initialization.
jjason (Tue, 28 Mar 2017 21:00:04 GMT):
[20:57:28.232 INFO chain] Chain controller initialized with chain head: f6044138(0, S:30ebab89, P:00000000)
[20:57:28.232 INFO publisher] Now building on top of block: f6044138(0, S:30ebab89, P:00000000)
[20:57:28.556 DEBUG consensus_state_store] Create consensus store: /home/ubuntu/sawtooth/data/poet_consensus_state.lmdb
[20:57:28.557 INFO poet_enclave_factory] Load PoET enclave module: sawtooth_poet_simulator.poet_enclave_simulator.poet_enclave_simulator
[20:57:28.558 INFO poet_enclave_factory] sawtooth.poet.target_wait_time: 20.000000
[20:57:28.558 INFO poet_enclave_factory] sawtooth.poet.initial_wait_time: 3000.000000
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.certificate_sample_length: 50
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.fixed_duration_blocks: 50
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.minimum_wait_time: 1.000000
[20:57:28.966 INFO poet_block_publisher] Register Validator Name=validator-b86489a8, ID=0321fd18...b86489a8, PoET public key=03b32b2b...6e7b16d7
[20:57:28.967 DEBUG poet_block_publisher] We cannot initialize the block because we need to publish PoET signup information
[20:57:28.967 DEBUG publisher] Consensus not ready to build candidate block.
[20:57:28.970 DEBUG interconnect] ServerThread sending TP_PROCESS_REQUEST to b'454717bdf4a8431f'
[20:57:28.974 DEBUG interconnect] ServerThread receiving TP_STATE_GET_REQUEST message: 210 bytes
[20:57:28.975 DEBUG tp_state_handlers] GET: [('6a437247a1c12c0fb03aa6e242e6ce988d1cdc7fcc8c2a62ab3ab1202325d7d677e84c', None)]
[20:57:28.977 DEBUG interconnect] ServerThread sending TP_STATE_GET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.979 DEBUG interconnect] ServerThread receiving TP_STATE_SET_REQUEST message: 353 bytes
[20:57:28.980 DEBUG tp_state_handlers] SET: ['6a437247a1c12c0fb03aa6e242e6ce988d1cdc7fcc8c2a62ab3ab1202325d7d677e84c']
[20:57:28.981 DEBUG interconnect] ServerThread sending TP_STATE_SET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.985 DEBUG interconnect] ServerThread receiving TP_STATE_SET_REQUEST message: 2172 bytes
[20:57:28.988 DEBUG tp_state_handlers] SET: ['6a4372f843d7d846ae7528591d0bb0e3f74b68a141df4267ae5f6ee653d9380993713a']
[20:57:28.989 DEBUG interconnect] ServerThread sending TP_STATE_SET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.993 DEBUG interconnect] ServerThread receiving TP_PROCESS_RESPONSE message: 69 bytes
[20:57:28.994 DEBUG interconnect] message round trip: TP_PROCESS_RESPONSE 0.024252891540527344
[20:57:29.071 CRITICAL publisher] on_check_publish_block exception.
[20:57:29.074 ERROR publisher] 'NoneType' object has no attribute 'has_expired'
Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 419, in on_check_publish_block
self._consensus.check_publish_block(self.
File "/project/sawtooth-core/consensus/poet/core/sawtooth_poet/poet_consensus/poet_block_publisher.py", line 338, in check_publish_block
return self._wait_timer.has_expired(now=time.time())
AttributeError: 'NoneType' object has no attribute 'has_expired'
jjason (Tue, 28 Mar 2017 21:00:04 GMT):
[20:57:28.232 INFO chain] Chain controller initialized with chain head: f6044138(0, S:30ebab89, P:00000000)
[20:57:28.232 INFO publisher] Now building on top of block: f6044138(0, S:30ebab89, P:00000000)
[20:57:28.556 DEBUG consensus_state_store] Create consensus store: /home/ubuntu/sawtooth/data/poet_consensus_state.lmdb
[20:57:28.557 INFO poet_enclave_factory] Load PoET enclave module: sawtooth_poet_simulator.poet_enclave_simulator.poet_enclave_simulator
[20:57:28.558 INFO poet_enclave_factory] sawtooth.poet.target_wait_time: 20.000000
[20:57:28.558 INFO poet_enclave_factory] sawtooth.poet.initial_wait_time: 3000.000000
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.certificate_sample_length: 50
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.fixed_duration_blocks: 50
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.minimum_wait_time: 1.000000
[20:57:28.966 INFO poet_block_publisher] Register Validator Name=validator-b86489a8, ID=0321fd18...b86489a8, PoET public key=03b32b2b...6e7b16d7
[20:57:28.967 DEBUG poet_block_publisher] We cannot initialize the block because we need to publish PoET signup information
`[20:57:28.967 DEBUG publisher] Consensus not ready to build candidate block.`
[20:57:28.970 DEBUG interconnect] ServerThread sending TP_PROCESS_REQUEST to b'454717bdf4a8431f'
[20:57:28.974 DEBUG interconnect] ServerThread receiving TP_STATE_GET_REQUEST message: 210 bytes
[20:57:28.975 DEBUG tp_state_handlers] GET: [('6a437247a1c12c0fb03aa6e242e6ce988d1cdc7fcc8c2a62ab3ab1202325d7d677e84c', None)]
[20:57:28.977 DEBUG interconnect] ServerThread sending TP_STATE_GET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.979 DEBUG interconnect] ServerThread receiving TP_STATE_SET_REQUEST message: 353 bytes
[20:57:28.980 DEBUG tp_state_handlers] SET: ['6a437247a1c12c0fb03aa6e242e6ce988d1cdc7fcc8c2a62ab3ab1202325d7d677e84c']
[20:57:28.981 DEBUG interconnect] ServerThread sending TP_STATE_SET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.985 DEBUG interconnect] ServerThread receiving TP_STATE_SET_REQUEST message: 2172 bytes
[20:57:28.988 DEBUG tp_state_handlers] SET: ['6a4372f843d7d846ae7528591d0bb0e3f74b68a141df4267ae5f6ee653d9380993713a']
[20:57:28.989 DEBUG interconnect] ServerThread sending TP_STATE_SET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.993 DEBUG interconnect] ServerThread receiving TP_PROCESS_RESPONSE message: 69 bytes
[20:57:28.994 DEBUG interconnect] message round trip: TP_PROCESS_RESPONSE 0.024252891540527344
[20:57:29.071 CRITICAL publisher] on_check_publish_block exception.
[20:57:29.074 ERROR publisher] 'NoneType' object has no attribute 'has_expired'
Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 419, in on_check_publish_block
self._consensus.check_publish_block(self.
File "/project/sawtooth-core/consensus/poet/core/sawtooth_poet/poet_consensus/poet_block_publisher.py", line 338, in check_publish_block
return self._wait_timer.has_expired(now=time.time())
AttributeError: 'NoneType' object has no attribute 'has_expired'
jjason (Tue, 28 Mar 2017 21:00:04 GMT):
[20:57:28.232 INFO chain] Chain controller initialized with chain head: f6044138(0, S:30ebab89, P:00000000)
[20:57:28.232 INFO publisher] Now building on top of block: f6044138(0, S:30ebab89, P:00000000)
[20:57:28.556 DEBUG consensus_state_store] Create consensus store: /home/ubuntu/sawtooth/data/poet_consensus_state.lmdb
[20:57:28.557 INFO poet_enclave_factory] Load PoET enclave module: sawtooth_poet_simulator.poet_enclave_simulator.poet_enclave_simulator
[20:57:28.558 INFO poet_enclave_factory] sawtooth.poet.target_wait_time: 20.000000
[20:57:28.558 INFO poet_enclave_factory] sawtooth.poet.initial_wait_time: 3000.000000
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.certificate_sample_length: 50
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.fixed_duration_blocks: 50
[20:57:28.559 INFO poet_enclave_factory] sawtooth.poet.minimum_wait_time: 1.000000
[20:57:28.966 INFO poet_block_publisher] Register Validator Name=validator-b86489a8, ID=0321fd18...b86489a8, PoET public key=03b32b2b...6e7b16d7
[20:57:28.967 DEBUG poet_block_publisher] We cannot initialize the block because we need to publish PoET signup information
`[20:57:28.967 DEBUG publisher] Consensus not ready to build candidate block.`
[20:57:28.970 DEBUG interconnect] ServerThread sending TP_PROCESS_REQUEST to b'454717bdf4a8431f'
[20:57:28.974 DEBUG interconnect] ServerThread receiving TP_STATE_GET_REQUEST message: 210 bytes
[20:57:28.975 DEBUG tp_state_handlers] GET: [('6a437247a1c12c0fb03aa6e242e6ce988d1cdc7fcc8c2a62ab3ab1202325d7d677e84c', None)]
[20:57:28.977 DEBUG interconnect] ServerThread sending TP_STATE_GET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.979 DEBUG interconnect] ServerThread receiving TP_STATE_SET_REQUEST message: 353 bytes
[20:57:28.980 DEBUG tp_state_handlers] SET: ['6a437247a1c12c0fb03aa6e242e6ce988d1cdc7fcc8c2a62ab3ab1202325d7d677e84c']
[20:57:28.981 DEBUG interconnect] ServerThread sending TP_STATE_SET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.985 DEBUG interconnect] ServerThread receiving TP_STATE_SET_REQUEST message: 2172 bytes
[20:57:28.988 DEBUG tp_state_handlers] SET: ['6a4372f843d7d846ae7528591d0bb0e3f74b68a141df4267ae5f6ee653d9380993713a']
[20:57:28.989 DEBUG interconnect] ServerThread sending TP_STATE_SET_RESPONSE to b'454717bdf4a8431f'
[20:57:28.993 DEBUG interconnect] ServerThread receiving TP_PROCESS_RESPONSE message: 69 bytes
[20:57:28.994 DEBUG interconnect] message round trip: TP_PROCESS_RESPONSE 0.024252891540527344
`[20:57:29.071 CRITICAL publisher] on_check_publish_block exception.`
[20:57:29.074 ERROR publisher] 'NoneType' object has no attribute 'has_expired'
Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 419, in on_check_publish_block
self._consensus.check_publish_block(self.
File "/project/sawtooth-core/consensus/poet/core/sawtooth_poet/poet_consensus/poet_block_publisher.py", line 338, in check_publish_block
return self._wait_timer.has_expired(now=time.time())
AttributeError: 'NoneType' object has no attribute 'has_expired'
jjason (Tue, 28 Mar 2017 21:00:17 GMT):
@cianx @jsmitchell ^^^^^^
jsmitchell (Tue, 28 Mar 2017 21:15:00 GMT):
i haven't seen that myself
jsmitchell (Tue, 28 Mar 2017 21:16:29 GMT):
There appears to be no consequence to that condition ("Consensus not ready...") other than that log message
jjason (Tue, 28 Mar 2017 21:21:50 GMT):
Yeah....I am going to do a quick test to see if it is as simple as returning `None` from `Publisher._build_block()`. Otherwise, I will put a story/defect in JIRA, although it will block using PoET in any network of greater than 1 validator (unless I put a hack in the Poet consensus module to work around this).
jjason (Tue, 28 Mar 2017 21:24:47 GMT):
That is....after I fix what I broke in the PoET genesis tool :(
pschwarz (Tue, 28 Mar 2017 21:26:12 GMT):
It should probably drop the block?
jsmitchell (Tue, 28 Mar 2017 21:27:08 GMT):
it doesn't feel like it should proceed until initialize is True
jsmitchell (Tue, 28 Mar 2017 21:27:33 GMT):
given the need for early binding in some consensus implementations
jjason (Tue, 28 Mar 2017 21:27:54 GMT):
Yep.
jsmitchell (Tue, 28 Mar 2017 21:28:48 GMT):
can initialize_block block until complete?
jjason (Tue, 28 Mar 2017 21:28:51 GMT):
That is the problem I am running into - in the `initialize_block()` I need to create the wait timer, but if the initialization fails, there is no wait timer object, thus the exception in `check_claim_block()` when it tries to check the wait timer object has expired.
jjason (Tue, 28 Mar 2017 21:28:59 GMT):
That seems like bad mojo.
jsmitchell (Tue, 28 Mar 2017 21:29:05 GMT):
it probably is
jjason (Tue, 28 Mar 2017 21:29:29 GMT):
I could do that, but it would block for potentially a while - it has to wait for the validator regsitry entry to be published by another validator.
jjason (Tue, 28 Mar 2017 21:29:29 GMT):
I could do that, but it would block for potentially a while - it has to wait for the validator registry entry to be published by another validator.
jsmitchell (Tue, 28 Mar 2017 21:30:05 GMT):
there is no sense in building until that happens though, right?
jjason (Tue, 28 Mar 2017 21:30:17 GMT):
Yep. And that is one of the checks I make.
jsmitchell (Tue, 28 Mar 2017 21:30:27 GMT):
so, we either poll there or make a blocking call
jjason (Tue, 28 Mar 2017 21:30:32 GMT):
Yep
jjason (Tue, 28 Mar 2017 21:31:06 GMT):
Either that.....or the publisher doesn't bother to try to initialize again until either (1) it gets some more transactions or (2) it gets a block from someone else.
jsmitchell (Tue, 28 Mar 2017 21:33:22 GMT):
you could raise an exception and catch it in on_check_publish_block and return empty
jsmitchell (Tue, 28 Mar 2017 21:34:11 GMT):
looks like returning None would have the same effect, but the exception is clearer imo
jjason (Tue, 28 Mar 2017 21:34:20 GMT):
I did short circuit that to check if the wait timer object was `None` and the prevents the exception, but the publisher doesn't seem to like that much either as I return `False` basically meaning that I am never ready to claim.
jjason (Tue, 28 Mar 2017 21:34:48 GMT):
`None` would be returned internally in `publish.py`, which I think may be the right thing to do.
jjason (Tue, 28 Mar 2017 21:58:36 GMT):
So, returning `None` from `Publisher._build_block()` when `initialize_block()` returns `False` prevents calling `check_claim_block()`. The side effect is that `initialize_block()` gets called ever 10ms :)
jjason (Wed, 29 Mar 2017 01:44:51 GMT):
Had a couple of PRs that I had to rebuild once or twice before it passed the PoET smoke test. I have been noticing the in local testing, I see forks even with just a single validator. I don't know if the test is occasionally hitting this and that causes the test to fail.
jjason (Wed, 29 Mar 2017 01:44:51 GMT):
Had a couple of PRs that I had to rebuild once or twice before it passed the PoET smoke test. I have been noticing that in local testing I see forks even with just a single validator. I don't know if the test is occasionally hitting this and that causes the test to fail.
cianx (Wed, 29 Mar 2017 02:16:28 GMT):
@jjason the intention is for the BlockPublisher._build_block to return None if the consensus.initialize_block returns false. the returns statement is missing in the BlockPublisher. The polling you mention above is intentional, the Publisher is either trying to build a block or publish a block.
cianx (Wed, 29 Mar 2017 02:16:28 GMT):
@jjason the intention is for the BlockPublisher._build_block to return None if the conesnsus.initialize_block returns false. the returns statement is missing in the BlockPublisher. The polling you mention above is intentional, the Publisher is either trying to build a block or publish a block.
cianx (Wed, 29 Mar 2017 02:18:02 GMT):
PR approved :), thanks,
jjason (Wed, 29 Mar 2017 02:22:23 GMT):
@cianx You're welcome
jjason (Wed, 29 Mar 2017 02:22:32 GMT):
Thanks for checking PR
PacoEcotrust (Wed, 29 Mar 2017 09:55:08 GMT):
ubuntu@ubuntu-xenial:/project$ /project/sawtooth-core/bin/build_all
[---Building java---]
[ Building sawtooth-build-java... ]
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Set up version 0.8. Following the manual. Some ideas?
PacoEcotrust (Wed, 29 Mar 2017 09:55:08 GMT):
ubuntu@ubuntu-xenial:/project$ /project/sawtooth-core/bin/build_all
[---Building java---]
[ Building sawtooth-build-java... ]
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Set up version 0.8 and into the ssh session. Following the manual. Some ideas?
PacoEcotrust (Wed, 29 Mar 2017 09:55:08 GMT):
Hi, in the version 0.8 is using docker into vagrant. Why it is not installed?
PacoEcotrust (Wed, 29 Mar 2017 09:55:08 GMT):
ubuntu@ubuntu-xenial:/project/sawtooth-core$ validator -v (zmq/backend/cython/socket.c:5156)
File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:7535)
zmq.error.ZMQError: Address already in use
[16:27:29.536 ERROR cli] Address already in use
Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/server/cli.py", line 145, in main
validator.start()
File "/project/sawtooth-core -------------------------------------------after run for second time the validator, seem that does not clean well the port (socket)
toddojala (Wed, 29 Mar 2017 15:03:42 GMT):
@PacoEcotrust @adamludvik Hey Adam - maybe you have some insight here? PacoEcotrust: in my Sawtooth Lake provided Vagrant, docker is installed. The command "which docker" outputs: /usr/bin/docker
boydjohnson (Wed, 29 Mar 2017 15:07:16 GMT):
@PacoEcotrust Did you create a new vagrant environment when you switched to 0.8?
adamludvik (Wed, 29 Mar 2017 15:07:40 GMT):
^
cianx (Wed, 29 Mar 2017 18:12:18 GMT):
Message Attachments
cianx (Wed, 29 Mar 2017 18:13:15 GMT):
Here is a photo of the rock stars ont the tvu hackathon team that decided to use sawtooth this morning.
cianx (Wed, 29 Mar 2017 18:13:15 GMT):
Here is a photo oof the rock stars ont tvu hackathon tean that decided to ude sawtooth this morning.
jsmitchell (Wed, 29 Mar 2017 19:33:25 GMT):
nice!
pschwarz (Wed, 29 Mar 2017 19:34:30 GMT):
Youths!
Dan (Wed, 29 Mar 2017 22:37:30 GMT):
someone remind me etiquette for notifying a reviewer that a change has been made? is it removing them and re-adding them to the reviewers list?
jjason (Wed, 29 Mar 2017 22:56:43 GMT):
If they have requested changes, you should re-add them as reviewer.
jjason (Wed, 29 Mar 2017 22:57:16 GMT):
I have found, if delivered with a basket of muffins, you get a better result ;)
Dan (Wed, 29 Mar 2017 22:58:10 GMT):
Well I'm not giving up any of this Ben and Jerry's.
jjason (Wed, 29 Mar 2017 22:58:47 GMT):
I like that. Every review comes with a free pint of Ben & Jerry's!
Dan (Wed, 29 Mar 2017 23:22:14 GMT):
:ice_cream:
jjason (Wed, 29 Mar 2017 23:37:04 GMT):
@adamludvik Have you seen this:
```[---Running cli tests---]
Creating network "60dab34261e16d87fa2d732409b9b5241562acbc0a4bc0641b7c79e200295516_default" with the default driver
could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
Failed to start all docker containers. Do `docker ps -a` to list residual containers.
Running: ['docker-compose', '-p', '60dab34261e16d87fa2d732409b9b5241562acbc0a4bc0641b7c79e200295516', '-f', './cli/tests/unit_cli.yaml', 'up', '--abort-on-container-exit']```
jjason (Wed, 29 Mar 2017 23:37:26 GMT):
Popping up in build when running tests on PR on GitHub
adamludvik (Wed, 29 Mar 2017 23:38:15 GMT):
Yeahhhhh, Ryan and I are aware of it.
jjason (Wed, 29 Mar 2017 23:38:28 GMT):
Excellent.
PacoEcotrust (Thu, 30 Mar 2017 08:43:19 GMT):
ubuntu@ubuntu-xenial:/project$ /project/sawtooth-core/bin/build_all
[---Building java---]
[ Building sawtooth-build-java... ]
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
ubuntu@ubuntu-xenial:/project$
PacoEcotrust (Thu, 30 Mar 2017 08:43:19 GMT):
ubuntu@ubuntu-xenial:/project$ /project/sawtooth-core/bin/build_all
[---Building java---]
[ Building sawtooth-build-java... ]
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
ubuntu@ubuntu-xenial:/project$ -----------------------Do you know the command to run the deamon?
PacoEcotrust (Thu, 30 Mar 2017 08:43:19 GMT):
ubuntu@ubuntu-xenial:/project$ /project/sawtooth-core/bin/build_all
[---Building java---]
[ Building sawtooth-build-java... ]
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
ubuntu@ubuntu-xenial:/project$ -----------------------Some one know how to resolve this ?
Dan (Thu, 30 Mar 2017 13:54:23 GMT):
@PacoEcotrust I think `service docker status` should show you if it is running and also whether ubuntu thinks it is even available on the system.
Dan (Thu, 30 Mar 2017 13:54:23 GMT):
I think `service docker status` should show you if it is running and also whether ubuntu thinks it is even available on the system.
zac (Thu, 30 Mar 2017 13:58:28 GMT):
@jjason I had that issue on a PR yesterday, and it passed when I reran the build. Looks like an intermittent issue.
boydjohnson (Thu, 30 Mar 2017 14:00:44 GMT):
@zac That was on jenkins?
boydjohnson (Thu, 30 Mar 2017 14:01:57 GMT):
@zac Sorry, didn't see who you were talking to.
boydjohnson (Thu, 30 Mar 2017 14:02:11 GMT):
until now.
adamludvik (Thu, 30 Mar 2017 14:22:12 GMT):
Could use a quick review on this PR: https://github.com/hyperledger/sawtooth-core/pull/273
adamludvik (Thu, 30 Mar 2017 14:23:00 GMT):
Makes it so you don't have to build the external debs locally ever...
adamludvik (Thu, 30 Mar 2017 14:53:14 GMT):
Hello @PacoEcotrust, were you able to resolve your issues with Docker?
PacoEcotrust (Thu, 30 Mar 2017 14:53:31 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=XtJM7bRNbdErFwZyy) @Dan Thank you. I got it to work. After several tryings, updates, upgrades, both host machine as vagrant. Was problem about my computer setup
PacoEcotrust (Thu, 30 Mar 2017 14:53:31 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=XtJM7bRNbdErFwZyy) @Dan Thank you. I got it to work. After several tryings, updates, upgrades, both host machine as vagrant. Was problem about my computer setup. I just passed all test
PacoEcotrust (Thu, 30 Mar 2017 16:37:53 GMT):
(zmq/backend/cython/socket.c:5156)
File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:7535)
zmq.error.ZMQError: Address already in use
[16:27:29.536 ERROR cli] Address already in use
Traceback (most recent call last):
------------------after run valitador for second time-----
boydjohnson (Thu, 30 Mar 2017 17:43:39 GMT):
@PacoEcotrust That is a known problem with shutting down tcp sockets in the validator and transaction processors. Right now we have been "netstat -tp" to find the process that is holding on to the socket, "kill -9
jjason (Thu, 30 Mar 2017 17:44:33 GMT):
@PacoEcotrust I have found that, almost always, if you kill the transaction processors before killing the validator this doesn't happen. However your mileage may vary.
anrodon (Thu, 30 Mar 2017 19:57:23 GMT):
Has joined the channel.
anrodon (Thu, 30 Mar 2017 19:57:26 GMT):
http://area51.stackexchange.com/proposals/107923/hyperledger
adamludvik (Thu, 30 Mar 2017 21:30:12 GMT):
Requesting another quick PR review, this one doesn't even change any code, just adds comments: https://github.com/hyperledger/sawtooth-core/pull/281
jjason (Thu, 30 Mar 2017 21:42:48 GMT):
Would appreciate PR review if anyone has time. https://github.com/hyperledger/sawtooth-core/pull/280
jjason (Thu, 30 Mar 2017 21:50:24 GMT):
I pay twice what @adamludvik pays for PR reviews ;)
adamludvik (Thu, 30 Mar 2017 22:27:39 GMT):
Will take a look tonight or tomorrow morning
jjason (Thu, 30 Mar 2017 22:29:02 GMT):
@adamludvik Thx
mhart (Thu, 30 Mar 2017 23:19:37 GMT):
Question on the REST API – are all the `min_position`, `max_position`, `sort`, `fields`, `omit` references accurate?
mhart (Thu, 30 Mar 2017 23:20:10 GMT):
I only ask cause I can't see anything in the source about them – only the docs: http://intelledger.github.io/0.8/rest_api.html
Dan (Thu, 30 Mar 2017 23:27:46 GMT):
@zac ^
mhart (Thu, 30 Mar 2017 23:28:28 GMT):
The underlying pb client does seem to support paging, but it uses different references: https://github.com/hyperledger/sawtooth-core/blob/1b500782b0a920f6784262582ebeb79ed10b9f59/protos/client.proto#L37-L44
boydjohnson (Thu, 30 Mar 2017 23:29:40 GMT):
zac is gone for the day. Probably will answer tomorrow. My understanding was zac was working on that this sprint.
mhart (Thu, 30 Mar 2017 23:29:48 GMT):
Ok, np
mhart (Thu, 30 Mar 2017 23:32:42 GMT):
Ah, `This specification has not yet to be been fully implemented, and at this point should be considered a roadmap rather than a reference for usage. Until fully implemented, many of the endpoints may not work, or may behave differently than documented.`
boydjohnson (Thu, 30 Mar 2017 23:37:30 GMT):
Yeah
pschwarz (Fri, 31 Mar 2017 13:58:27 GMT):
That is actively in development this week!
zac (Fri, 31 Mar 2017 15:24:03 GMT):
@mhart The REST API specs are probably a little north of 50% implemented
zac (Fri, 31 Mar 2017 15:24:36 GMT):
Most of the endpoints are done, most of the query parameters are not
zac (Fri, 31 Mar 2017 15:24:57 GMT):
That list falls into the not category
zac (Fri, 31 Mar 2017 15:25:29 GMT):
Though min/max and count will be merged early next week
zac (Fri, 31 Mar 2017 15:25:36 GMT):
Which will be a big chunk of it
zac (Fri, 31 Mar 2017 15:27:17 GMT):
(and yeah, I merged the underlying validator support for those parameters just last week)
mhart (Fri, 31 Mar 2017 15:33:48 GMT):
@zac ok, great, thanks for the clarification
zac (Fri, 31 Mar 2017 15:34:37 GMT):
sort, fields, and omit are not immediately on the docket, FYI
mhart (Fri, 31 Mar 2017 15:35:53 GMT):
@zac question on the best strategy to "poll" for changes – am I thinking correctly that I can use the `head` param to return all changes from a particular point?
mhart (Fri, 31 Mar 2017 15:36:26 GMT):
ie, if I poll the REST API, saving the head each time I poll, then use that head to query changes since the last poll?
zac (Fri, 31 Mar 2017 15:36:47 GMT):
Hrmmm
zac (Fri, 31 Mar 2017 15:37:24 GMT):
Well, the intention of `head` is to _prevent_ your results from changing
zac (Fri, 31 Mar 2017 15:37:40 GMT):
So you are always getting results from when that block was the chain head
mhart (Fri, 31 Mar 2017 15:37:43 GMT):
right – by changes I mean additions technically
zac (Fri, 31 Mar 2017 15:37:49 GMT):
Yeah
zac (Fri, 31 Mar 2017 15:38:08 GMT):
I hadn't considered using it that way, but sure
mhart (Fri, 31 Mar 2017 15:38:23 GMT):
Just trying to figure out the best way to turn changes into an event feed
zac (Fri, 31 Mar 2017 15:38:29 GMT):
Grab something from some point in the past, then grab the latest, and calculate the diff
mhart (Fri, 31 Mar 2017 15:38:55 GMT):
I could poll the transactions, but of course I'd need to replicate the exact behaviour to replay them
zac (Fri, 31 Mar 2017 15:39:00 GMT):
Might be useful functionality to bake in at some point
mhart (Fri, 31 Mar 2017 15:41:24 GMT):
We want to hook sawtooth lake up to an event stream, probably AWS Kinesis, so the current thinking is poll *something* and publish to kinesis – just trying to figure out what the *something* should be
zac (Fri, 31 Mar 2017 15:43:03 GMT):
You just want to monitor changes in the blockchain?
mhart (Fri, 31 Mar 2017 15:43:08 GMT):
Yep
zac (Fri, 31 Mar 2017 15:44:07 GMT):
Well, your options at the moment are `/batches`, `/blocks`, and `/state`
mhart (Fri, 31 Mar 2017 15:44:11 GMT):
right
zac (Fri, 31 Mar 2017 15:44:25 GMT):
`/blocks` and `/batches` are similar, just different levels of granularity
mhart (Fri, 31 Mar 2017 15:45:00 GMT):
so they just record transactions? not the result of the transactions... right?
jsmitchell (Fri, 31 Mar 2017 15:45:19 GMT):
You want /state
mhart (Fri, 31 Mar 2017 15:45:23 GMT):
so to replay them you'd need to replicate the transaction handler functionality
jsmitchell (Fri, 31 Mar 2017 15:45:38 GMT):
Just enumerate everything under the namespace
zac (Fri, 31 Mar 2017 15:45:58 GMT):
The question is, do you want to look at transactions, or do you want to look at changes in data
mhart (Fri, 31 Mar 2017 15:46:02 GMT):
I mean, I kind of want state... but really I want the append log
jsmitchell (Fri, 31 Mar 2017 15:46:11 GMT):
Not transactions
mhart (Fri, 31 Mar 2017 15:46:17 GMT):
I don't want to know what the current state is – I want to know all the state transformations
zac (Fri, 31 Mar 2017 15:46:36 GMT):
. . . might you be able to generate state from the transactions?
mhart (Fri, 31 Mar 2017 15:46:38 GMT):
Obviously could figure that out from the current state – but that feels like it would be innefficient
pschwarz (Fri, 31 Mar 2017 15:46:45 GMT):
Getting a stream of state deltas is something in the works as well, just not nearly as far along as the rest api
zac (Fri, 31 Mar 2017 15:46:46 GMT):
Would that be the easiest way to calc a diff?
jsmitchell (Fri, 31 Mar 2017 15:46:49 GMT):
@zac: no
jsmitchell (Fri, 31 Mar 2017 15:46:56 GMT):
This is the wrong path
zac (Fri, 31 Mar 2017 15:47:08 GMT):
You would need to feed them through the TPs
jsmitchell (Fri, 31 Mar 2017 15:47:24 GMT):
@zac: that's what the validator is for
zac (Fri, 31 Mar 2017 15:47:31 GMT):
indeed
jsmitchell (Fri, 31 Mar 2017 15:47:55 GMT):
Right now, the best approach is to get /state under a given prefix
mhart (Fri, 31 Mar 2017 15:48:11 GMT):
@jsmitchell but that's gonna be...
mhart (Fri, 31 Mar 2017 15:48:17 GMT):
really innefficient
jsmitchell (Fri, 31 Mar 2017 15:48:25 GMT):
Yeah, clearly
mhart (Fri, 31 Mar 2017 15:48:35 GMT):
unless
jsmitchell (Fri, 31 Mar 2017 15:48:43 GMT):
See what @pschwarz said above
mhart (Fri, 31 Mar 2017 15:48:53 GMT):
there was a way to use the prefix as a range query ;-)
jsmitchell (Fri, 31 Mar 2017 15:48:58 GMT):
We are not exposing the state transition deltas yet
mhart (Fri, 31 Mar 2017 15:49:06 GMT):
and stick the timestamp in the prefix... or something
zac (Fri, 31 Mar 2017 15:49:54 GMT):
Other than the six-character namespace, I think the addresses are not meaningful at the moment
jsmitchell (Fri, 31 Mar 2017 15:50:31 GMT):
Addresses have transaction family specific meanings
jsmitchell (Fri, 31 Mar 2017 15:50:58 GMT):
If the transaction family implementer chooses to give them one
mhart (Fri, 31 Mar 2017 15:51:07 GMT):
When state changes – doesn't that append to a merkle tree? So isn't it possible to just query from a particular point in the merkle tree?
jsmitchell (Fri, 31 Mar 2017 15:51:34 GMT):
The merkle trie is a copy on write structure based on hashes
jsmitchell (Fri, 31 Mar 2017 15:51:56 GMT):
There is no way to identify what nodes are new to that state root
jsmitchell (Fri, 31 Mar 2017 15:52:21 GMT):
We would need to persist that info elsewhere. We don't do that at the moment.
jsmitchell (Fri, 31 Mar 2017 15:53:43 GMT):
I recommend building an adapter that GETs current state under a namespace, calculating the diff against prior state and submitting the change data events to your kinesis stream
mhart (Fri, 31 Mar 2017 15:54:13 GMT):
Ok
jsmitchell (Fri, 31 Mar 2017 15:54:15 GMT):
We will have better support for this built in in the future, but it is some ways off
mhart (Fri, 31 Mar 2017 15:54:42 GMT):
And partial address queries are relatively efficient?
jsmitchell (Fri, 31 Mar 2017 15:55:48 GMT):
Yeah, should be, assuming there aren't millions of nodes in the tree.
jsmitchell (Fri, 31 Mar 2017 15:56:28 GMT):
This should be considered a proof of concept level solution
mhart (Fri, 31 Mar 2017 15:58:26 GMT):
I guess my question is more – is it (a lot) more efficient to make a query with an address of `namespace/entitytype1/` compared with `namespace/`
jsmitchell (Fri, 31 Mar 2017 15:58:44 GMT):
That is a @zac question
mhart (Fri, 31 Mar 2017 15:58:58 GMT):
ie, are the prefixes built in to the tree structure? and if so, how
jsmitchell (Fri, 31 Mar 2017 15:59:12 GMT):
All your queries will be in address format
jsmitchell (Fri, 31 Mar 2017 15:59:50 GMT):
Address format is 70 hex digits for a full leaf address
jsmitchell (Fri, 31 Mar 2017 16:00:23 GMT):
Any even numbered subset of that represents a tree prefix
jsmitchell (Fri, 31 Mar 2017 16:01:05 GMT):
By convention, transaction family namespaces start with 6 hex digits (3 bytes)
mhart (Fri, 31 Mar 2017 16:03:22 GMT):
right – so assume my scheme is: hash(namespace)[0:6] + hash(entitytype) + hash(entityid)
mhart (Fri, 31 Mar 2017 16:03:22 GMT):
right – so assume my scheme is: hash(namespace)[0:6] + hash(entitytype)[0:16] + hash(entityid)[0:48]
jsmitchell (Fri, 31 Mar 2017 16:03:31 GMT):
Yep
mhart (Fri, 31 Mar 2017 16:04:05 GMT):
then a query of hash(namespace)[0:6] + hash(entitytype) should be more efficient than just hash(namespace)[0:6] – especially if other entities that I'm not querying have many many nodes – right?
mhart (Fri, 31 Mar 2017 16:04:05 GMT):
then a query of hash(namespace)[0:6] + hash(entitytype)[0:16] should be more efficient than just hash(namespace)[0:6] – especially if other entities that I'm not querying have many many nodes – right?
jsmitchell (Fri, 31 Mar 2017 16:04:39 GMT):
You could get /state with hash(namespace)[0:6]+hash(entitytype) to get all entities of that type in the current state
jsmitchell (Fri, 31 Mar 2017 16:05:08 GMT):
Yes, it is going to be linearly related to the number of nodes in the depth first traversal from that node
mhart (Fri, 31 Mar 2017 16:05:38 GMT):
right – and the traversal is done in byte order?
mhart (Fri, 31 Mar 2017 16:05:59 GMT):
as in, first byte is first depth, second byte is second depth, etc
jsmitchell (Fri, 31 Mar 2017 16:06:06 GMT):
Yes
mhart (Fri, 31 Mar 2017 16:06:10 GMT):
perfect, thanks
mhart (Fri, 31 Mar 2017 16:07:12 GMT):
a transaction handler can only write to addresses with a single transaction family namespace, right?
jsmitchell (Fri, 31 Mar 2017 16:08:48 GMT):
We don't enforce that presently
jsmitchell (Fri, 31 Mar 2017 16:09:16 GMT):
And when we do enforce it, it will probably be a many to many relationship
jsmitchell (Fri, 31 Mar 2017 16:09:53 GMT):
Meaning multiple transaction families can write to the same namespace and a transaction family can write to multiple namespaces
mhart (Fri, 31 Mar 2017 16:11:14 GMT):
hmmm, ok – trying to figure out if it's better to model top-level entities (aggregate roots) as just separate namespaces – or better to do it a level down below the namespace
jsmitchell (Fri, 31 Mar 2017 16:12:00 GMT):
I'd recommend keeping it in a single namespace
mhart (Fri, 31 Mar 2017 16:12:10 GMT):
right, that's what I'm leaning towards
mhart (Fri, 31 Mar 2017 16:12:17 GMT):
a namespace per app
jsmitchell (Fri, 31 Mar 2017 16:12:19 GMT):
You have plenty of room for uniqueness down there
mhart (Fri, 31 Mar 2017 16:12:20 GMT):
essentially
jsmitchell (Fri, 31 Mar 2017 16:12:24 GMT):
Yes
Dan (Fri, 31 Mar 2017 16:15:32 GMT):
Docs back to defaulting to 0.8. Thanks Ryan.
mhart (Fri, 31 Mar 2017 16:44:46 GMT):
One way I could optimize for reads (although it would amplify writes) would be to write a state change event for each transaction (on top of the existing state changes) – and use an address scheme for these events that facilitate efficient querying. eg, `hash(namespace) + hash(timestamp-in-mins) + hash(eventid)` – then each poll would just query two addresses: `hash(namespace) + hash(current-time-in-mins)` and `hash(namespace) + hash(current-time-in-mins-minus-one-min)` (and all the caveats that go with that: be sure to poll at least once every min, or poll for each min to last time you polled, etc)
jsmitchell (Fri, 31 Mar 2017 17:14:45 GMT):
I wouldn't recommend designing the storage format to work around this short term limitation in events
jsmitchell (Fri, 31 Mar 2017 17:15:55 GMT):
Also, remember if you do _anything_ with timestamps, they need to be in the transaction created by the client. The transaction processor cannot write its own timestamp into the address or the data.
mhart (Fri, 31 Mar 2017 17:17:43 GMT):
@jsmitchell ah, is that for replay purposes? ie, you can't do anything non-deterministic? or is it just time-related?
jsmitchell (Fri, 31 Mar 2017 17:18:06 GMT):
Non determinism and blockchains don't mix
mhart (Fri, 31 Mar 2017 17:19:06 GMT):
hmm, so that includes GUID generation, etc
mhart (Fri, 31 Mar 2017 17:19:42 GMT):
I don't remember seeing that in the docs
jsmitchell (Fri, 31 Mar 2017 17:19:57 GMT):
The publishing validator that determines the merkle state root as a result of the aggregate state transitions from the transactions its including. That root hash is put on the block header. When the block reaches the validator that is verifying it, it does the same work through the transaction processors. If the outcome state hash doesn't match, the block is invalid.
jsmitchell (Fri, 31 Mar 2017 17:21:22 GMT):
Anything non deterministic breaks that process
mhart (Fri, 31 Mar 2017 17:21:40 GMT):
very good to know – thanks! so that means that all addresses are essentially locked right, so that `state.get` doesn't return something different
jsmitchell (Fri, 31 Mar 2017 17:21:49 GMT):
You must include anything like that in the transaction payload as created by the client
jsmitchell (Fri, 31 Mar 2017 17:22:08 GMT):
Yes
jsmitchell (Fri, 31 Mar 2017 17:22:43 GMT):
Your encoding format must be deterministic, the way you serialize payloads must be deterministic, etc.
jsmitchell (Fri, 31 Mar 2017 17:23:21 GMT):
All validators with the same starting state must generate the same ending state
jsmitchell (Fri, 31 Mar 2017 17:23:52 GMT):
We are going to be creating some transaction processor developer focused docs
mhart (Fri, 31 Mar 2017 17:24:18 GMT):
this definitely needs to be in the docs
mhart (Fri, 31 Mar 2017 17:24:19 GMT):
right
jsmitchell (Fri, 31 Mar 2017 17:24:24 GMT):
Heh, yeah
mhart (Fri, 31 Mar 2017 17:24:30 GMT):
even something under http://intelledger.github.io/txn_family_tutorial.html
jsmitchell (Fri, 31 Mar 2017 17:25:44 GMT):
@toddojala @Dan: ^
jsmitchell (Fri, 31 Mar 2017 17:26:08 GMT):
Good confirmation of our discussed need for better TF developer docs
jsmitchell (Fri, 31 Mar 2017 17:26:52 GMT):
@mhart: I need to understand what you mean by addresses being locked
mhart (Fri, 31 Mar 2017 17:27:05 GMT):
I mean – all the addresses in `inputs`
mhart (Fri, 31 Mar 2017 17:27:12 GMT):
all the addresses you can write
mhart (Fri, 31 Mar 2017 17:27:13 GMT):
to
mhart (Fri, 31 Mar 2017 17:27:16 GMT):
read from
mhart (Fri, 31 Mar 2017 17:27:40 GMT):
because the transaction handler will make decisions based on the results of reading those addresses
mhart (Fri, 31 Mar 2017 17:27:44 GMT):
so they can't change at all
jsmitchell (Fri, 31 Mar 2017 17:27:57 GMT):
That is for parallelism, not for a point in time state
mhart (Fri, 31 Mar 2017 17:28:04 GMT):
from when the first transaction handler reads them – to when the final confirmation happens
jsmitchell (Fri, 31 Mar 2017 17:28:12 GMT):
They can in fact change
mhart (Fri, 31 Mar 2017 17:28:24 GMT):
so... that's non-deterministic?
jsmitchell (Fri, 31 Mar 2017 17:28:31 GMT):
No
mhart (Fri, 31 Mar 2017 17:28:37 GMT):
no transaction isolation
jsmitchell (Fri, 31 Mar 2017 17:28:52 GMT):
This is difficult to express over text :)
mhart (Fri, 31 Mar 2017 17:28:54 GMT):
or am i confused about where the state is actually stored?
jsmitchell (Fri, 31 Mar 2017 17:29:13 GMT):
The block publisher is determining to ordering of transactions
jsmitchell (Fri, 31 Mar 2017 17:29:20 GMT):
The ordering
jsmitchell (Fri, 31 Mar 2017 17:29:31 GMT):
That process does not have to be deterministic
jsmitchell (Fri, 31 Mar 2017 17:29:36 GMT):
It is done once
mhart (Fri, 31 Mar 2017 17:29:53 GMT):
is each state local to each transaction handler?
jsmitchell (Fri, 31 Mar 2017 17:29:55 GMT):
But the validation of that block must be identical every time
jsmitchell (Fri, 31 Mar 2017 17:30:01 GMT):
No, state is global
jsmitchell (Fri, 31 Mar 2017 17:30:27 GMT):
So, the ordering of transactions is based on what batches are in the publishers pending queue
jsmitchell (Fri, 31 Mar 2017 17:31:31 GMT):
But when the block data structure is written out, it includes an explicit order, along with the rules around isolation dependencies for inputs and outputs - this gives a repeatable order of evaluation for transactions
jsmitchell (Fri, 31 Mar 2017 17:32:15 GMT):
But, txn 1 in the block can write to address A, and txn 2 can read from address A, and it will get the result placed there by txn 1
mhart (Fri, 31 Mar 2017 17:32:22 GMT):
but if those transactions change behavior depending on state...
mhart (Fri, 31 Mar 2017 17:32:26 GMT):
how do you replay them?
mhart (Fri, 31 Mar 2017 17:32:36 GMT):
if the state has changed in the meantime?
jsmitchell (Fri, 31 Mar 2017 17:32:49 GMT):
You are starting with the same base state
jsmitchell (Fri, 31 Mar 2017 17:32:57 GMT):
Which is the ending state of the prior block
mhart (Fri, 31 Mar 2017 17:33:00 GMT):
ok
jsmitchell (Fri, 31 Mar 2017 17:33:14 GMT):
And you are playing back a deterministic set of operations
mhart (Fri, 31 Mar 2017 17:33:21 GMT):
so it's not exactly global – or, not in the way I was thinking
jsmitchell (Fri, 31 Mar 2017 17:33:30 GMT):
It's 100% global
jsmitchell (Fri, 31 Mar 2017 17:33:36 GMT):
Everyone has a copy of it
jsmitchell (Fri, 31 Mar 2017 17:33:52 GMT):
And it's monolithic
mhart (Fri, 31 Mar 2017 17:33:54 GMT):
you know what I mean – the state that a transaction processor sees
mhart (Fri, 31 Mar 2017 17:34:03 GMT):
ie, a `state.get`
jsmitchell (Fri, 31 Mar 2017 17:34:11 GMT):
State that a transaction processor sees is super limited
jsmitchell (Fri, 31 Mar 2017 17:34:27 GMT):
It's defined by its inputs list
jsmitchell (Fri, 31 Mar 2017 17:34:44 GMT):
And it doesn't get to choose _when_ it is executed
jsmitchell (Fri, 31 Mar 2017 17:34:53 GMT):
The block publisher is making that choice
mhart (Fri, 31 Mar 2017 17:35:33 GMT):
that's what I meant by is state local to the transaction handler
jsmitchell (Fri, 31 Mar 2017 17:36:02 GMT):
But it can define any inputs it wants including *
jsmitchell (Fri, 31 Mar 2017 17:37:22 GMT):
It is entirely possible to create a transaction which you think will be successful when it's created but fails when a publisher attempts to include it in a block because the state assumptions have changed
mhart (Fri, 31 Mar 2017 17:38:05 GMT):
Right – but this statement – "When the block reaches the validator that is verifying it, it does the same work through the transaction processors"
jsmitchell (Fri, 31 Mar 2017 17:38:13 GMT):
For example, I have $10. I create a txn to pay you $10, and a txn to pay Dan $10. It would be a pretty bad deal if the system allowed both of those to succeed
mhart (Fri, 31 Mar 2017 17:39:14 GMT):
each transaction processor can't be setting the same global state every time they do `state.set` – they must be operating on their own copy of state...?
jsmitchell (Fri, 31 Mar 2017 17:39:16 GMT):
Yes, the publisher's creation of a block data structure is the codifying of a set of operations that must result in an identical state hash wherever they are processed
jsmitchell (Fri, 31 Mar 2017 17:39:34 GMT):
Oh, yes. It's their own copy
jsmitchell (Fri, 31 Mar 2017 17:39:50 GMT):
But we can _prove_ that it's the same
mhart (Fri, 31 Mar 2017 17:39:53 GMT):
right
mhart (Fri, 31 Mar 2017 17:48:55 GMT):
btw, I hate to be "that guy", but just to clarify – sawtooth lake basically shares nothing with fabric, right? Like, "hyperledger" is just some loose umbrella org
rbuysse (Fri, 31 Mar 2017 17:50:10 GMT):
correct.
mhart (Fri, 31 Mar 2017 17:52:36 GMT):
cool. pity about the name. hyperledger sounds like an actual... you know... ledger
jsmitchell (Fri, 31 Mar 2017 17:54:39 GMT):
Haha
jsmitchell (Fri, 31 Mar 2017 17:56:47 GMT):
The projects have different ideas about what is important. I believe the goal remains to crystallize those ideas and cross-pollinate.
mhart (Fri, 31 Mar 2017 18:23:39 GMT):
yeah, but there's definitely some confusion out there
mhart (Fri, 31 Mar 2017 18:23:53 GMT):
even wikipedia describes hyperledger as "a platform"
mhart (Fri, 31 Mar 2017 18:24:13 GMT):
and it's often referred to as "the hyperledger project"
mhart (Fri, 31 Mar 2017 18:24:41 GMT):
which makes as much sense as "the linux foundation project"
Dan (Fri, 31 Mar 2017 18:31:16 GMT):
There's no lack of consternation about that here.:unamused:
Dan (Fri, 31 Mar 2017 18:31:16 GMT):
There's no lack of consternation about that here. :unamused:
mhart (Fri, 31 Mar 2017 18:31:50 GMT):
yeah, fait enough
mhart (Fri, 31 Mar 2017 18:31:50 GMT):
yeah, fair enough
mhart (Fri, 31 Mar 2017 18:34:08 GMT):
I guess it's only a matter of time before ppl start saying things like "it's built on hyperledger"
mhart (Fri, 31 Mar 2017 18:34:11 GMT):
ah, naming things
Dan (Fri, 31 Mar 2017 18:43:27 GMT):
Yeah that's already an issue :rolling_eyes:
choas (Sat, 01 Apr 2017 19:52:40 GMT):
Has joined the channel.
mhart (Sun, 02 Apr 2017 18:19:22 GMT):
what's the best option for running sawtooth lake on SGX right now? Is it available on AWS, etc?
kelly_ (Sun, 02 Apr 2017 21:28:12 GMT):
SGX is not yet available on server/in cloud deployments
kelly_ (Sun, 02 Apr 2017 21:29:16 GMT):
all skylake and beyond desktop/laptop processors include sgx capability (intel core 6th gen)
kelly_ (Sun, 02 Apr 2017 21:29:36 GMT):
not all bios support it though (e.g. i don't believe it is available on mac today)
kelly_ (Sun, 02 Apr 2017 21:30:26 GMT):
here is a list of some systems that it is available on - https://github.com/ayeks/SGX-hardware
kelly_ (Sun, 02 Apr 2017 21:30:39 GMT):
we have HP and Intel NUC machines that we do most development on
mhart (Mon, 03 Apr 2017 00:16:18 GMT):
Thanks @kelly_
Dan (Mon, 03 Apr 2017 19:08:43 GMT):
in 0.8 do we have a notion of a validator ID as distinct from a validator's public key? Are we perpetuating the validator name field from 0.6?
jsmitchell (Mon, 03 Apr 2017 19:13:57 GMT):
there ain't no such
jsmitchell (Mon, 03 Apr 2017 19:14:09 GMT):
not yet anyhow
jjason (Mon, 03 Apr 2017 19:39:04 GMT):
There is no validator name.
agunde (Tue, 04 Apr 2017 14:02:00 GMT):
I am working on defining the configurable logging implementation for 0.8 and had some preference questions. What should be the default logging settings? In 0.7, the logs were put into the default log directory and two files were created, a debug.log for all log statements and error.log for any error log statements. Do we want to have the same set up for 0.8?
toddojala (Tue, 04 Apr 2017 14:39:00 GMT):
That sounds reasonable to me, @agunde, but I'm not a logging expert.
agunde (Tue, 04 Apr 2017 16:27:57 GMT):
I would assume we want to have a configurable logging option for the python transaction processors as well as the validator? Both the transaction processors and the validators do not have unique names. In 0.7 the logging files mentioned above would look like val_name-debug.log and val_name-error.log. Does anyone have a suggestion or preference on how the log files should be distinguished from each other?
jjason (Tue, 04 Apr 2017 16:34:19 GMT):
For the validators in the validator registry (even though we don't seem to care about name any more), I used validator-[first 8 of public key string]
jjason (Tue, 04 Apr 2017 16:34:52 GMT):
It would be nice if we standardized on something ;)
Dan (Tue, 04 Apr 2017 16:37:58 GMT):
Where do validators running via docker stick their logs?
agunde (Tue, 04 Apr 2017 16:45:14 GMT):
According to a convo I just had with @boydjohnson, they would go in the Linux defaults within the docker container (var/log/sawtooth) @Dan
PacoEcotrust (Tue, 04 Apr 2017 17:07:47 GMT):
The ubuntu packages generation in v8 is the same than v7? I want to develop into ubuntu
adamludvik (Tue, 04 Apr 2017 17:47:56 GMT):
Hello Paco, if you would like to develop a transaction family in 0.8, we have a new package repository that may make your life easier. This demo shows how to use it to install sawtooth on a new Ubuntu 16.04 box using vagrant: https://asciinema.org/a/109608 If you already have a running Ubuntu 16.04 box, you should be able to skip passed the vagrant up portion.
adamludvik (Tue, 04 Apr 2017 17:47:56 GMT):
Hello @PacoEcotrust , if you would like to develop a transaction family in 0.8, we have a new package repository that may make your life easier. This demo shows how to use it to install sawtooth on a new Ubuntu 16.04 box using vagrant: https://asciinema.org/a/109608 If you already have a running Ubuntu 16.04 box, you should be able to skip passed the vagrant up portion.
kellyo (Tue, 04 Apr 2017 18:39:16 GMT):
Has joined the channel.
PacoEcotrust (Wed, 05 Apr 2017 15:31:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=CcywALdmbSjEt7hCy) @adamludvik
PacoEcotrust (Wed, 05 Apr 2017 15:31:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=CcywALdmbSjEt7hCy) Thanks, now I have problem with versions: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Preparing to unpack .../python3-bitcoin_1.1.42-1_all.deb ...
Unpacking python3-bitcoin (1.1.42-1) ...
dpkg: error processing archive /var/cache/apt/archives/python3-bitcoin_1.1.42-1_all.deb (--unpack):
trying to overwrite '/usr/bin/pybtctool', which is also in package python-pybitcointools 1.1.15-1
adamludvik (Wed, 05 Apr 2017 15:37:30 GMT):
Are you working in a clean environment, or are you using a pre-existing environment where you already had bitcoin installed?
pschwarz (Wed, 05 Apr 2017 15:38:53 GMT):
Hey all, with the merger of PR #296 (https://github.com/hyperledger/sawtooth-core/pull/296) you no longer need to do a run `sawtooth admin genesis` after restarts. You block chain and state will be preserved across restarts. If you want to start from a clean state, delete the contents of your data directory (if you're using Vagrant, this is `rm $SAWTOOTH_HOME/data/*`)
PacoEcotrust (Wed, 05 Apr 2017 15:40:15 GMT):
[ ](https://chat.hyperledger.org/channel. /sawtoothlake?msg=Q5EwMzqAWPfxFGQX5) @adamludvik -----------Yes, I had installed the sawtooth v7
PacoEcotrust (Wed, 05 Apr 2017 15:40:51 GMT):
[ ](https://chat.hyperledger.org/channel----Yes, I had installed the sawtooth v7 /sawtoothlake?msg=Q5EwMzqAWPfxFGQX5) @adamludvik
PacoEcotrust (Wed, 05 Apr 2017 15:41:20 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=Q5EwMzqAWPfxFGQX5) @adamludvik ---Yes, I had installed the sawtooth v7
PacoEcotrust (Wed, 05 Apr 2017 15:41:20 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=Q5EwMzqAWPfxFGQX5) @adamludvik ---Yes, I had installed the sawtooth v7 into ubuntu 16.04
PacoEcotrust (Wed, 05 Apr 2017 15:41:20 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=Q5EwMzqAWPfxFGQX5) @adamludvik ---Yes, I had installed and setup the lieclipse with the sawtooth v7 into ubuntu 16.04
PacoEcotrust (Wed, 05 Apr 2017 15:41:20 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=Q5EwMzqAWPfxFGQX5) @adamludvik ---Yes, I had installed and setup the liclipse with the sawtooth v7 into ubuntu 16.04
PacoEcotrust (Wed, 05 Apr 2017 15:41:20 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=Q5EwMzqAWPfxFGQX5) @adamludvik ---Yes, I had installed and setup the liclipse with the sawtooth v7 into ubuntu 16.04. So, I need clean system, do I?
adamludvik (Wed, 05 Apr 2017 15:45:43 GMT):
A clean system would be easiest, yes. If you are using vagrant, you should be able to do `vagrant destroy` to remove your existing box, and then follow along with the demo I sent earlier to create a new one.
mhart (Wed, 05 Apr 2017 21:23:19 GMT):
@pschwarz nice 👍
JeetMukesh (Thu, 06 Apr 2017 03:33:54 GMT):
Has joined the channel.
PacoEcotrust (Thu, 06 Apr 2017 09:59:04 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=F3HeXevnn82YpEpnx) @adamludvik , thanks was perfect, not a warning. Now I want to mount sawtooth project with liClipse into vagrant box that I think is better than into directly in host ubuntu. I had sawtooth project in host ubuntu and to change of version (v7 to v8) I had a lot of version conflicts so I had to reinstall new Ubuntu.
adamludvik (Thu, 06 Apr 2017 17:58:08 GMT):
@PacoEcotrust If you are just trying to write a transaction family, you shouldn't need to mount the project directory into ubuntu. You should just be able to do `import sawtooth_sdk` in your python3 files and go from there.
Dan (Fri, 07 Apr 2017 02:39:21 GMT):
If anyone is looking for low hanging fruit to contribute getting rid of this part of the docs would be helpful:
http://intelledger.github.io/sysadmin_guide/network_configuration.html#validators
https://github.com/hyperledger/sawtooth-core/blob/master/docs/source/sysadmin_guide/network_configuration.rst
Dan (Fri, 07 Apr 2017 02:40:35 GMT):
More low hanging fruit:
http://intelledger.github.io/sawtooth_developers_guide/architecture_overview.html
Delete me:
https://github.com/hyperledger/sawtooth-core/blob/master/docs/source/sawtooth_developers_guide/architecture_overview.rst
zzying (Fri, 07 Apr 2017 03:02:47 GMT):
Has joined the channel.
Dan (Fri, 07 Apr 2017 13:44:32 GMT):
In creating the a Transaction Processor (server side piece of a _Transaction Family_) there's at least one required method, `apply`. I'm digging through some old notes and there's a reference to `serialize_for_display`. Do we still want that to be a required method? Would that just be on the _client_ (transactor) side?
haridhakshini (Sat, 08 Apr 2017 06:50:14 GMT):
Has joined the channel.
ray (Sat, 08 Apr 2017 16:18:43 GMT):
Has left the channel.
haridhakshini (Sat, 08 Apr 2017 19:38:08 GMT):
@Dan I am trying to get rid of the two parts of the docs as posted by you previously. I have submitted a pull request and it errored out with the following error:"FAILED: User 'Haridhakshini' not whitelisted".
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-314/1/console
https://github.com/hyperledger/sawtooth-core/pull/314
I am not sure if I am encountering some permissions issue. Please let me know your thoughts.
I also apologise if this is not the right way to do a Pull Request as this is my first time to do so.
Thanks!
Dan (Sat, 08 Apr 2017 19:46:10 GMT):
Hi! The first time doing a PR is tricky.
Dan (Sat, 08 Apr 2017 19:46:28 GMT):
You want to fork the repo.
Dan (Sat, 08 Apr 2017 19:46:57 GMT):
Then clone your fork on your own system.
Dan (Sat, 08 Apr 2017 19:47:26 GMT):
Then make a branch (this helps isolate your changes)
Dan (Sat, 08 Apr 2017 19:49:00 GMT):
Commit (with -s flag fit sign off) then push that branch with your commit back up to _your_ fork on github.
Dan (Sat, 08 Apr 2017 19:50:05 GMT):
The github website will pop up a little link for you asking if you want to issue a PR.
Dan (Sat, 08 Apr 2017 19:51:13 GMT):
Then two of the maintainers will review it and either merge it for you or ask for any corrections.
pschwarz (Sat, 08 Apr 2017 20:01:03 GMT):
I think that's what that method was for originally. Since we don't have any mandate about format or reuse between clients and processors, that sort of thing is up to the transaction family developer. We should certainly drop the reference.
pschwarz (Sat, 08 Apr 2017 20:01:31 GMT):
@dan :point_up: re the `serialize_for_display`
Dan (Sat, 08 Apr 2017 22:09:01 GMT):
@haridhakshini my bad. Looks like you submitted everything correctly and it is a permissioning issue like you suggested.
haridhakshini (Sun, 09 Apr 2017 10:22:05 GMT):
@Dan Thanks for the reply!
AlexejGerstmaier (Sun, 09 Apr 2017 22:11:44 GMT):
Has joined the channel.
AlexejGerstmaier (Sun, 09 Apr 2017 22:14:31 GMT):
Hey guys, I just found out about the Hyperledger project and researched a bit. One quick question for my understanding: Sawtoothlake seems to rely on a Trusted Execution Environment to be secure. Intel SGX is mentioned a lot. Does ARM Trustzone work too?
Dan (Mon, 10 Apr 2017 02:01:46 GMT):
Hi @AlexejGerstmaier we need to update that intro. It's a little too cautious. Sawtooth has pluggable consensus. The one we talk about most is PoET. PoET was designed to use trusted execution. Without trusted execution you lose protections against bad actors in the network (byzantine faults), but you keep crash fault tolerance (CFT). CFT is the same level of protection of several of the other enterprise focused blockchains.
Dan (Mon, 10 Apr 2017 02:04:12 GMT):
There's no SGX required to run the system and no one has yet open sourced a trusted execution implementation of PoET with SGX or Trustzone.
Dan (Mon, 10 Apr 2017 02:05:12 GMT):
@mfford I should probably update that intro this sprint.
jsmitchell (Mon, 10 Apr 2017 14:24:55 GMT):
A recent PR to master introduces a required command-line argument called `--public-uri` which specifies the reachable endpoint for the validator's network endpoint. Example usage: `validator --network-endpoint tcp://0.0.0.0:8801 --public-uri tcp://{public ip or hostname}:8801`
drozd (Mon, 10 Apr 2017 14:33:27 GMT):
@jsmitchell is it always required?
drozd (Mon, 10 Apr 2017 14:34:26 GMT):
I mean, always always?
jsmitchell (Mon, 10 Apr 2017 14:34:43 GMT):
Always, yes
jsmitchell (Mon, 10 Apr 2017 14:35:51 GMT):
It's sent as part of the connect message to manage validator network identity
toddojala (Mon, 10 Apr 2017 15:05:30 GMT):
@jsmitchell So this needs to be documented, right? ;)
jsmitchell (Mon, 10 Apr 2017 20:03:43 GMT):
You bet!
toddojala (Mon, 10 Apr 2017 21:59:52 GMT):
@jsmitchell We'll update the docs ASAP, "out-of-band" so to speak.
Lin-YiTang (Tue, 11 Apr 2017 21:14:53 GMT):
Has joined the channel.
Dan (Tue, 11 Apr 2017 23:19:44 GMT):
Getting this error from the build system
```docker: Error response from daemon: repository sawtooth-build-python not found: does not exist or no pull access.
See 'docker run --help'.```
boydjohnson (Tue, 11 Apr 2017 23:28:30 GMT):
PR # ?
boydjohnson (Tue, 11 Apr 2017 23:31:24 GMT):
I know that @adamludvik had a PR go in that changed some of the Docker image names. I would guess that is the problem. My guess is that rebasing the PR on master will fix the issue.
Dan (Tue, 11 Apr 2017 23:32:01 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-314/11/console
adamludvik (Wed, 12 Apr 2017 00:05:26 GMT):
That console log is very weird. I will investigate in the morning
ReedCao (Wed, 12 Apr 2017 08:04:11 GMT):
Has joined the channel.
Dan (Wed, 12 Apr 2017 08:53:01 GMT):
Thanks @adamludvik.
I rebased the PR for the submitter. If I can get a couple thumbs up we can merge these baby seals to death. Now as PR-324. https://github.com/hyperledger/sawtooth-core/pull/324
pancake (Wed, 12 Apr 2017 11:11:42 GMT):
Has joined the channel.
pancake (Wed, 12 Apr 2017 11:23:54 GMT):
Hi all, i try to modify the the content of a transaction or block, but the validator seem can't detect the illegal change, why?
pancake (Wed, 12 Apr 2017 11:24:33 GMT):
I start only one validator.
jsmitchell (Wed, 12 Apr 2017 12:40:31 GMT):
@pancake Can you provide some details? You might be able to trick yourself (by modifying things after signature verification occurs etc, but you should not be able to trick others.
adamludvik (Wed, 12 Apr 2017 13:53:23 GMT):
@dan So here is what happened:
1. PR 312 and 314 go up, both bringing a copy of the repo. Specifically, they bring their own versions of build_all and the Jenkinsfile
2. My PR (312), which changes build_all and the Jenkinsfile, gets merged. The Jenkinsfile and build_all are no longer the same on master and PR 314.
3. PR 314 is re-run, but doesn't have permission to run its own copy of the Jenkinsfile because of our security rules. It defaults to running what is on master, which tells it to run _its copy_ of build_all in installed mode.
4. Installed mode changed substantially with 312, including building sawtooth-build-python, the missing docker image.
adamludvik (Wed, 12 Apr 2017 13:53:23 GMT):
@Dan So here is what happened:
1. PR 312 and 314 go up, both bringing a copy of the repo. Specifically, they bring their own versions of build_all and the Jenkinsfile
2. My PR (312), which changes build_all and the Jenkinsfile, gets merged. The Jenkinsfile and build_all are no longer the same on master and PR 314.
3. PR 314 is re-run, but doesn't have permission to run its own copy of the Jenkinsfile because of our security rules. It defaults to running what is on master, which tells it to run _its copy_ of build_all in installed mode.
4. Installed mode changed substantially with 312, including building sawtooth-build-python, the missing docker image.
adamludvik (Wed, 12 Apr 2017 13:53:58 GMT):
Rebasing is the solution, which it looks like you did.
adamludvik (Wed, 12 Apr 2017 13:56:48 GMT):
In other news, our security rules are working correctly.
Dan (Wed, 12 Apr 2017 14:17:03 GMT):
thanks for the details @adamludvik
Dan (Wed, 12 Apr 2017 14:17:57 GMT):
this baby seal was just surprisingly resilient. if you want to tap it on the head with a green checkmark I will deliver the coup de grace.
Dan (Wed, 12 Apr 2017 14:20:56 GMT):
it is done.
Dan (Wed, 12 Apr 2017 14:21:37 GMT):
hands won't come clean:flushed:
toddojala (Wed, 12 Apr 2017 14:36:41 GMT):
the baby seal metaphor is kind of weird. People love baby seals, and don't want them tapped on the head!
toddojala (Wed, 12 Apr 2017 14:36:45 GMT):
:)
adamludvik (Wed, 12 Apr 2017 14:57:29 GMT):
I am trying to resolve the "binding to 0.0.0.0" security issue. My first thought was to use docker's embedded DNS to replace this, but it doesn't look like ZMQ (and maybe binding in general?) lets you bind to an address by referencing its DNS name. The docs (http://api.zeromq.org/2-1:zmq-tcp) indicate you can do `tcp://*:40000`, `tcp://{numeric_ip}:4000`, or `tcp://{interface}:40000`. I am going to set the default to `tcp://127.0.0.1:40000`, but I have a couple questions:
1. Is binding to `tcp://*:40000` the same as 0.0.0.0? (I think it must be)
2. Is it secure to bind to `tcp://eth0:40000`?
jsmitchell (Wed, 12 Apr 2017 14:58:49 GMT):
I don't think binding to local host is going to be valid for docker. You will need to bind to the public interface for it to be reachable.
adamludvik (Wed, 12 Apr 2017 14:59:05 GMT):
I know that localhost won't work in docker.
jsmitchell (Wed, 12 Apr 2017 14:59:05 GMT):
* should be the same as 0.0.0.0
adamludvik (Wed, 12 Apr 2017 14:59:23 GMT):
But I think it should be the default argument for the cli.
adamludvik (Wed, 12 Apr 2017 14:59:39 GMT):
I am trying to decide what to change the argument to in docker.
jsmitchell (Wed, 12 Apr 2017 14:59:40 GMT):
I don't see any issue binding to eth0
jsmitchell (Wed, 12 Apr 2017 14:59:59 GMT):
@adamludvik: yep, sounds good for the default
jsmitchell (Wed, 12 Apr 2017 15:00:43 GMT):
Although it might cause confusion why a user's validator isn't working by default
adamludvik (Wed, 12 Apr 2017 15:01:39 GMT):
If I understand the issue then, it is with allowing all interfaces (not just eth0) when you do tcp://*:40000?
jsmitchell (Wed, 12 Apr 2017 15:03:46 GMT):
Yeah, it will listen on all interfaces on port 40000
adamludvik (Wed, 12 Apr 2017 15:05:29 GMT):
It the default is 127.0.0.1, you can still start a validator and connect TPs and the REST API to it, so when you say "working by default", you mean connecting to a larger, existing network right?
jsmitchell (Wed, 12 Apr 2017 15:05:45 GMT):
Yes
adamludvik (Wed, 12 Apr 2017 15:06:31 GMT):
Gotcha. Thanks
jsmitchell (Wed, 12 Apr 2017 15:36:32 GMT):
@adamludvik: we probably want to be able to specify a list of bind endpoints
jsmitchell (Wed, 12 Apr 2017 15:37:11 GMT):
you should be able to do `for endpoint in endpoints: bind(endpoint`
jsmitchell (Wed, 12 Apr 2017 15:37:11 GMT):
you should be able to do `for endpoint in endpoints: bind(endpoint)`
adamludvik (Wed, 12 Apr 2017 15:37:42 GMT):
As in `--component-endpoint` takes a list instead of one arg?
jsmitchell (Wed, 12 Apr 2017 15:38:10 GMT):
yes, and --network-endpoint
agunde (Wed, 12 Apr 2017 15:53:57 GMT):
Some new configurable logging capabilities have been added to Sawtooth. Documentation can be found here http://intelledger.github.io/sysadmin_guide/log_configuration.html
rbuysse (Wed, 12 Apr 2017 19:47:06 GMT):
a build of master just broke
rbuysse (Wed, 12 Apr 2017 19:47:27 GMT):
integration_test_1 | sawtooth_cli.exceptions.CliException: (503): The validator is not yet ready to be queried
rbuysse (Wed, 12 Apr 2017 19:48:00 GMT):
during test_poet_smoke
pschwarz (Wed, 12 Apr 2017 19:49:02 GMT):
I was noticing this locally - it seems periodic
pschwarz (Wed, 12 Apr 2017 19:49:12 GMT):
I'm up-to-date with master, as well
jjason (Wed, 12 Apr 2017 20:08:24 GMT):
I just encountered with some local testing as well.
jsmitchell (Wed, 12 Apr 2017 20:15:57 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/master/153/console
jsmitchell (Wed, 12 Apr 2017 20:16:09 GMT):
@zac: any clues?
zac (Wed, 12 Apr 2017 20:26:27 GMT):
That indicates that there is no genesis block
zac (Wed, 12 Apr 2017 20:26:59 GMT):
Or more specifically, no `chain_head_id` in the block store
zac (Wed, 12 Apr 2017 20:27:26 GMT):
(which is generally because you haven't created a genesis block)
zac (Wed, 12 Apr 2017 20:29:21 GMT):
Why that would happen in this case, I'm not sure
jsmitchell (Wed, 12 Apr 2017 20:29:51 GMT):
Can someone who is able to reproduce modify the failing test to add -vv to the validator args?
drozd (Wed, 12 Apr 2017 20:39:34 GMT):
locally I just got it for intkey javascript
jjason (Wed, 12 Apr 2017 21:11:34 GMT):
Is this error being emitted by the what is supposed to be the "genesis" validator? Is there, per chance, some race condition on startup where during the tests a non-genesis node is coming up and ready before the genesis node is ready to transfer the genesis block to it?
jjason (Wed, 12 Apr 2017 21:11:34 GMT):
Is this error being emitted by what is supposed to be the "genesis" validator? Is there, per chance, some race condition on startup where during the tests a non-genesis node is coming up and ready before the genesis node is ready to transfer the genesis block to it?
jjason (Wed, 12 Apr 2017 21:13:06 GMT):
Ran into a new error:
```
jjason (Wed, 12 Apr 2017 21:13:06 GMT):
Ran into a new error:
```
validator-0_1 | [20:36:39.473 ERROR chain] 'NoneType' object has no attribute 'encode'
validator-0_1 | Traceback (most recent call last):
validator-0_1 | File "/project/sawtooth-core/validator/sawtooth_validator/journal/chain.py", line 390, in run
validator-0_1 | commit_new_chain = self._test_commit_new_chain()
validator-0_1 | File "/project/sawtooth-core/validator/sawtooth_validator/journal/chain.py", line 323, in _test_commit_new_chain
validator-0_1 | return fork_resolver.compare_forks(self._chain_head, self._new_block)
validator-0_1 | File "/project/sawtooth-core/consensus/poet/core/sawtooth_poet/poet_consensus/poet_fork_resolver.py", line 200, in compare_forks
validator-0_1 | block_cache=self._block_cache))
validator-0_1 | File "/project/sawtooth-core/consensus/poet/core/sawtooth_poet/poet_consensus/utils.py", line 233, in create_next_validator_state
validator-0_1 | validator_info.transaction_id).block_num
validator-0_1 | File "/project/sawtooth-core/validator/sawtooth_validator/journal/block_store.py", line 174, in get_block_by_transaction_id
validator-0_1 | return self.__getitem__(self._block_store[txn_id])
validator-0_1 | File "/project/sawtooth-core/validator/sawtooth_validator/journal/block_store.py", line 44, in __getitem__
validator-0_1 | stored_block = self._block_store[key]
validator-0_1 | File "/project/sawtooth-core/validator/sawtooth_validator/database/database.py", line 30, in __getitem__
validator-0_1 | return self.get(key)
validator-0_1 | File "/project/sawtooth-core/validator/sawtooth_validator/database/lmdb_nolock_database.py", line 72, in get
validator-0_1 | packed = txn.get(key.encode())
validator-0_1 | AttributeError: 'NoneType' object has no attribute 'encode'
```
jjason (Wed, 12 Apr 2017 21:14:23 GMT):
The problem is that during fork resolution, when the PoET fork resolver is trying to look up an enclosing block for a validator registry transaction (i.e., calling `get_block_by_transaction_id`), the transaction ID is `None` in the validator registry transaction.
adamludvik (Thu, 13 Apr 2017 13:32:11 GMT):
Do we need .service files for tp_intkey, rest_api, etc so we can start them with systemd? Or is there another plan for running them as services?
jsmitchell (Thu, 13 Apr 2017 18:01:44 GMT):
@jjason: can you open a DEBUG story for that if you're not on the case?
jjason (Thu, 13 Apr 2017 18:02:09 GMT):
Can do.
boydjohnson (Thu, 13 Apr 2017 18:02:30 GMT):
Do we have DEBUG stories? I thought we were putting DEFECT in the title.
jjason (Thu, 13 Apr 2017 18:02:34 GMT):
Currently wrapping up the PoET zTest story.
jjason (Thu, 13 Apr 2017 18:02:45 GMT):
I interpreted it to be DEFECT.
jjason (Thu, 13 Apr 2017 18:02:46 GMT):
;)
boydjohnson (Thu, 13 Apr 2017 18:02:59 GMT):
:)
jjason (Thu, 13 Apr 2017 18:12:38 GMT):
Story created and put into next sprint. Unassigned.
jjason (Thu, 13 Apr 2017 18:12:46 GMT):
@jsmitchell ^^^^^^^
jsmitchell (Thu, 13 Apr 2017 18:16:10 GMT):
👍🏻
jsmitchell (Thu, 13 Apr 2017 18:25:54 GMT):
Look, maybe I didn't say every little tiny syllable, no. But basically I said them, yeah.
boydjohnson (Thu, 13 Apr 2017 18:30:37 GMT):
:laughing:
jjason (Thu, 13 Apr 2017 18:34:05 GMT):
I have two boys....I am used to reading between the lines.
jjason (Thu, 13 Apr 2017 18:34:36 GMT):
Misdirection and outright omission are par for the course.
jaredcorduan (Thu, 13 Apr 2017 19:22:33 GMT):
Has joined the channel.
jjason (Thu, 13 Apr 2017 21:23:08 GMT):
@jsmitchell @boydjohnson @pschwarz Do we need to create a DEFECT story to investigate this? Seems like we are still getting failures with validators not ready to be queried. Is that a failure on the validator side or the PoET smoke test side?
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-331/1/console
boydjohnson (Thu, 13 Apr 2017 21:23:53 GMT):
It could also be option 3: the rest api.
boydjohnson (Thu, 13 Apr 2017 21:25:30 GMT):
@rbuysse You had mentioned this vis-a-vis the failure on master yesterday. Do we have a story for it?
rbuysse (Thu, 13 Apr 2017 21:25:57 GMT):
we do not have story for it yes.
rbuysse (Thu, 13 Apr 2017 21:25:57 GMT):
we do not have story for it yet.
rbuysse (Thu, 13 Apr 2017 21:26:38 GMT):
we've had 5 clean builds since.
jjason (Thu, 13 Apr 2017 21:45:45 GMT):
Okay. We have a story in next sprint. Unassigned.
drozd (Thu, 13 Apr 2017 22:17:49 GMT):
```
INFO:__main__:Bringing up with ['docker-compose', '-p', 'latest', '-f', '/project/sawtooth-core/integration/sawtooth_integration/docker/intkey-python-smoke.yaml', 'up', '--abort-on-container-exit']
Creating network "latest_default" with the default driver
Creating latest_validator_1
Creating latest_tp_config_1
Creating latest_rest_api_1
Creating latest_tp_intkey_python_1
Creating latest_integration_test_1
Attaching to latest_validator_1, latest_tp_config_1, latest_rest_api_1, latest_tp_intkey_python_1, latest_integration_test_1
validator_1 | writing file: /etc/sawtooth/keys/validator.wif
validator_1 | writing file: /etc/sawtooth/keys/validator.addr
tp_config_1 | [22:06:45 DEBUG selector_events] Using selector: ZMQSelector
validator_1 | Generating /var/lib/sawtooth/genesis.batch
validator_1 | [22:06:46.256 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
validator_1 | [22:06:46.256 INFO keys] Loading signing key: /etc/sawtooth/keys/validator.wif
validator_1 | [22:06:46.259 INFO cli] config [path]: config_dir = "/etc/sawtooth"
validator_1 | [22:06:46.260 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
validator_1 | [22:06:46.260 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
validator_1 | [22:06:46.261 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
validator_1 | [22:06:46.269 INFO genesis] Producing genesis block from /var/lib/sawtooth/genesis.batch
integration_test_1 | test_intkey_smoke (test_intkey_smoke.TestIntkeySmoke) ... ERROR
...
integration_test_1 | urllib.error.HTTPError: HTTP Error 503: The validator is not yet ready to be queried
...
validator_1 | [22:06:46.297 INFO genesis] Genesis block created: 4f664665(0, S:708ca7fb, P:00000000)
validator_1 | [22:06:46.304 INFO processor_handlers] registered transaction processor: connection_id=469003765653bed7885fbc96183445243430bb4c02da7aaa572499130c7c351801446ef5a5116b07f2e5e5412ab0b1b513ed2212681813b4eda4a21b13ad4108, family=sawtooth_config, version=1.0, encoding=application/protobuf, namespaces=['000000']
tp_config_1 | [22:06:46 INFO core] register attempt: OK
validator_1 | [22:06:46.324 INFO chain] Chain controller initialized with chain head: 4f664665(0, S:708ca7fb, P:00000000)
validator_1 | [22:06:46.328 INFO publisher] Now building on top of block: 4f664665(0, S:708ca7fb, P:00000000)
validator_1 | [22:06:46.415 INFO processor_handlers] registered transaction processor: connection_id=c3d62bf45aadae3c1ce7f0fdc8fb2a0cd15dd4b481e783c788a1a5d7af83a489f52dc0d8ddece88855076df777e6794cdb7164705c22380ad64b51d81bdf68f7, family=intkey, version=1.0, encoding=application/cbor, namespaces=['1cf126']
tp_intkey_python_1 | [22:06:46.420 INFO core] register attempt: OK
latest_integration_test_1 exited with code 1
```
drozd (Thu, 13 Apr 2017 22:18:01 GMT):
failure on intkey python smoke
drozd (Thu, 13 Apr 2017 22:18:25 GMT):
it looks like the validator got queried just before the genesis block was created
jjason (Thu, 13 Apr 2017 22:27:56 GMT):
So, maybe the test can be more resilient in that if it gets a "not ready" it waits a little bit and tries again????
jjason (Thu, 13 Apr 2017 22:29:16 GMT):
PR 333 failed build for same reason as what I mentioned above for PR 331.
drozd (Thu, 13 Apr 2017 22:52:48 GMT):
or perhaps a wait-and-try-again can be added to the rest client?
drozd (Thu, 13 Apr 2017 22:52:53 GMT):
@zac
ReedCao (Fri, 14 Apr 2017 02:14:35 GMT):
after I run /project/sawtooth-core/bin/build_python, I got an error --- Running protogen ---
Error: protoc not found.
jsmitchell (Fri, 14 Apr 2017 02:16:35 GMT):
@ReedCao are you inside the vagrant vm? It should have all the prerequisites installed.
ReedCao (Fri, 14 Apr 2017 02:47:12 GMT):
@jsmitchell ye, I am inside vagrant vm
ReedCao (Fri, 14 Apr 2017 03:32:23 GMT):
don't know why protoc is not there. I have tried to run protoc, I got info that I should install it first
ReedCao (Fri, 14 Apr 2017 03:35:07 GMT):
The program 'protoc' is currently not installed. You can install it by typing:
sudo apt install protobuf-compiler
zac (Fri, 14 Apr 2017 03:57:08 GMT):
@drozd Is there a use case for wait-then-try-again outside of development?
zac (Fri, 14 Apr 2017 03:58:06 GMT):
Normally the window where a validator is up but has no genesis would be very narrow relative to its life. I think leaving it at a 503 is probably the appropriate response.
ReedCao (Fri, 14 Apr 2017 07:14:54 GMT):
I can run protoc in command line, however when running /project/sawtooth-core/bin/build_python, it will report Error: protoc not found.
ReedCao (Fri, 14 Apr 2017 09:47:04 GMT):
when run protogen, it will Error: protoc not found. however, the protoc is in /usr/bin and it is in the path.
sklymenko (Fri, 14 Apr 2017 12:00:30 GMT):
Has joined the channel.
jsmitchell (Fri, 14 Apr 2017 13:27:02 GMT):
@ReedCao: that is very strange.
jsmitchell (Fri, 14 Apr 2017 13:27:51 GMT):
```try:
from grpc.tools.protoc import main as _protoc
except ImportError:
print("Error: protoc not found.")
exit(1)```
Dan (Fri, 14 Apr 2017 13:28:02 GMT):
@ReedCao its possible your vagrant install hiccup'd there and it didn't install as expected.
jsmitchell (Fri, 14 Apr 2017 13:28:02 GMT):
here is where that is getting printed out
jsmitchell (Fri, 14 Apr 2017 13:28:54 GMT):
it looks like you are probably missing the protoc python package
jsmitchell (Fri, 14 Apr 2017 13:29:13 GMT):
I would suggest doing a vagrant destroy followed by a fresh vagrant up
Dan (Fri, 14 Apr 2017 13:34:07 GMT):
Probably safest to do as @jsmitchell recommends and destroy in case there were other install glitches, but I think protoc should have been installed using the script: `tools/plugins/install_grpc.sh`.
Dan (Fri, 14 Apr 2017 15:48:04 GMT):
@drozd if you are experimenting with cutting out sleeps in the integration tests please be cautious with respect to transient failures on jenkins can slow down the PR process.
amundson (Fri, 14 Apr 2017 18:46:40 GMT):
yeah, so protoc is different than the grpc protoc wrapper, so that's a bad error message. It should say "Error: grpc.tools.protoc not found"
adamludvik (Fri, 14 Apr 2017 20:05:37 GMT):
A PR has been merged to fix the issues with the build.
pschwarz (Fri, 14 Apr 2017 20:06:30 GMT):
Those with outstanding PR's should rebase
jsmitchell (Fri, 14 Apr 2017 20:29:34 GMT):
i wouldn't really call any of these _outstanding_
pschwarz (Fri, 14 Apr 2017 20:32:29 GMT):
>:<
pschwarz (Fri, 14 Apr 2017 20:32:29 GMT):
>:(
pschwarz (Fri, 14 Apr 2017 20:32:29 GMT):
:angry:
pschwarz (Fri, 14 Apr 2017 20:33:33 GMT):
That's the right one - this doesn't quite translate ascii faces correctly...
jjason (Fri, 14 Apr 2017 20:41:16 GMT):
Ouch
adamludvik (Fri, 14 Apr 2017 20:58:50 GMT):
Not ready to do a PR on this, but could use some feedback on whether this is a good approach for running sawtooth as a service: https://github.com/aludvik/sawtooth-core/tree/systemd_services
adamludvik (Fri, 14 Apr 2017 20:58:50 GMT):
Not ready to do a PR on this, but could use some feedback on whether this is a good approach for running sawtooth as a service: https://github.com/aludvik/sawtooth-core/commits/systemd_services
ReedCao (Mon, 17 Apr 2017 02:23:57 GMT):
@jsmitchell have tried to destroy and up again.
ReedCao (Mon, 17 Apr 2017 02:24:09 GMT):
got this log.
ReedCao (Mon, 17 Apr 2017 02:26:56 GMT):
Message Attachments
jsmitchell (Mon, 17 Apr 2017 02:28:56 GMT):
Looks like your machine can't reach keyserver.ubuntu.com
jsmitchell (Mon, 17 Apr 2017 02:29:11 GMT):
Are you behind a filtering proxy?
ReedCao (Mon, 17 Apr 2017 02:30:32 GMT):
@jsmitchell just noticed that too. thanks a lot!
ReedCao (Mon, 17 Apr 2017 02:49:56 GMT):
still get this error:
ReedCao (Mon, 17 Apr 2017 02:49:57 GMT):
==> default: gpg: requesting key 10FB5F63 from hkp server keyserver.ubuntu.com
==> default: gpg: keyserver timed out
==> default: gpg: keyserver receive failed: keyserver error
==> default: + exit 1
Dan (Mon, 17 Apr 2017 02:54:08 GMT):
Which OS are you on @ReedCao ?
ReedCao (Mon, 17 Apr 2017 02:55:47 GMT):
win10
Dan (Mon, 17 Apr 2017 03:02:42 GMT):
I'm using gitbash (aka mingw64) for my command shell on win8. I have an ssh config file in `~/.ssh/config` with settings like these:
```Host=*
ProxyCommand=/mingw64/bin/connect -5 -S myproxy.company.com:8080 %h %p
StrictHostKeyChecking=no```
ReedCao (Mon, 17 Apr 2017 03:05:31 GMT):
so this key server is using different variable for proxy?
Dan (Mon, 17 Apr 2017 03:10:10 GMT):
I don't think I have an environment variable set for proxy. I do have ssh configured with those proxy settings though.
ReedCao (Mon, 17 Apr 2017 03:11:09 GMT):
I am using gitshell
ReedCao (Mon, 17 Apr 2017 03:11:42 GMT):
can it work the same way? however I have not found the configuration file under the ~/.ssh/config
ReedCao (Mon, 17 Apr 2017 03:15:31 GMT):
I can connect to other server than this keyserver.ubuntu.com
jsmitchell (Mon, 17 Apr 2017 03:16:24 GMT):
What message do you get in your web browser if you try to reach that server?
ReedCao (Mon, 17 Apr 2017 03:17:22 GMT):
it will load the page successfully
ReedCao (Mon, 17 Apr 2017 03:18:21 GMT):
I have set http_proxy and https_proxy in git shell, which is the same proxy server I am using in browser
jsmitchell (Mon, 17 Apr 2017 03:20:41 GMT):
The VM will also need the proxy set correctly
ReedCao (Mon, 17 Apr 2017 03:23:29 GMT):
how can I set the proxy for VM?
ReedCao (Mon, 17 Apr 2017 03:24:15 GMT):
ye, you are right, so the keyserver.ubuntu.com is being connected in VM?
jsmitchell (Mon, 17 Apr 2017 03:24:37 GMT):
Yes
ReedCao (Mon, 17 Apr 2017 03:26:00 GMT):
How can I set this proxy? run the VM and configure it ?
jsmitchell (Mon, 17 Apr 2017 03:26:45 GMT):
From the host, try "vagrant plugin install vagrant-proxyconf"
ReedCao (Mon, 17 Apr 2017 03:27:46 GMT):
I think I have seen this line in log. Install: vagrant plugin install vagrant-proxyconf
Dan (Mon, 17 Apr 2017 03:46:52 GMT):
to use ssh with proxy you have to create that config file. I'm not certain if gitshell uses that but worth a try.
ReedCao (Mon, 17 Apr 2017 06:41:55 GMT):
tried " vagrant plugin install vagrant-proxyconf" now get another error. it responsed "invalid HTTP proxy (proxy:8080): unsupported URI"
Dan (Mon, 17 Apr 2017 12:52:53 GMT):
@ReedCao that's progress at least :). I think its just a matter of getting the correct proxy information configured now.
Before getting into that though, since you are on windows 10 you should be able to use the Docker instructions in the tutorial. If you want to make transaction logic that should be a sufficient environment.
On the other hand, if you want to hack on the core system then you'll want to sort out this vagrant / proxy issue...
If you have a proxy set in your windows environment variables, using a cmd prompt this command should show you what is set `set | findstr proxy`.
If you were using the example ssh config I gave above, the port 8080 is an example, but your proxy port may be different.
toddojala (Mon, 17 Apr 2017 14:48:27 GMT):
@ReedCao Let us know how you fare. If we need to get more documentation on the proxy stuff, we should. We will be updating proxy instructions soon (in the next week or so).
Dan (Mon, 17 Apr 2017 16:34:44 GMT):
It might also be good if we can clarify use of docker vs. vagrant. Like .. If you are someone interested in writing transaction logic here's docker instructions. And its known good on OS X, Win10, and Ubuntu.
Or if you are interested in modifying sawtooth internals then we recommend vagrant.
etc.
Dan (Mon, 17 Apr 2017 20:10:58 GMT):
It's so quiet today :cricket: :cricket:
Dan (Mon, 17 Apr 2017 20:11:18 GMT):
(Those are crickets ^ )
toddojala (Mon, 17 Apr 2017 20:11:29 GMT):
Spring fever?
ReedCao (Tue, 18 Apr 2017 01:42:27 GMT):
@toddojala great! at least it should include the instruction to "install proxyconf" for vagrant.
gregnotso (Tue, 18 Apr 2017 12:43:14 GMT):
Has joined the channel.
cianx (Tue, 18 Apr 2017 14:20:13 GMT):
what is this error from run_tests ```[---Running validator tests---]
/project/sawtooth-core
ERROR:__main__:The container 'latest_validator_1' which would be created by this test already exists!
Do:
`run_docker_test --clean ./validator/tests/unit_validator.yaml`
to remove the container, or use docker manually.
```
cianx (Tue, 18 Apr 2017 14:20:13 GMT):
```[---Running validator tests---]
/project/sawtooth-core
ERROR:__main__:The container 'latest_validator_1' which would be created by this test already exists!
Do:
`run_docker_test --clean ./validator/tests/unit_validator.yaml`
to remove the container, or use docker manually.
```
cianx (Tue, 18 Apr 2017 14:20:37 GMT):
@adamludvik what is this error from run_tests ?
cianx (Tue, 18 Apr 2017 14:21:01 GMT):
the suggested 'run_docker_test --clean ./validator/tests/unit_validator.yaml' command generates an error
rbuysse (Tue, 18 Apr 2017 14:21:05 GMT):
looks like either there was a previous test that didn't exit cleanly or some tests are tunning
cianx (Tue, 18 Apr 2017 14:21:18 GMT):
```$ run_docker_test --clean ./validator/tests/unit_validator.yaml
/project/sawtooth-core
ERROR:__main__:Test service 'integration_test' does not exist in compose file: './validator/tests/unit_validator.yaml'
```
cianx (Tue, 18 Apr 2017 14:21:51 GMT):
How can I recover from that?
jsmitchell (Tue, 18 Apr 2017 14:22:10 GMT):
what does `docker ps` say?
cianx (Tue, 18 Apr 2017 14:22:24 GMT):
```$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
```
rbuysse (Tue, 18 Apr 2017 14:22:24 GMT):
add -a ^
rbuysse (Tue, 18 Apr 2017 14:22:47 GMT):
sorry, that's just '-a'. no caret.
cianx (Tue, 18 Apr 2017 14:22:52 GMT):
```$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4dcba9321f41 sawtooth-dev-test:latest "nose2-3 -v -s /pr..." 4 days ago Exited (255) 4 days ago 8080/tcp, 40000/tcp latest_validator_1
```
rbuysse (Tue, 18 Apr 2017 14:23:17 GMT):
you can do ``docker rm 4dcba9321f41``
rbuysse (Tue, 18 Apr 2017 14:23:25 GMT):
(I don't know rocketchat syntax)
cianx (Tue, 18 Apr 2017 14:24:59 GMT):
that looks like it did it, thanks.
toddojala (Tue, 18 Apr 2017 14:35:22 GMT):
@ReedCao Noted.
adamludvik (Tue, 18 Apr 2017 14:35:31 GMT):
For reference, `run_docker_test --clean ./validator/tests/unit_validator.yaml -s validator` would also have worked. The problem is that `unit_validator.yaml` only has a validator service, so you have to tell `run_docker_test` which service is the test service.
Dan (Tue, 18 Apr 2017 14:56:59 GMT):
Room name changed to: sawtooth by Dan
cianx (Tue, 18 Apr 2017 15:53:03 GMT):
@adamludvik can we get the error message suggested actions corrected?
Dan (Tue, 18 Apr 2017 15:54:34 GMT):
Room name changed to: sawtoothlake by Dan
adamludvik (Tue, 18 Apr 2017 16:10:57 GMT):
Yeah
cianx (Tue, 18 Apr 2017 16:50:10 GMT):
@jjason How reliable are the poet integration tests? I am trying to figure out if I broke something or I am just unlucky.
jjason (Tue, 18 Apr 2017 16:54:32 GMT):
Oh, it's definitely you ;)
jjason (Tue, 18 Apr 2017 16:54:37 GMT):
What kind of failures?
Dan (Tue, 18 Apr 2017 17:38:18 GMT):
Command shell is another variable to keep in mind with supporting vagrant and docker across OS's. On windows Gitbash, cmd, powershell, and cygwin are all possibilities and will behave differently in accessing proxy variables etc.
cianx (Tue, 18 Apr 2017 19:33:36 GMT):
@jsmitchell @boydjohnson Any chance the thread exhaustion bug crept back in? I am seeing failures where the validators in the poet smoke test did not process all of the blocks, Jamie had me set the executing_threadpool to 100 and it looks like that has fixed the problem. I am rerunning now to verify.
cianx (Tue, 18 Apr 2017 19:33:42 GMT):
```- self._executing_threadpool = ThreadPoolExecutor(max_workers=5)
+ self._executing_threadpool = ThreadPoolExecutor(max_workers=100)```
cianx (Tue, 18 Apr 2017 19:34:02 GMT):
in sawtooth_validator/execution/executor.py
boydjohnson (Tue, 18 Apr 2017 19:36:35 GMT):
Do we know if there is a difference between master and your branch with this behavior? The original problem was solved by calling scheduler.cancel() any time the scheduler would never be finalized.
cianx (Tue, 18 Apr 2017 19:37:57 GMT):
let me check, that could not be happening in my branch.
jaredcorduan (Tue, 18 Apr 2017 20:30:09 GMT):
Are there plans to move the marketplace transaction family/processor to version 0.8? (like in the sdk/examples, etc) thanks!
zac (Tue, 18 Apr 2017 20:33:02 GMT):
There are no immediate plans
zac (Tue, 18 Apr 2017 20:33:24 GMT):
It is a substantial task unfortunately
boydjohnson (Tue, 18 Apr 2017 20:33:30 GMT):
I thought there were plans but not in this sprint or the next.
zac (Tue, 18 Apr 2017 20:33:57 GMT):
But, we do feel Marketplace is a great illustration, so we would like to find time for it
zac (Tue, 18 Apr 2017 20:34:36 GMT):
Can you really call it a plan if it is not in this sprint or the next?
boydjohnson (Tue, 18 Apr 2017 20:35:04 GMT):
I have seen it on a Gantt chart...
zac (Tue, 18 Apr 2017 20:35:41 GMT):
I don't think we are committed to doing it at this point
zac (Tue, 18 Apr 2017 20:35:53 GMT):
But we also aren't committed to _not_ doing it
zac (Tue, 18 Apr 2017 20:36:42 GMT):
Someone who pays more attention during planning meetings can feel free to correct me though
zac (Tue, 18 Apr 2017 20:36:42 GMT):
Someone who pays more attention during planning meetings than me should feel free to correct my impression though
zac (Tue, 18 Apr 2017 20:36:42 GMT):
Someone who pays more attention than me during planning meetings should feel free to chime in though
mfford (Tue, 18 Apr 2017 21:27:41 GMT):
The next steps for MarketPlace are being discussed in planning
kelly_ (Tue, 18 Apr 2017 21:30:11 GMT):
@jaredcorduan do you have a need for mktplace?
jaredcorduan (Wed, 19 Apr 2017 00:12:55 GMT):
ah ok, thank you for letting me know. I am currently upgrading our transaction processor from sawtooth version 0.7 to 0.8, and we de use the marketplace. (For what we are developing at PokitDok, DokChain.) I just wanted to check with you all before we upgraded it ourselves.
I really like version 0.8!
jaredcorduan (Wed, 19 Apr 2017 00:12:55 GMT):
ah ok, thank you for letting me know. I am currently upgrading our transaction processor from sawtooth version 0.7 to 0.8, and we do use the marketplace. (For what we are developing at PokitDok, DokChain.) I just wanted to check with you all before we upgraded it ourselves.
I really like version 0.8!
Dan (Wed, 19 Apr 2017 00:13:19 GMT):
that's great to hear!
Dan (Wed, 19 Apr 2017 00:14:42 GMT):
There's definitely interest in bringing marketplace forward but no one has committed yet when. Would be a pretty sweet PR if you worked that out.
jaredcorduan (Wed, 19 Apr 2017 00:28:18 GMT):
ok, I'll let you know if we decide to do it.
kelly_ (Wed, 19 Apr 2017 00:28:27 GMT):
If you are thinking about upgrading it we probably have some thoughts to share on how to simplify it
kelly_ (Wed, 19 Apr 2017 00:28:42 GMT):
The original design with holdings, assets, liabilities, etc is a little complex :)
jaredcorduan (Wed, 19 Apr 2017 00:29:25 GMT):
ah :)
jaredcorduan (Wed, 19 Apr 2017 00:30:51 GMT):
I'll ask the others at PokitDok their thoughts on what all we really need and see what they think best
kelly_ (Wed, 19 Apr 2017 00:43:09 GMT):
Let us know if you need help or want to collaborate
PacoEcotrust (Wed, 19 Apr 2017 08:00:40 GMT):
Hi, I am in this step----->docker-compose -f docker/compose/sawtooth-demo.yaml up-------------------->and have problems with the version of Docker-compose. Is possible to install one concrete version of it?
PacoEcotrust (Wed, 19 Apr 2017 08:00:40 GMT):
Hi, I am in this step----->docker-compose -f docker/compose/sawtooth-demo.yaml up-------------------->and have problems with the version of Docker-compose. Is possible to install one concrete version of it with the idea to resolve the problem?
kpkulkarni (Wed, 19 Apr 2017 13:27:49 GMT):
Has joined the channel.
kpkulkarni (Wed, 19 Apr 2017 13:29:57 GMT):
Sawtooth gurus, Is there any tutorial to create a executable python/shell script and deploy it on the blockchain ?
toddojala (Wed, 19 Apr 2017 14:24:53 GMT):
@kpkulkarni Could you be more specific? Do you want to create a client, or a new transaction family, etc.?
toddojala (Wed, 19 Apr 2017 14:28:39 GMT):
@kpkulkarni Please take a look at our main documentation at: http://intelledger.github.io/ and run through the tutorials. If you have question that is not answered, let us know here. In the repository, the SDKs for python, javascript and java are also available: https://github.com/hyperledger/sawtooth-core/tree/master/sdk
Dan (Wed, 19 Apr 2017 14:38:22 GMT):
@amundson is `extensions` meant to continue in the new layout or is that all content to be migrated/eliminated?
zac (Wed, 19 Apr 2017 15:06:53 GMT):
A big refactor to how the REST API sends back errors is underway. The biggest feature is that each individual error will have a unique fixed integer code, to make handling them easier. You can view the PR here if you are curious: https://github.com/hyperledger/sawtooth-core/pull/354
zac (Wed, 19 Apr 2017 15:07:28 GMT):
My question for everyone involved is, has anyone already written code that parses errors using something other than the HTTP status?
zac (Wed, 19 Apr 2017 15:09:03 GMT):
The HTTP status codes will all stay the same, but the response body is switching from just text to a JSON object, so if anyone used that text at all, their code will break.
zac (Wed, 19 Apr 2017 15:09:42 GMT):
I only know of one instance that is, and I am fixing it as part of my PR, but I want to make sure than aren't any other instances I'm missing.
pschwarz (Wed, 19 Apr 2017 15:11:44 GMT):
@kpkulkarni are you wanting to effectively have a python smart contract?
jsmitchell (Wed, 19 Apr 2017 15:16:28 GMT):
@kpkulkarni: check out the xo transaction family. It's a simple example written in python. https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/xo_python/sawtooth_xo/processor/handler.py
agunde (Wed, 19 Apr 2017 16:25:00 GMT):
The intkey examples have been updated to use the rest api instead of the stream class. This means that if you wish to use intkey load or intkey workload you will need to start up the rest_api for the validator.
Dan (Wed, 19 Apr 2017 18:41:46 GMT):
Per bandit and @dhuseby note more secure manner for loading yaml updated in @rbuysse's PR
https://github.com/hyperledger/sawtooth-core/pull/352
choas (Wed, 19 Apr 2017 21:07:32 GMT):
Has left the channel.
kpkulkarni (Thu, 20 Apr 2017 02:39:00 GMT):
Thanks all for valuable comments. I shall read the sawtooth docs and get back soon
benjaminbollen (Thu, 20 Apr 2017 11:43:09 GMT):
Has joined the channel.
betolive (Thu, 20 Apr 2017 14:47:18 GMT):
Has joined the channel.
Dan (Thu, 20 Apr 2017 16:04:40 GMT):
if there's no use case for a no-op transaction then I'd say we don't support that.
boydjohnson (Thu, 20 Apr 2017 16:39:19 GMT):
So just throwing my 2 cents in on this, I *could imagine* a use for reading from state but not writing to state. Where a transaction checks for a value and if it is there it doesn't throw an error, but doesn't write to state.
boydjohnson (Thu, 20 Apr 2017 16:45:43 GMT):
This would limit reads (messages sent between tp and context manager) where a many txns in a batch need to depend on a value being there.
agunde (Thu, 20 Apr 2017 17:04:26 GMT):
The above idea could create a no-op batch (only a no-op txn), which could lead to a no-op block (no state change) which seems bad and could break assumptions about block and state_root_hashes. It seems like a slippery slope.
amundson (Thu, 20 Apr 2017 17:30:02 GMT):
reconciliation txns might result in no updates if there happens to be nothing to do
agunde (Thu, 20 Apr 2017 17:39:55 GMT):
@amundson Can you explain what you mean by reconciliation txn?
amundson (Thu, 20 Apr 2017 17:44:22 GMT):
I'm thinking like in bond, where we might have a transaction which matches orders and quotes
agunde (Thu, 20 Apr 2017 17:59:08 GMT):
So if we had a transaction which matches orders and quotes but does not find any that could be matched, it would not change state.Okay, therefore you are for allowing no-op txn? @amundson
jsmitchell (Thu, 20 Apr 2017 18:01:24 GMT):
Well, in bond as currently implemented it's essentially a client process that is generating a number of order/quote match txns
jsmitchell (Thu, 20 Apr 2017 18:01:48 GMT):
The generated txns always modify state or fail in that example
agunde (Thu, 20 Apr 2017 18:02:44 GMT):
@jsmitchell correct. I was thinking about it as if it was done differently (kicked off by a transaction)
agunde (Thu, 20 Apr 2017 18:03:29 GMT):
I could see an author of transaction processor implementing something that way.
jsmitchell (Thu, 20 Apr 2017 18:48:11 GMT):
Message Attachments
jsmitchell (Thu, 20 Apr 2017 19:19:24 GMT):
That PDF is a presentation I gave last night at the Enterprise Blockchain Meetup here in Minneapolis
Dan (Thu, 20 Apr 2017 21:01:54 GMT):
I'm not sure if I'm really tired or if my vagrant is messed up...
Dan (Thu, 20 Apr 2017 21:02:20 GMT):
sawtooth-core should be at `/project/sawtooth-core` ?
Dan (Thu, 20 Apr 2017 21:10:20 GMT):
yes yes it should, dan.
Dan (Thu, 20 Apr 2017 21:10:28 GMT):
Thanks dan.
Dan (Thu, 20 Apr 2017 21:11:20 GMT):
that directory isn't getting mapped on two of my systems (one linux, one windows). going to destroy and refresh vagrant and see if it gets cleared up.
Dan (Thu, 20 Apr 2017 21:55:18 GMT):
Not sure what was going on but my windows env is healthy again and linux is still in the long d/l process.
amundson (Thu, 20 Apr 2017 21:58:32 GMT):
@agunde - I'm not for or against the no-op transaction, just providing a potential "real" use-case
foobarometer (Fri, 21 Apr 2017 05:43:10 GMT):
I do have to say the 0.8 documentation makes more sense than 0.7 (especially the ordering). Thx for updating it!
Dan (Fri, 21 Apr 2017 13:16:51 GMT):
thanks for the feedback :) (and nice reorganizing @amundson)
Dan (Fri, 21 Apr 2017 14:00:48 GMT):
I'm curious what strategies people use for reviewing large PRs. We've had several lately.. in fact most of this calendar year given the large updates to the sawtooth. Using @jjason's recent PR as an example https://github.com/hyperledger/sawtooth-core/pull/359/
There are 15 commits and ~1500 loc changed. (This is an appropriate size for this feature branch. But it's large for diff based approaches like github's views) Sometimes I walk the commits individually and sometimes I look at the full diff of the end result. I gather some people go right to running and testing it.
Walking commits is sometimes awkward because its not obvious if the changes get obviated or improved by the 15th commit.
On the other hand, looking at the full diff you see different ideas blended together so the intents of each change aren't necessarily obvious to decipher.
When a file has substantially changed it's easier for me to pull up the whole file in my editor and review it as though its entirely new (with glances back to the diff).
What do other people do?
jsmitchell (Fri, 21 Apr 2017 14:01:29 GMT):
I go commit by commit
jsmitchell (Fri, 21 Apr 2017 14:01:38 GMT):
and I appreciate smaller PRs. :)
boydjohnson (Fri, 21 Apr 2017 14:06:16 GMT):
I think the commit by commit approach is the best, and it is a good idea for people to group code changes into commits that mean something specific for each commit.
toddojala (Fri, 21 Apr 2017 14:09:17 GMT):
@Dan I'm more of a novice with git/github, but I have the same problem. I have to review the whole file if there are a lot of changes. I am starting to look at individual commits more, too. But I myself could benefit from some strategies that others use.
zac (Fri, 21 Apr 2017 14:24:38 GMT):
As a PR-maker I try to create commits that not only encompass one idea, but that are functional and make sense on their own. I ask myself "What if the repo got rolled back to this commit, and no longer had my whole PR?" Hopefully that addresses the "changes might get obviated" problem a bit. They still might, but they should make sense on their own too, so feel free to leave a comment.
boydjohnson (Fri, 21 Apr 2017 14:27:11 GMT):
Yeah, definitely, because it wouldn't just be if master rolled back to that point -- which is unlikely -- but if a person is doing a git bisect or cherry picking commits to another branch the commits being focused and self-contained is important.
jjason (Fri, 21 Apr 2017 14:55:10 GMT):
@dan w.r.t., recent PR (or recent PRs), I chose to focus commits on targeted changes. I could have squashed related ones down together to make it be only a few larger ones. I was under the impression that it was better to have these smaller, targeted commits. I wish that git could convey intent - for example, even though there are approximately 1500loc changed, it is probably more like a few hundred new lines of code (including unit tests) and the rest is refactoring to new design, so the code is not new, just lives somewhere else.
jjason (Fri, 21 Apr 2017 14:57:10 GMT):
@zac @boydjohnson I too like the idea that a commit can be rolled back to, but let me ask a question. A few weeks ago when I was working with @amundson on moving all of the PoET consensus stuff to its own packages, it was recommended to me that the first commit be simply moving the files, then follow-on commits fixing up scripts, etc., that referenced the files. Obviously if someone cherry-picked the move but not the script fix-up, then things are broken. I am getting conflicting information.
jjason (Fri, 21 Apr 2017 14:57:10 GMT):
@zac @boydjohnson I too like the idea that a commit can be rolled back to, but let me put forth an example. A few weeks ago when I was working with @amundson on moving all of the PoET consensus stuff to its own packages, it was recommended to me that the first commit be simply moving the files, then follow-on commits fixing up scripts, etc., that referenced the files. Obviously if someone cherry-picked the move but not the script fix-up, then things are broken. I am getting conflicting information.
jjason (Fri, 21 Apr 2017 14:58:42 GMT):
I think part of my confusion around the PR process is that there is no "group standard" at least that I am aware of. As someone newer to git, I end up pinging someone more knowledgeable, but depending upon whom I ask I get slightly different guidance.
boydjohnson (Fri, 21 Apr 2017 15:01:07 GMT):
Yeah, my thoughts would be that a commit that moves the files would also include the import updates, too. We should come to some group understanding on how commits should be structured.
jjason (Fri, 21 Apr 2017 15:02:42 GMT):
Agreed.
jjason (Fri, 21 Apr 2017 15:06:51 GMT):
So, while we are at it, I have another question. How do people handle "stacked" PRs - and what I mean by that is suppose I submit PR 1 and then start working on PR 2, which builds on/requires PR 1. I get PR 2 work finished before PR 1 has been accepted/merged. Typically I have been holding PR 2 until PR 1's merge and then rebase PR 2 and submit it. I could submit PR 2 before PR 1 is done.
jsmitchell (Fri, 21 Apr 2017 15:07:45 GMT):
@jjason: if you base PR 2 on the branch from PR 1, and PR 1 gets merged, github will do the right thing
jsmitchell (Fri, 21 Apr 2017 15:08:05 GMT):
those commits will 'disappear' from PR 2 because they are now in master
jsmitchell (Fri, 21 Apr 2017 15:08:26 GMT):
of course, if you push fresh commits to PR 1's branch, you will need to rebase PR 2's branch
jjason (Fri, 21 Apr 2017 15:09:00 GMT):
I assumed that part (git is all powerful and all knowing ;) ). That is one reason why I hold back PR 2 - so I can rebase the final PR 1 merge before submitting.
boydjohnson (Fri, 21 Apr 2017 15:10:01 GMT):
Also there should probably be a comment in the 2nd PR that it is based on the first PR.
drozd (Fri, 21 Apr 2017 15:14:45 GMT):
Another issue to consider is reducing clutter in the commit log. Consider my recent PR https://github.com/hyperledger/sawtooth-core/pull/347, which consists of a single commit "Move TP tests to TP directories". When I was working on it, I had four commits: "Move intkey TP tests", "Move xo TP test", "Move config TP test", "Move validator registry TP test". You probably got bored and skipped to the end of that list, and I figure anyone looking at the master commit list would do the same. It's like "I don't need your life story, just tell me what it does. Oh, it moves all the TP tests? Great."
Dan (Fri, 21 Apr 2017 15:26:21 GMT):
To be clear @jjason I wasn't being critical of your PR. I took it as an example of something that was necessarily large and yet well organized.
Dan (Fri, 21 Apr 2017 15:26:51 GMT):
Efficient strategies for handling large PRs seem useful for the team to figure out.
jsmitchell (Fri, 21 Apr 2017 15:26:53 GMT):
@jjason is midas
jsmitchell (Fri, 21 Apr 2017 15:27:12 GMT):
:star2:
jsmitchell (Fri, 21 Apr 2017 15:27:33 GMT):
he's like the anti-Lindelof
jjason (Fri, 21 Apr 2017 15:29:38 GMT):
@dan No worries. I know you weren't picking on me specifically, but wanted to give rationale as well as give some feedback on the frustrations I encountered with the PR process.
boydjohnson (Fri, 21 Apr 2017 15:30:02 GMT):
Somehow my rebase and rebuild on my PR missed the js tp test failure. So, 3 commit PR seeks friendly reviewers for short-term commitment: https://github.com/hyperledger/sawtooth-core/pull/295.
zac (Fri, 21 Apr 2017 15:36:04 GMT):
@drozd Yeah, I would also group all of the move commits into one. Even though technically that isn't an atomic change, it is a very logical way to group the changes in my mind
zac (Fri, 21 Apr 2017 15:36:25 GMT):
Although I also wouldn't reject a PR that had broken up the file moves the way you described
Dan (Fri, 21 Apr 2017 15:53:21 GMT):
@jsmitchell is just giving you praise because you edit your commit messages in vim.
Dan (Fri, 21 Apr 2017 15:53:51 GMT):
As evidenced by: https://github.com/hyperledger/sawtooth-core/pull/359/commits/d0ec41453316beb00b0a4789378fab4219b59d48
jsmitchell (Fri, 21 Apr 2017 15:54:20 GMT):
lol
boydjohnson (Fri, 21 Apr 2017 15:54:43 GMT):
I'm going to modify my default git editor to be pycharm.
boydjohnson (Fri, 21 Apr 2017 15:55:24 GMT):
jk
jsmitchell (Fri, 21 Apr 2017 15:55:58 GMT):
I remember the day that it was clear Boyd was beyond saving
jjason (Fri, 21 Apr 2017 16:03:21 GMT):
D'Oh!!!
drozd (Fri, 21 Apr 2017 16:40:54 GMT):
related git squash discussion: https://news.ycombinator.com/item?id=11407289
jjason (Fri, 21 Apr 2017 16:45:56 GMT):
:) I read the first post and response and the first thing that popped into my head was "religious war". However, I can see utility to keeping small targeted commits in the PR and then squashing them into master into something more "atomic".
drozd (Fri, 21 Apr 2017 16:49:31 GMT):
One comment argues: "If you really want to 'see how the sausage is made', why not log literally every keystroke? But that would be insane, so clearly we can see the need for finding the appropriate level of granularity." The response comment says: "Actually, yes, I _would_ like to see every keystroke logged, it would be very informative!"
drozd (Fri, 21 Apr 2017 16:52:18 GMT):
from https://git-scm.com/book/en/v2/Git-Branching-Rebasing:
```
One point of view on this is that your repository’s commit history is a record of what actually happened. It’s a historical document, valuable in its own right, and shouldn’t be tampered with. From this angle, changing the commit history is almost blasphemous; you’re lying about what actually transpired. So what if there was a messy series of merge commits? That’s how it happened, and the repository should preserve that for posterity.
The opposing point of view is that the commit history is the story of how your project was made. You wouldn’t publish the first draft of a book, and the manual for how to maintain your software deserves careful editing. This is the camp that uses tools like rebase and filter-branch to tell the story in the way that’s best for future readers.
```
jjason (Fri, 21 Apr 2017 16:55:09 GMT):
So, I am going to let smarter git users figure what is the "right' thing to do. If there is a cage match in MSP, please live stream it. ;)
zac (Fri, 21 Apr 2017 19:28:52 GMT):
I have always been more storyteller than historian
boydjohnson (Fri, 21 Apr 2017 19:45:39 GMT):
Yeah, I would have to agree with the storyteller side vs the historian side. While it might be a "interesting" part of the history of a PR that I forgot to do something and made a fixup commit, it really has little to do with the changes.
boydjohnson (Fri, 21 Apr 2017 19:45:39 GMT):
Yeah, I would have to agree with the storyteller side vs the historian side. While it might be an "interesting" part of the history of a PR that I forgot to do something and made a fixup commit, it really has little to do with the changes.
jjason (Fri, 21 Apr 2017 23:13:11 GMT):
Seeing this intermittent failure when submitting PRs:
```
integration_test_1 | ======================================================================
integration_test_1 | FAIL: test_resting_shutdown_sigint (test_shutdown_smoke.TestShutdownSmoke)
integration_test_1 | Tests that SIGINT will cause validators with and without
integration_test_1 | ----------------------------------------------------------------------
integration_test_1 | Traceback (most recent call last):
integration_test_1 | File "/project/sawtooth-core/integration/sawtooth_integration/tests/test_shutdown_smoke.py", line 70, in test_resting_shutdown_sigint
integration_test_1 | self.assertEqual(len(sigint_exit_statuses), len(containers))
integration_test_1 | AssertionError: 0 != 2
integration_test_1 |
integration_test_1 | During handling of the above exception, another exception occurred:
integration_test_1 |
integration_test_1 | Traceback (most recent call last):
integration_test_1 | File "/project/sawtooth-core/integration/sawtooth_integration/tests/test_shutdown_smoke.py", line 77, in test_resting_shutdown_sigint
integration_test_1 | self.fail(str(e))
integration_test_1 | AssertionError: 0 != 2
integration_test_1 |
integration_test_1 | ----------------------------------------------------------------------
```
jjason (Fri, 21 Apr 2017 23:18:42 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-370/1/console
kylestratis (Sun, 23 Apr 2017 02:59:25 GMT):
Has joined the channel.
AlexCacciamani (Sun, 23 Apr 2017 13:58:51 GMT):
Has joined the channel.
shreyankg (Mon, 24 Apr 2017 13:50:48 GMT):
Has joined the channel.
boydjohnson (Mon, 24 Apr 2017 14:44:39 GMT):
@jjason, I have seen that test failure several times. It means that both validators didn't shutdown in the amount of time given. But when I have looked at the logs it looked like it wasn't far in the shutdown process.
jaredcorduan (Mon, 24 Apr 2017 14:48:10 GMT):
Is there a clean way to reward nodes in the network (as a part of a transaction) for validating and applying transactions, such as would be done by a miner in the bitcoin network?
Version 0.7 had a way of doing this, as seen in the marketplace code: https://github.com/hyperledger/sawtooth-core/blob/0-7/extensions/mktplace/mktplace/transactions/market_place.py#L66
kelly_ (Mon, 24 Apr 2017 16:09:20 GMT):
@jaredcorduan I don't believe there is, you could create an incentive transaction in any txn processor you are running though
jaredcorduan (Mon, 24 Apr 2017 16:59:05 GMT):
ok, thanks @kelly_ !
DerekTiffany (Mon, 24 Apr 2017 17:18:14 GMT):
Has joined the channel.
amundson (Mon, 24 Apr 2017 17:26:17 GMT):
@benjaminbollen go sdk support is now in master - https://github.com/hyperledger/sawtooth-core
jjason (Mon, 24 Apr 2017 17:31:40 GMT):
@boydjohnson Do we have a defect in JIRA to cover this?
boydjohnson (Mon, 24 Apr 2017 17:38:13 GMT):
I have a further shutdown jira task, and I was expecting that that would encompass this, but we don't have a specific Jira defect task to make sure this test isn't flaky.
amundson (Tue, 25 Apr 2017 02:11:05 GMT):
oh my, I can't believe I missed that great git discussion @jjason @boydjohnson . my point with respect to moving separate from code changes is that if you do it all at once, it can be virtually impossible to review. git bisect is a pretty good argument I hadn't thought specifically about. With respect to cherry-picking, it is _far_ easier to deal with separate move/change commits if it does not apply cleanly. It is super easy and common to cherry-pick a series of commits, so that's not really a problem either.
amundson (Tue, 25 Apr 2017 02:30:32 GMT):
though, it seems most relevant for the larger moves
JonathanLevi (Tue, 25 Apr 2017 13:30:53 GMT):
Hi everyone, does anyone happen to have an example of using the REST API to post/send transactions?
jsmitchell (Tue, 25 Apr 2017 13:32:07 GMT):
@zac ^
toddojala (Tue, 25 Apr 2017 14:20:48 GMT):
@JonathanLevi Not sure if this is what you are looking for, but the CLI submit command uses the REST API to send transactions. The code is fairly simple, so it might be useful: https://github.com/hyperledger/sawtooth-core/blob/master/cli/sawtooth_cli/submit.py
jsmitchell (Tue, 25 Apr 2017 14:28:10 GMT):
That's using these methods: https://github.com/hyperledger/sawtooth-core/blob/master/cli/sawtooth_cli/rest_client.py
zac (Tue, 25 Apr 2017 14:34:01 GMT):
@JonathanLevi I will actually have a PR in today with a tutorial of how to do just that
JonathanLevi (Tue, 25 Apr 2017 14:34:35 GMT):
@jsmitchell + @zac: this is great, thank you.
zac (Tue, 25 Apr 2017 14:35:11 GMT):
The REST API side of it is fairly simple, send a POST to /batches, Content-Type: application/octet-stream, the body should be the binary for your BatchList
zac (Tue, 25 Apr 2017 14:35:34 GMT):
Now, building that binary is . . . a little more involved
zac (Tue, 25 Apr 2017 14:36:26 GMT):
If you need a walkthrough now, I can take you though it, otherwise probably easier to wait for the PR
zac (Tue, 25 Apr 2017 14:36:33 GMT):
Shouldn't be too much longer now
JonathanLevi (Tue, 25 Apr 2017 14:37:09 GMT):
We can just wait for the PR, so that you won't have to repeat yourself... thank you.
JonathanLevi (Tue, 25 Apr 2017 14:37:19 GMT):
(Appreciate it)
zac (Tue, 25 Apr 2017 14:40:32 GMT):
no problem, you have good timing
JonathanLevi (Tue, 25 Apr 2017 14:56:44 GMT):
BTW: https://github.com/hyperledger/sawtooth-core/pull/377
jsmitchell (Tue, 25 Apr 2017 15:01:37 GMT):
Thanks, @JonathanLevi !
Dan (Tue, 25 Apr 2017 15:08:25 GMT):
Nice!
zac (Tue, 25 Apr 2017 17:38:16 GMT):
@JonathanLevi PR is here: https://github.com/hyperledger/sawtooth-core/pull/381
zac (Tue, 25 Apr 2017 17:38:51 GMT):
The modular way the tutorial is written though, it is not particularly nice to read the source code.
zac (Tue, 25 Apr 2017 17:39:01 GMT):
Here is a zip of the built html:
zac (Tue, 25 Apr 2017 17:39:29 GMT):
Message Attachments
zac (Tue, 25 Apr 2017 17:40:17 GMT):
Open index.html, and go to App Developer's Guide > Building and Submitting a Transaction
zac (Tue, 25 Apr 2017 17:40:24 GMT):
Let me know if you have any questions
amundson (Tue, 25 Apr 2017 19:31:18 GMT):
@zac - should be able to dig around jenkins to find the url to docs built there too for any pr
zac (Tue, 25 Apr 2017 19:31:51 GMT):
that's nifty
zac (Tue, 25 Apr 2017 19:33:31 GMT):
Hrmm, html files are here: https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-381/1/artifact/docs/build/
zac (Tue, 25 Apr 2017 19:33:53 GMT):
They aren't actually viewable as a web page somewhere too are they?
jsmitchell (Tue, 25 Apr 2017 19:34:08 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-381/1/artifact/docs/build/html/app_developers_guide/txn_submit_tutorial/python.html
zac (Tue, 25 Apr 2017 19:34:20 GMT):
whoa
amundson (Tue, 25 Apr 2017 19:34:21 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-381/1/artifact/docs/build/html/index.html
zac (Tue, 25 Apr 2017 19:34:26 GMT):
All hail Jenkins
zac (Tue, 25 Apr 2017 19:35:17 GMT):
Weird, when I clicked on the file before it just rendered the source
zac (Tue, 25 Apr 2017 19:35:26 GMT):
Now it is rendering as a page
kelly_ (Tue, 25 Apr 2017 19:53:59 GMT):
oh nice! I just sent the build of the docs to some people who were interested in pending PR documentation
zac (Tue, 25 Apr 2017 20:26:20 GMT):
FYI, the language select will not work in the Jenkins build because it blocks the `script` tag.
prashiyn (Wed, 26 Apr 2017 05:41:19 GMT):
Has joined the channel.
pancake (Wed, 26 Apr 2017 13:24:20 GMT):
Hi, all, i am trying to figure out how PoET
pancake (Wed, 26 Apr 2017 13:27:59 GMT):
Hi, all, i am trying to figure out how PoET work, but after google, I only got a few info. Could you pls give me some advice or poet's detailed info?
pancake (Wed, 26 Apr 2017 13:30:21 GMT):
BTW, thx for the guy who have reply my question, and sorry for forget reply you for my poor memory. :joy:
pancake (Wed, 26 Apr 2017 13:31:12 GMT):
Few weeks ago.
jsmitchell (Wed, 26 Apr 2017 14:11:40 GMT):
hi @pancake - rocketchat provides a search feature. You should be able to look back and see the conversation.
jsmitchell (Wed, 26 Apr 2017 14:12:04 GMT):
aside from that, what would you like to know?
jsmitchell (Wed, 26 Apr 2017 14:12:46 GMT):
have you read this?http://intelledger.github.io/introduction.html#proof-of-elapsed-time-poet
Dan (Wed, 26 Apr 2017 17:22:04 GMT):
Any volunteers to write up sawtooth doc for 'blocks and chains'?
>Introduce our block definition (okay to be specific here in terms of fields, signing approach, etc.), similar to batch/transaction specificity.
>Formal Completeness
Dan (Wed, 26 Apr 2017 17:22:04 GMT):
Any volunteers to write up sawtooth doc for 'blocks and chains'?
_Introduce our block definition (okay to be specific here in terms of fields, signing approach, etc.), similar to batch/transaction specificity.
Formal Completeness_
Dan (Wed, 26 Apr 2017 17:22:04 GMT):
Any volunteers to write up sawtooth doc for 'blocks and chains'?
_ Introduce our block definition (okay to be specific here in terms of fields, signing approach, etc.), similar to batch/transaction specificity.
Formal Completeness _
Dan (Wed, 26 Apr 2017 17:22:04 GMT):
Any volunteers to write up sawtooth doc for 'blocks and chains'?
"Introduce our block definition (okay to be specific here in terms of fields, signing approach, etc.), similar to batch/transaction specificity.
Formal Completeness"
Dan (Wed, 26 Apr 2017 17:22:04 GMT):
Any volunteers to write up sawtooth doc for 'blocks and chains'?
>"Introduce our block definition (okay to be specific here in terms of fields, signing approach, etc.), similar to batch/transaction specificity.
Formal Completeness"
Dan (Wed, 26 Apr 2017 17:22:04 GMT):
Any volunteers to write up sawtooth doc for 'blocks and chains'?
>"Introduce our block definition (okay to be specific here in terms of fields, signing approach, etc.), similar to batch/transaction specificity.
>Formal Completeness"
amundson (Wed, 26 Apr 2017 17:40:43 GMT):
(for the arch. doc)
Dan (Wed, 26 Apr 2017 17:50:04 GMT):
Yeah section of the arch doc. Was going to add it to backlog but not sure who a good owner is.
pschwarz (Wed, 26 Apr 2017 18:34:26 GMT):
With the merger of https://github.com/hyperledger/sawtooth-core/pull/361, if one wants to modify on-chain configuration settings, you'll need do the following (minimaly):
```
> sawtooth config genesis -k
amundson (Wed, 26 Apr 2017 18:56:52 GMT):
@pschwarz - can you omit the -k to use your default key?
johnsacco (Wed, 26 Apr 2017 20:22:31 GMT):
Has joined the channel.
pschwarz (Wed, 26 Apr 2017 21:34:50 GMT):
Yes, that's right
pschwarz (Wed, 26 Apr 2017 21:34:55 GMT):
I forgot about that
pschwarz (Wed, 26 Apr 2017 21:35:14 GMT):
The default generated with `sawtooth keygen`
pschwarz (Wed, 26 Apr 2017 21:35:14 GMT):
The default generated with `sawtooth keygen`, to be exact
pschwarz (Wed, 26 Apr 2017 21:49:58 GMT):
Message Attachments
amundson (Wed, 26 Apr 2017 23:12:09 GMT):
For the config key strategy, I think the sha256*8 (worst case) is lot of overhead. Essentially, we are using it to attempt to keep the tree balanced. Any suggestions for another, lighter, mechanism to hash/encode the path components?
pschwarz (Wed, 26 Apr 2017 23:22:21 GMT):
@boydjohnson Would be good to get that shutdown integration test from having those periodic failures
Dan (Wed, 26 Apr 2017 23:22:41 GMT):
thanks for the doc @pschwarz!
boydjohnson (Wed, 26 Apr 2017 23:22:57 GMT):
Yeah, definitely. @pschwarz
Dan (Thu, 27 Apr 2017 00:04:58 GMT):
@amundson that sounds like how to efficiently encode a string from a variable length ~52 element set into a fixed length string from a 16 element set. Sounds like something up @hartm's alley (If that's Hart Montgomery's handle?).
hartm (Thu, 27 Apr 2017 00:04:58 GMT):
Has joined the channel.
Dan (Thu, 27 Apr 2017 00:19:21 GMT):
Only loosely related but it would be nice to sweep all the hash use behind a facade like signing ops behind sawtooth-signing. That way we could swap in different hash libs or algos if needed w/o going all over the system.
amundson (Thu, 27 Apr 2017 01:11:24 GMT):
in the config case, it becomes part of the specification for that portion of state so explicit is probably better. if we did want it to be configurable, we would probably want to add some special address containing the hash method to use for bootstrapping the config system. Which might be ok for vaidator processes, but would add overhead to other things like the config cli, which would now need to know on-chain info tondo what can currently be done off chain.
jsmitchell (Thu, 27 Apr 2017 01:18:47 GMT):
Collisions will be quite likely with hashes that small
jsmitchell (Thu, 27 Apr 2017 01:19:33 GMT):
@pschwarz ^
pancake (Thu, 27 Apr 2017 02:05:49 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=XcdDQ2HrQ8fzHH2xD) @jsmitchell Thanks for your reply! I have read this before, but still can't understand why the wait time can achieve consistency? Does the validator become leader and can generate a txn block after it get shortest wait time? How to ensure weather it lose some txn and do not put these txns into a block.
jsmitchell (Thu, 27 Apr 2017 02:10:11 GMT):
Transactions are broadcast around the network, so all validators have the ability to include them in blocks. Once a block is received and applied, all validators start waittimers for the next block. If their waittimer expires before they have received a valid block from a competitor, then they have 'won' the right to build the block. They send out the block, and the other validators verify and apply it and the process begins again.
pancake (Thu, 27 Apr 2017 02:22:08 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=xwtdmMQsep6huscQX) @jsmitchell "Wait for a randomized amount of time - simulates partial preimage search", is this right?
jsmitchell (Thu, 27 Apr 2017 02:24:02 GMT):
Yep, simulates nakamoto mining
jsmitchell (Thu, 27 Apr 2017 02:24:40 GMT):
Except there is no 'work'
jsmitchell (Thu, 27 Apr 2017 02:24:48 GMT):
CPU is idle
pancake (Thu, 27 Apr 2017 02:26:21 GMT):
So what does "TargetWaitTime" and "InitialWaitTime" mean in txnvalidator.js?
jsmitchell (Thu, 27 Apr 2017 02:27:14 GMT):
It would be more instructive to look at the poet implementation in master
jsmitchell (Thu, 27 Apr 2017 02:27:49 GMT):
TargetWaitTime is the desired inter block time for the network
jsmitchell (Thu, 27 Apr 2017 02:28:03 GMT):
Usually 15-30 seconds in our networks
jsmitchell (Thu, 27 Apr 2017 02:31:28 GMT):
InitialWaitTime determines the shape of the 'population estimate' of the network for the first fifty blocks. This is used to shape the exponential random distribution to hit an inter block time based on a configured number of nodes. Once fifty blocks pass, real population data from the blocks are used to generate the population estimate.
pancake (Thu, 27 Apr 2017 02:36:04 GMT):
Could you pls explain the difference between "inter block time" and time generated by enclave?
pancake (Thu, 27 Apr 2017 02:36:09 GMT):
@jsmitchell
jsmitchell (Thu, 27 Apr 2017 02:37:53 GMT):
Interblock time is the average of the minimum random wait time generated by all enclaves across blocks
jsmitchell (Thu, 27 Apr 2017 02:38:46 GMT):
So, if we have 100 validators, and we are targeting 30 second interblock times, we need _most_ of the random times generated to be larger than 30s
jsmitchell (Thu, 27 Apr 2017 02:39:08 GMT):
Ideally one node will get a timer of around 30s
jsmitchell (Thu, 27 Apr 2017 02:39:15 GMT):
And the rest will be higher
pancake (Thu, 27 Apr 2017 02:39:32 GMT):
Like the bitcoin is generated about 10 min, am i right?
jsmitchell (Thu, 27 Apr 2017 02:39:44 GMT):
Yeah, 7 minutes I think
jsmitchell (Thu, 27 Apr 2017 02:40:59 GMT):
Or maybe it's 10 minutes
pancake (Thu, 27 Apr 2017 02:43:11 GMT):
@jsmitchell You’re one in a million, thanks a lot for your help:smile:
jsmitchell (Thu, 27 Apr 2017 02:43:37 GMT):
Anytime!
pschwarz (Thu, 27 Apr 2017 14:12:29 GMT):
@jsmitchell collisions are high, but the settings values in state are hash buckets - they handle collisions
pschwarz (Thu, 27 Apr 2017 14:12:29 GMT):
@jsmitchell collisions are potentially higher, but the settings values in state are hash buckets - they handle collisions
pschwarz (Thu, 27 Apr 2017 17:26:03 GMT):
Message Attachments
pschwarz (Thu, 27 Apr 2017 17:26:25 GMT):
@jsmitchell :point_up:
pschwarz (Thu, 27 Apr 2017 17:27:41 GMT):
I've reduced the number of parts from 8 to 4, which should create a better collision-avoidance outcome. It will also reduce the number of hashes made, which should have better performance characteristics
amundson (Thu, 27 Apr 2017 18:23:57 GMT):
@jsmitchell, @pschwarz, @agunde - do we intend to implement any additional topology management / peering mechanisms than the one we currently have for 0.8?
pschwarz (Thu, 27 Apr 2017 18:25:16 GMT):
There are plans for direct send of messages between peers over the network topology
pschwarz (Thu, 27 Apr 2017 18:25:28 GMT):
As well as directly
pschwarz (Thu, 27 Apr 2017 18:25:28 GMT):
As well as directly, with temporary connections
jsmitchell (Thu, 27 Apr 2017 18:25:54 GMT):
We don't need it for parity. We'll maybe need to do some tweaking of the current peering with larger network testing.
amundson (Thu, 27 Apr 2017 18:28:13 GMT):
would that include things like GET_TOPOLOGY, TOPOLOGY_STATUS_UPDATE and the like? or more subtle?
jsmitchell (Thu, 27 Apr 2017 18:28:54 GMT):
No, just different strategies on how many peers of peers we collect
amundson (Thu, 27 Apr 2017 18:29:41 GMT):
are we going to implement Epidemic as an alternative to Gossip?
jsmitchell (Thu, 27 Apr 2017 18:30:54 GMT):
You mean rename gossip to epidemic or implement stochastic forwarding?
amundson (Thu, 27 Apr 2017 18:31:57 GMT):
"validators exchange messages with each other based on the rules of a gossip or epidemic protocol"
jsmitchell (Thu, 27 Apr 2017 18:32:12 GMT):
Those are synonyms
jsmitchell (Thu, 27 Apr 2017 18:32:32 GMT):
There should probably be commas or parens around 'or epidemic'
amundson (Thu, 27 Apr 2017 18:33:45 GMT):
should we have a arch doc section on gossip?
jsmitchell (Thu, 27 Apr 2017 18:39:30 GMT):
What would it cover that's not already in the network section?
amundson (Thu, 27 Apr 2017 18:44:11 GMT):
@agunde - does the current validator network section cover what we have in the sawtooth_validator.gossip package?
amundson (Thu, 27 Apr 2017 18:44:37 GMT):
(architecturally)
amundson (Thu, 27 Apr 2017 18:47:56 GMT):
peering modes, endpoints, public_uri, min/max peer connectivity?
agunde (Thu, 27 Apr 2017 18:51:46 GMT):
Mostly yes. It talks about how peering is done, listening on endpoints, how the validator keeps trying to peer until it reaches min connectivity, and that it stops accepting peer requests after it reaches max connectivity. It however does not mention public_uri explicitly and this information is spread out across the doc.
amundson (Thu, 27 Apr 2017 18:53:59 GMT):
not sure it fits w/validator network, but the handler mechanism would seem like a good topic?
amundson (Thu, 27 Apr 2017 18:54:55 GMT):
maybe that is already in message delivery
agunde (Thu, 27 Apr 2017 18:55:47 GMT):
I agree. It is briefly mentioned now but not in detail. It could also go in the related components section.
amundson (Thu, 27 Apr 2017 18:59:12 GMT):
@mitchell @agunde - thanks, toc plan updated
amundson (Thu, 27 Apr 2017 18:59:12 GMT):
@jsmitchell @agunde - thanks, toc plan updated
jsmitchell (Thu, 27 Apr 2017 19:07:30 GMT):
:thumbsup:
Marcie (Thu, 27 Apr 2017 20:54:04 GMT):
Has joined the channel.
Dan (Thu, 27 Apr 2017 22:45:39 GMT):
@pschwarz regarding config key/val .. I don't see a performance problem in 8 hashes so long as it is a client side responsibility to generate the address.
pschwarz (Thu, 27 Apr 2017 22:46:15 GMT):
It will be both - the validator will need to generate the addresses as well
pschwarz (Thu, 27 Apr 2017 22:46:26 GMT):
Much of that can be memoized
pschwarz (Thu, 27 Apr 2017 22:47:02 GMT):
But reducing it 4 also has better collision-avoidance characteristics
Dan (Thu, 27 Apr 2017 23:09:42 GMT):
@jsmitchell I *love* the new global state section of the docs!
jsmitchell (Thu, 27 Apr 2017 23:14:45 GMT):
Sweet, thanks!
boydjohnson (Fri, 28 Apr 2017 20:08:04 GMT):
@agunde noticed a problem while working on the javascript xo transaction processor and I replicated by altering an intkey test. If there is some time between batches, and the last batch is invalid, the validator will keep trying to process the batch. This is some logging with only publisher statements left in :```
validator_1 | [19:39:46.918 DEBUG publisher] Batch bb2809cfcf43bf146c71dae66973d45f42a604aec02f9bafe5865a3d4daade631d01d6b56493a6e597ac2c79e8a2aeb68ebe622b1203864997ba2d8a5bf67132 invalid, not added to block.
validator_1 | [19:39:46.918 DEBUG publisher] Abandoning block (3, S:, P:2708e998) no batches added
validator_1 | [19:39:47.094 DEBUG publisher] Batch bb2809cfcf43bf146c71dae66973d45f42a604aec02f9bafe5865a3d4daade631d01d6b56493a6e597ac2c79e8a2aeb68ebe622b1203864997ba2d8a5bf67132 invalid, not added to block.
validator_1 | [19:39:47.094 DEBUG publisher] Abandoning block (3, S:, P:2708e998) no batches added
validator_1 | [19:39:47.276 DEBUG publisher] Batch bb2809cfcf43bf146c71dae66973d45f42a604aec02f9bafe5865a3d4daade631d01d6b56493a6e597ac2c79e8a2aeb68ebe622b1203864997ba2d8a5bf67132 invalid, not added to block.
validator_1 | [19:39:47.278 DEBUG publisher] Abandoning block (3, S:, P:2708e998) no batches added```
boydjohnson (Fri, 28 Apr 2017 20:08:04 GMT):
@agunde noticed a problem while working on the javascript xo transaction processor and I replicated by altering an intkey test. If there is some time between batches, and the last batch is invalid, the validator will keep trying to process the batch. This is some logging with only publisher statements left in :
```validator_1 | [19:39:46.918 DEBUG publisher] Batch bb2809cfcf43bf146c71dae66973d45f42a604aec02f9bafe5865a3d4daade631d01d6b56493a6e597ac2c79e8a2aeb68ebe622b1203864997ba2d8a5bf67132 invalid, not added to block.
validator_1 | [19:39:46.918 DEBUG publisher] Abandoning block (3, S:, P:2708e998) no batches added
validator_1 | [19:39:47.094 DEBUG publisher] Batch bb2809cfcf43bf146c71dae66973d45f42a604aec02f9bafe5865a3d4daade631d01d6b56493a6e597ac2c79e8a2aeb68ebe622b1203864997ba2d8a5bf67132 invalid, not added to block.
validator_1 | [19:39:47.094 DEBUG publisher] Abandoning block (3, S:, P:2708e998) no batches added
validator_1 | [19:39:47.276 DEBUG publisher] Batch bb2809cfcf43bf146c71dae66973d45f42a604aec02f9bafe5865a3d4daade631d01d6b56493a6e597ac2c79e8a2aeb68ebe622b1203864997ba2d8a5bf67132 invalid, not added to block.
validator_1 | [19:39:47.278 DEBUG publisher] Abandoning block (3, S:, P:2708e998) no batches added```
boydjohnson (Fri, 28 Apr 2017 20:09:36 GMT):
Message Attachments
boydjohnson (Fri, 28 Apr 2017 20:10:02 GMT):
Here is the diff that will show the behavior^
jsmitchell (Fri, 28 Apr 2017 20:10:08 GMT):
huh
jsmitchell (Fri, 28 Apr 2017 20:11:39 GMT):
@jjason ^
jsmitchell (Fri, 28 Apr 2017 20:11:57 GMT):
anything in the block publishing logic jump to mind?
jjason (Fri, 28 Apr 2017 20:13:04 GMT):
Nothing jumps to mind.
jsmitchell (Fri, 28 Apr 2017 20:13:54 GMT):
looks like maybe a condition where batch statuses are getting reset on the condition of abandoning a block?
zac (Fri, 28 Apr 2017 22:06:56 GMT):
To anyone writing docs for Sawtooth, the new templating system has just been merged
zac (Fri, 28 Apr 2017 22:09:34 GMT):
Long story short:
- Add Jinja2 style templates to `docs/source/_templates/`
- Add build target information to `template_config.yaml` in that same directory
- When you run `make html` (or any other `make`), your targets will be built and deposited in `docs/source/_autogen/`
- ToC and other files can reference them from there like anything else
Dan (Sat, 29 Apr 2017 16:28:28 GMT):
If any pycharm user wanted to write up how they configured pycharm to work with vagrant they would be my favorite person. First interest is in getting the python paths and dependencies clear to pycharm and bonus points for debugger integration.
rbuysse (Sat, 29 Apr 2017 18:58:08 GMT):
I'd be in favor of that as well.
jsmitchell (Sat, 29 Apr 2017 19:25:25 GMT):
You have been too charmed by pycharm. The wily snake has you hypnotized. "Stay Pure with vim!" (TM)
jjason (Sat, 29 Apr 2017 20:12:25 GMT):
Step 1 - pay for the license for PyCharm Professional.
Dan (Sat, 29 Apr 2017 20:15:13 GMT):
Step 1 complete
jjason (Sat, 29 Apr 2017 20:16:13 GMT):
Steps 2 - n are self-explanatory :) I don't recall if I wrote down anything when I got PyCharm working. You might ping @Tom Barnes
Dan (Sat, 29 Apr 2017 20:16:51 GMT):
You a real funny guy
jjason (Sat, 29 Apr 2017 20:19:21 GMT):
I thought that was why you hired me ;)
jjason (Sat, 29 Apr 2017 20:19:49 GMT):
That and my irresistible charm.
Dan (Sat, 29 Apr 2017 20:50:47 GMT):
No comment
mytrile (Sat, 29 Apr 2017 21:27:12 GMT):
Has joined the channel.
kpkulkarni (Sun, 30 Apr 2017 03:53:10 GMT):
Hi guys, I was following the tutorial document of tic tac toe game.., Theres a step where I need to run the validator and somehow the module secp256k1 is not getting recognized after running the below command.. How do i get around this ?
./bin/validator -v --config sawtooth-arcade/txnvalidator.js
Traceback (most recent call last):
File "./bin/validator", line 34, in
jsmitchell (Sun, 30 Apr 2017 03:54:09 GMT):
Are you running in vagrant?
kpkulkarni (Sun, 30 Apr 2017 03:59:05 GMT):
@jsmitchell yes
jsmitchell (Sun, 30 Apr 2017 03:59:58 GMT):
You must have had some install issues during vagrant up. Are you behind a filtering proxy?
kpkulkarni (Sun, 30 Apr 2017 04:01:03 GMT):
@jsmitchell you might be right.. I was behind a corporate proxy while i did vagrant up.
kpkulkarni (Sun, 30 Apr 2017 04:01:16 GMT):
Will give it a try by resetting my vagrant setup
kpkulkarni (Sun, 30 Apr 2017 04:01:22 GMT):
Thanks
jsmitchell (Sun, 30 Apr 2017 04:01:32 GMT):
Yep
kpkulkarni (Sun, 30 Apr 2017 04:01:33 GMT):
I am pretty new to this vagrant and py stuff
kpkulkarni (Sun, 30 Apr 2017 04:01:41 GMT):
will update here soon
kpkulkarni (Sun, 30 Apr 2017 04:01:42 GMT):
Thanks
amundson (Mon, 01 May 2017 14:15:57 GMT):
anyone else having out-of-space issues w/vagrant's /?
jsmitchell (Mon, 01 May 2017 14:16:46 GMT):
are you installing the latex stuff?
boydjohnson (Mon, 01 May 2017 14:16:47 GMT):
There is 'docker volume prune' which gets rid of volumes created when running tests.
boydjohnson (Mon, 01 May 2017 14:17:02 GMT):
Also, yes, I have had out of space issues.
amundson (Mon, 01 May 2017 14:17:03 GMT):
yes, attempting doc builds
boydjohnson (Mon, 01 May 2017 14:17:18 GMT):
Have you had repeated test runs?
amundson (Mon, 01 May 2017 14:17:54 GMT):
I probably haven't done much other than doc stuff (installed latex though)
jsmitchell (Mon, 01 May 2017 14:22:40 GMT):
I have the sphinx plugin installed and: `/dev/sda1 9.7G 8.1G 1.7G 84% /`
amundson (Mon, 01 May 2017 14:33:05 GMT):
could be the combination of go stuff and latex
Dan (Mon, 01 May 2017 15:36:36 GMT):
Is anyone working on generating the architecture diagram for the docs?
jsmitchell (Mon, 01 May 2017 15:40:04 GMT):
what diagram?
Dan (Mon, 01 May 2017 15:40:41 GMT):
The mother of all diagrams
jsmitchell (Mon, 01 May 2017 15:41:03 GMT):
that should be rethought for published docs, in my opinion
amundson (Mon, 01 May 2017 15:41:12 GMT):
yeah
jsmitchell (Mon, 01 May 2017 15:41:17 GMT):
i think it can be cleaned up quite a bit
jsmitchell (Mon, 01 May 2017 15:41:24 GMT):
and maybe broken into subdiagrams
Dan (Mon, 01 May 2017 15:42:19 GMT):
I think its beautiful.
amundson (Mon, 01 May 2017 15:42:54 GMT):
it's not great at 800px wide though
amundson (Mon, 01 May 2017 15:43:35 GMT):
(or whatever it is on retina screens)
Dan (Mon, 01 May 2017 15:44:15 GMT):
I want it transferred to canvas and hung over my fireplace.
amundson (Mon, 01 May 2017 15:44:30 GMT):
yes, burn it
Dan (Mon, 01 May 2017 15:45:31 GMT):
*Over* not *_in_*
rjones (Mon, 01 May 2017 18:32:11 GMT):
Has left the channel.
amundson (Mon, 01 May 2017 18:52:52 GMT):
I just worked around the vagrant space issue by doing the docker stuff directly on the mac, which worked fine for the docs (thanks @adamludvik for nice docker stuff that works)
adamludvik (Mon, 01 May 2017 19:48:33 GMT):
The Go SDK is (very?) intermittently failing intkey smoke on master. My current hypothesis is that it is taking longer than 1 second to process the first batch of requests because it starts up a bunch of threads and creates a bunch of sockets in after registering with the validator and before it starts processing.
adamludvik (Mon, 01 May 2017 19:48:33 GMT):
The Go SDK is (very?) intermittently failing intkey smoke on master. My current hypothesis is that it is taking longer than 1 second to process the first batch of requests because it starts up a bunch of threads and creates a bunch of sockets after registering with the validator and before it starts processing.
jsmitchell (Mon, 01 May 2017 19:49:07 GMT):
why would that cause it to fail the smoke tests?
adamludvik (Mon, 01 May 2017 19:49:45 GMT):
The smoke test submits transactions, sleeps for a second, then queries state. If state hasn't been updated, it fails.
jsmitchell (Mon, 01 May 2017 19:49:54 GMT):
dang, that's aggressive
jsmitchell (Mon, 01 May 2017 19:50:04 GMT):
i approve of its aggression
adamludvik (Mon, 01 May 2017 19:50:33 GMT):
Should I startup all the threads and sockets before registering then?
jsmitchell (Mon, 01 May 2017 19:51:07 GMT):
that thread/sockets start up stuff has to be like zero milliseconds though, right?
adamludvik (Mon, 01 May 2017 19:51:24 GMT):
sec
adamludvik (Mon, 01 May 2017 19:56:44 GMT):
hmmm
adamludvik (Mon, 01 May 2017 19:58:11 GMT):
0.000584 seconds
jsmitchell (Mon, 01 May 2017 19:58:19 GMT):
darn
jsmitchell (Mon, 01 May 2017 19:58:44 GMT):
85 microseconds less and it would have truly been zero milliseconds
jsmitchell (Mon, 01 May 2017 19:59:14 GMT):
i'm going to wager that that is not your issue
adamludvik (Mon, 01 May 2017 19:59:35 GMT):
I will be declining that wager
pschwarz (Mon, 01 May 2017 20:04:11 GMT):
Could it still be an issue with the txn processor registration ack from the validator getting in the way of the txn process request?
x8367180 (Tue, 02 May 2017 02:57:09 GMT):
Has joined the channel.
x8367180 (Tue, 02 May 2017 03:07:03 GMT):
hello,everybody.I'm glad to meet everybody.:grinning:
x8367180 (Tue, 02 May 2017 03:09:00 GMT):
I'm chinese.My English is not very well.
jsmitchell (Tue, 02 May 2017 03:09:50 GMT):
It's better than our Chinese :)
jsmitchell (Tue, 02 May 2017 03:10:16 GMT):
Welcome!
x8367180 (Tue, 02 May 2017 03:11:18 GMT):
Thank you~:grinning:
x8367180 (Tue, 02 May 2017 03:20:42 GMT):
I‘m learning sawtooth-lake.But I can't how to learn sawtooth-lake,Can you give me some suggestions?Thank you very much.
jsmitchell (Tue, 02 May 2017 03:21:43 GMT):
Have you read the documentation here? https://intelledger.github.io
jsmitchell (Tue, 02 May 2017 03:21:56 GMT):
Sorry we don't have a Chinese version yet.
jsmitchell (Tue, 02 May 2017 03:22:35 GMT):
Perhaps you could help with a translation!
x8367180 (Tue, 02 May 2017 03:25:18 GMT):
ok,thank you.I can
x8367180 (Tue, 02 May 2017 05:48:19 GMT):
@jsmitchell May I see sawtooth-lake as a database?
Dan (Tue, 02 May 2017 12:41:36 GMT):
Yes, you may think of sawtooth as a database.
Dan (Tue, 02 May 2017 12:42:23 GMT):
Blockchains in general are special types of databases. They let people who do not trust each other make changes to the same database.
Dan (Tue, 02 May 2017 12:43:09 GMT):
(Not all projects that claim to be blockchains really act this way though.)
boydjohnson (Tue, 02 May 2017 14:07:20 GMT):
@jsmitchell, I have updated PR #400 since you commented. Do you want to look again?
jsmitchell (Tue, 02 May 2017 14:07:36 GMT):
Gladly
adamludvik (Tue, 02 May 2017 14:26:39 GMT):
I am working on the "Audit URLs passed to urllib.urlopen()" Bandit issue. I did some additional research on the issue and it looks like there are some issues with the urllib library itself (http://blog.blindspotsecurity.com/2016/06/advisory-http-header-injection-in.html) The requests library (http://docs.python-requests.org/en/master/) seems to be the popular alternative to urllib and is based on a different library, urllib3. These libraries have not been blacklisted by bandit and appear to be more robust/security conscious. We are already using requests in other parts of the project (eg., poet-core). Does it make sense to replace urllib with requests to solve the problem? @jsmitchell
jsmitchell (Tue, 02 May 2017 14:27:54 GMT):
that snarfing code snippet i gave you for stats like things used requests, right?
jsmitchell (Tue, 02 May 2017 14:28:19 GMT):
I think I read at the time that that was the preferred way in python3 land
adamludvik (Tue, 02 May 2017 14:28:34 GMT):
yes
adamludvik (Tue, 02 May 2017 14:29:13 GMT):
That's what I gathered in my research too
jsmitchell (Tue, 02 May 2017 14:29:15 GMT):
seems reasonable to me
adamludvik (Tue, 02 May 2017 14:30:10 GMT):
Alright, thanks. Just wanted to check that it was reasonable.
compleatang (Tue, 02 May 2017 16:50:42 GMT):
Has joined the channel.
amundson (Tue, 02 May 2017 19:11:31 GMT):
@agunde in validator's main(), we call init_console_logging() multiple times which is causing duplicate log output in the console. wouldn't the first call cover all cases?
agunde (Tue, 02 May 2017 19:26:38 GMT):
I saw it override the init_console_logging if the config file had a root defined (even if disable_existing_loggers = false). I must have missed a case where both unit_console_logging() are being kept around. Are you using a config file?
agunde (Tue, 02 May 2017 19:26:38 GMT):
I saw it override the init_console_logging if the config file had a root defined (even if disable_existing_loggers = false). I must have missed a case where both init_console_logging() are being kept around. Are you using a logging config file?
amundson (Tue, 02 May 2017 19:27:52 GMT):
I don't think so, unless vagrant would have put one in place
amundson (Tue, 02 May 2017 19:29:27 GMT):
I think I did this: "Initialization errors occurred (see previous log ERROR messages), shutting down.", but I'm finding it fairly unfriendly with -vv as info statements come after the actual error
agunde (Tue, 02 May 2017 19:35:36 GMT):
Do you know what your error was? It looks like i accidentally left an extra init_console_logging in when fixing the above mentioned issues.
amundson (Tue, 02 May 2017 19:41:05 GMT):
yeah, hadn't run 'sawtooth admin keygen' yet so the validator keyfile was missing
agunde (Tue, 02 May 2017 19:42:13 GMT):
Okay, Ya it looks like I forgot to remove a line after debugging, will make a PR shortly.
amundson (Tue, 02 May 2017 19:48:22 GMT):
xo's --wait doesn't seem functional
amundson (Tue, 02 May 2017 19:50:10 GMT):
@zac do we have a client that has a good --wait implementation?
amundson (Tue, 02 May 2017 19:54:05 GMT):
@pschwarz if you don't generate a genesis file, the validator starts up but in a state where it doesn't create blocks
pschwarz (Tue, 02 May 2017 19:54:27 GMT):
Hmm
pschwarz (Tue, 02 May 2017 19:54:32 GMT):
Any blocks?
pschwarz (Tue, 02 May 2017 19:55:33 GMT):
It should be in peering mode, at that point
pschwarz (Tue, 02 May 2017 19:55:51 GMT):
It would need to connect to another node that has a genesis block
pschwarz (Tue, 02 May 2017 19:55:51 GMT):
It ~would need~ should to connect to another node that has a genesis block
pschwarz (Tue, 02 May 2017 19:55:51 GMT):
It ~would need to~ should connect to another node that has a genesis block
amundson (Tue, 02 May 2017 19:56:53 GMT):
```[19:51:14.832 DEBUG genesis] genesis_batch_file: None
[19:51:14.832 DEBUG genesis] chain_head: None False
[19:51:14.833 DEBUG genesis] block_chain_id: None
[19:51:14.833 DEBUG genesis] Requires genesis: False
[19:51:14.834 DEBUG selector_events] Using selector: ZMQSelector
[19:51:14.835 DEBUG dispatch] Added send_message function for connection ServerThread
[19:51:14.838 INFO chain] Chain controller initialized with chain head: None
[19:51:14.838 INFO publisher] Now building on top of block: None```
amundson (Tue, 02 May 2017 19:57:08 GMT):
none of that suggests it is ok and going into peering mode
jsmitchell (Tue, 02 May 2017 19:57:41 GMT):
i think that's what the journal reports in that condition
jsmitchell (Tue, 02 May 2017 19:57:50 GMT):
how did you start it up?
amundson (Tue, 02 May 2017 19:58:33 GMT):
those are all the journal messages
amundson (Tue, 02 May 2017 19:58:39 GMT):
```./bin/validator -vv --public-uri tcp://localhost:40000/```
pschwarz (Tue, 02 May 2017 19:58:42 GMT):
Those log messages are not great, but yes, thous last two are journal's state
jsmitchell (Tue, 02 May 2017 19:58:56 GMT):
are you expecting that to be the genesis node?
pschwarz (Tue, 02 May 2017 19:59:23 GMT):
Should the port for public uri be 40000 or the peering port?
pschwarz (Tue, 02 May 2017 19:59:28 GMT):
(8900?)
amundson (Tue, 02 May 2017 19:59:41 GMT):
well, I'm only running one :) so this is what I get when I forgot a step.
jsmitchell (Tue, 02 May 2017 19:59:44 GMT):
it should be the network port (8800) or whatever
jsmitchell (Tue, 02 May 2017 19:59:50 GMT):
but, that's not the reason
amundson (Tue, 02 May 2017 19:59:54 GMT):
no one cares about public-uri
jsmitchell (Tue, 02 May 2017 19:59:56 GMT):
the reason is that there is no genesis block
amundson (Tue, 02 May 2017 20:00:03 GMT):
it's a garbage option in this instance presumably
pschwarz (Tue, 02 May 2017 20:00:06 GMT):
Right, I was just commenting on that
jsmitchell (Tue, 02 May 2017 20:00:34 GMT):
@amundson: what are you expecting to happen?
pschwarz (Tue, 02 May 2017 20:00:45 GMT):
Basically, you want a message that says: "Waiting on genesis peer", or something
jsmitchell (Tue, 02 May 2017 20:00:45 GMT):
some more descriptive log message?
amundson (Tue, 02 May 2017 20:01:05 GMT):
hmm, it used to error out. but I'm not sure that it's doing the wrong thing now. it's very not-obvious though.
amundson (Tue, 02 May 2017 20:01:28 GMT):
maybe something besides printing None out all over which suggests buggy code :)
amundson (Tue, 02 May 2017 20:02:08 GMT):
it feels like it shouldn't have done any journal stuff yet if it's not peered
pschwarz (Tue, 02 May 2017 20:02:18 GMT):
That's just initialization messages
pschwarz (Tue, 02 May 2017 20:02:27 GMT):
Journal still needs to start up
boydjohnson (Tue, 02 May 2017 20:02:37 GMT):
That logging statement "building on top of block: None" is a common one in other situations, too.
pschwarz (Tue, 02 May 2017 20:02:40 GMT):
But it's probably only useful if it is starting on top of an existing block
amundson (Tue, 02 May 2017 20:02:51 GMT):
any debug statement that prints None is a bug
amundson (Tue, 02 May 2017 20:02:51 GMT):
any debug statement that prints None should be considered a bug
amundson (Tue, 02 May 2017 20:04:56 GMT):
if we don't consider that a bug, how would we know when it is a bug?
amundson (Tue, 02 May 2017 20:05:31 GMT):
anyway, probably we need a logging statement in here that we are waiting to peer?
pschwarz (Tue, 02 May 2017 20:05:45 GMT):
Who's job is it to know that?
pschwarz (Tue, 02 May 2017 20:05:50 GMT):
Journal?
pschwarz (Tue, 02 May 2017 20:05:54 GMT):
Genesis?
amundson (Tue, 02 May 2017 20:05:59 GMT):
certainly not!
amundson (Tue, 02 May 2017 20:06:39 GMT):
what are the rules if we are not a genesis node with respect to peering?
amundson (Tue, 02 May 2017 20:06:50 GMT):
is there a minimum number of peers before we succeed?
amundson (Tue, 02 May 2017 20:06:57 GMT):
succeed->continue
jsmitchell (Tue, 02 May 2017 20:07:05 GMT):
there is no continuance
jsmitchell (Tue, 02 May 2017 20:07:08 GMT):
it happens in a thread
boydjohnson (Tue, 02 May 2017 20:07:11 GMT):
So the validator isn't waiting to peer, is it? It is just waiting for the genesis block to be broadcast to it.
jsmitchell (Tue, 02 May 2017 20:07:19 GMT):
as soon as the first connection happens, blocks will flow
jsmitchell (Tue, 02 May 2017 20:07:29 GMT):
and the journal will get the genesis block and proceed
jsmitchell (Tue, 02 May 2017 20:08:18 GMT):
the thread will continue to attempt to build out topology until it reaches its minimum peering threshold
jsmitchell (Tue, 02 May 2017 20:08:35 GMT):
but blocks and batches will be flowing
amundson (Tue, 02 May 2017 20:09:12 GMT):
hmm, seems to ignore whatever issues we were attempting to address in 0.7
zac (Tue, 02 May 2017 20:09:14 GMT):
@amundson you can use --wait when you submit via the CLI
amundson (Tue, 02 May 2017 20:09:24 GMT):
but, maybe journal should just print that it's waiting for genesis block
zac (Tue, 02 May 2017 20:09:36 GMT):
Otherwise I don't think anything has been built using the feature
amundson (Tue, 02 May 2017 20:09:56 GMT):
@zac - you mean sawtooth submit?
zac (Tue, 02 May 2017 20:10:02 GMT):
yep
zac (Tue, 02 May 2017 20:10:39 GMT):
`sawtooth submit "some-file.batches" --wait`
pschwarz (Tue, 02 May 2017 20:10:51 GMT):
I don't think that works without a genesis block
boydjohnson (Tue, 02 May 2017 20:11:05 GMT):
Does sawtooth submit use the RestClient?
zac (Tue, 02 May 2017 20:11:22 GMT):
yes
zac (Tue, 02 May 2017 20:11:35 GMT):
Do we know the ID of the genesis block?
zac (Tue, 02 May 2017 20:12:31 GMT):
Because if you did a `GET /batch_status` with a wait, I believe it would work fine, even if you were waiting for the genesis block
zac (Tue, 02 May 2017 20:12:39 GMT):
But you would need the Id
zac (Tue, 02 May 2017 20:14:07 GMT):
(The CLI has no command for querying a batch status directly. It submits batches, and then automatically queries for the status of the submitted ids)
zac (Tue, 02 May 2017 20:14:29 GMT):
(If you needed example code though, you would find it there)
amundson (Tue, 02 May 2017 20:15:05 GMT):
@pschwarz are you saying journal doesn't know?
pschwarz (Tue, 02 May 2017 20:15:45 GMT):
Well, I'm saying I don't know with out a deep-dive back into the Journal code
pschwarz (Tue, 02 May 2017 20:16:05 GMT):
But that's my understanding that journal won't commit blocks if it doesn't have a genesis block
jsmitchell (Tue, 02 May 2017 20:16:31 GMT):
@cianx ^
pschwarz (Tue, 02 May 2017 20:16:37 GMT):
Before we added the genesis controller, it would just create an empty genesis block
amundson (Tue, 02 May 2017 20:16:52 GMT):
@pschwarz something can know, whatever knows we are both not creating our own genesis block and that there is not one to process yet
amundson (Tue, 02 May 2017 20:17:04 GMT):
probably the genesis code knows that much
amundson (Tue, 02 May 2017 20:17:29 GMT):
isn't one of the error conditions that genesis block already exists?
pschwarz (Tue, 02 May 2017 20:17:50 GMT):
Now, this might not be the case anymore, since the consensus module was one of the gating factors. With PoET and Devmode handling changes in consensus, it might work now.
cianx (Tue, 02 May 2017 20:18:06 GMT):
The BlockPublisher will not produce block if there is not current chain head.
pschwarz (Tue, 02 May 2017 20:18:12 GMT):
There you go
pschwarz (Tue, 02 May 2017 20:18:50 GMT):
So yes, Genesis Controller knows this, could log it, but the validator still needs to start up everything to handle incoming blocks
amundson (Tue, 02 May 2017 20:18:59 GMT):
so replacing "Now building on top of block: None" with "Not publishing blocks until genesis block is received."
amundson (Tue, 02 May 2017 20:19:01 GMT):
or something
pschwarz (Tue, 02 May 2017 20:19:08 GMT):
Sure.
cianx (Tue, 02 May 2017 20:19:42 GMT):
There are other cases where the chain head is set to None in the block publisher.
boydjohnson (Tue, 02 May 2017 20:19:54 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/validator/sawtooth_validator/journal/publisher.py#L477
boydjohnson (Tue, 02 May 2017 20:20:17 GMT):
This is one of them^
cianx (Tue, 02 May 2017 20:21:04 GMT):
Yes, the block_publisher will not produce potential forks to a block it published.
pschwarz (Tue, 02 May 2017 20:22:21 GMT):
That looks like chain_head is being overloaded - it's a cache of the current chain head in the block store _and_ an indicator of processing state
pschwarz (Tue, 02 May 2017 20:22:21 GMT):
That looks like `chain_head` is being overloaded - it's a cache of the current chain head in the block store _and_ an indicator of processing state
amundson (Tue, 02 May 2017 20:22:50 GMT):
seems like the genesis code would know enough to print a statement "No genesis block is present, resulting in no initial chain head; block publishing is disabled until a chain head is updated" or something
pschwarz (Tue, 02 May 2017 20:23:06 GMT):
I agree with that logging statement
cianx (Tue, 02 May 2017 20:23:38 GMT):
sure, in the block_publisher it is the node that block should be built on.
cianx (Tue, 02 May 2017 20:24:34 GMT):
If it is not set then there is not block should not be built.
amundson (Tue, 02 May 2017 20:27:17 GMT):
so, I caused this situation " Abandoning block (3, S:, P:ebaafd02) no batches added", which put publisher (I think) in a very tight loop. the generated block had a single invalid batch. are we maybe not removing invalid txn from the pending queue?
jsmitchell (Tue, 02 May 2017 20:27:32 GMT):
boyd has a defect up about that in jira
jsmitchell (Tue, 02 May 2017 20:27:37 GMT):
@boydjohnson
jsmitchell (Tue, 02 May 2017 20:27:58 GMT):
it's got something to do with the last batch being invalid
jsmitchell (Tue, 02 May 2017 20:28:06 GMT):
if you submit more work to it, it should continue
jsmitchell (Tue, 02 May 2017 20:28:27 GMT):
i have seen it several times too
boydjohnson (Tue, 02 May 2017 20:28:36 GMT):
Yeah, there is a a diff that I linked to in the jira story, that can create it in intkey_smoke.
amundson (Tue, 02 May 2017 20:28:43 GMT):
does that assume I can generate valid batches? :) not with this xo implementation! :)
jsmitchell (Tue, 02 May 2017 20:29:53 GMT):
you can run intkey workload in parallel to generate some valid stuff
amundson (Tue, 02 May 2017 20:36:31 GMT):
@boydjohnson if a TP crashes without disconnecting cleanly, do we expect the validator to continue to work if you re-connect the TP?
boydjohnson (Tue, 02 May 2017 20:37:15 GMT):
No, that doesn't happen as of yet.
amundson (Tue, 02 May 2017 20:37:52 GMT):
ok
boydjohnson (Tue, 02 May 2017 20:37:53 GMT):
That might be similar to handling of the tp response of internal_error.
amundson (Tue, 02 May 2017 20:38:37 GMT):
actually, internal_error in the sdk invalidated the transaction I think, which is bad
boydjohnson (Tue, 02 May 2017 20:38:38 GMT):
Maybe not, though, but both would be in the TransactionExcetor.
boydjohnson (Tue, 02 May 2017 20:38:53 GMT):
Yeah, that is true.
cianx (Tue, 02 May 2017 20:38:58 GMT):
The block publisher does not hold and resubit transactions
amundson (Tue, 02 May 2017 20:39:39 GMT):
@cianx - that seems fine, the executor should try harder on TP internal errors
boydjohnson (Tue, 02 May 2017 20:40:12 GMT):
I think @cianx was talking about our previous discussion of invalid batches being replayed indefinitely.
cianx (Tue, 02 May 2017 20:40:26 GMT):
corret
amundson (Tue, 02 May 2017 20:40:29 GMT):
ah, ok
cianx (Tue, 02 May 2017 20:40:29 GMT):
*correct
jsmitchell (Tue, 02 May 2017 20:41:00 GMT):
yeah, it's some bug where that batch status isn't getting reflected on block abort
jsmitchell (Tue, 02 May 2017 20:41:18 GMT):
when the only candidate batch is invalid
amundson (Tue, 02 May 2017 20:41:21 GMT):
@boydjohnson so you think this internal error interpreted as invalid txn is a validator issue and not go-sdk specific?
boydjohnson (Tue, 02 May 2017 20:42:31 GMT):
Oh, definitly. The TransactionExecutor treats them as the same, because what the exact right thing to do, I thought, was a little complicated and so I deferred it.
amundson (Tue, 02 May 2017 20:45:07 GMT):
@boydjohnson - do we have a JIRA for it?
boydjohnson (Tue, 02 May 2017 20:46:26 GMT):
I don't think so. More thinking and talking about it seems important, too. I can make a jira for validator handling of the interal error message.
amundson (Tue, 02 May 2017 20:48:33 GMT):
@boydjohnson I'll create one, I need to test hyperledger jira access anyway
boydjohnson (Tue, 02 May 2017 20:48:48 GMT):
Cool, thanks!
amundson (Tue, 02 May 2017 21:00:52 GMT):
thinking we should start using priority field, especially for bugs
amundson (Tue, 02 May 2017 21:00:59 GMT):
@mfford ^
mfford (Tue, 02 May 2017 21:03:08 GMT):
That field is available. You can set priority ranging from Highest to Lowest.
amundson (Tue, 02 May 2017 21:04:04 GMT):
we will probably need to define objectively what those mean
amundson (Tue, 02 May 2017 21:07:45 GMT):
also components, so we can list all "high bugs related to transaction execution" for example
amundson (Tue, 02 May 2017 21:07:59 GMT):
that will probably require some debate as to how we draw the lines
mfford (Tue, 02 May 2017 21:09:26 GMT):
We can work through that as we build this out
amundson (Tue, 02 May 2017 21:53:18 GMT):
for the TP crash issue where executor doesn't recover - https://jira.hyperledger.org/browse/STL-37
amundson (Tue, 02 May 2017 21:54:10 GMT):
for the xo create --wait not working issue - https://jira.hyperledger.org/browse/STL-34
amundson (Tue, 02 May 2017 21:54:24 GMT):
@zac you might want to add some thoughts on STL-34
amundson (Tue, 02 May 2017 21:55:14 GMT):
For the internal errors treated like invalid transactions - https://jira.hyperledger.org/browse/STL-31
amundson (Tue, 02 May 2017 21:55:24 GMT):
(mentioning these here in case people want to add more info/comments)
amundson (Tue, 02 May 2017 22:07:03 GMT):
for the discussion about printing a log statement when starting up with no genesis block: https://jira.hyperledger.org/browse/STL-39
amundson (Tue, 02 May 2017 22:07:38 GMT):
maybe that one should be a feature request, doesn't sound like it's actually buggy
zac (Tue, 02 May 2017 22:17:00 GMT):
I have added a comment to the issue
jpdias (Wed, 03 May 2017 13:22:25 GMT):
Has joined the channel.
adamludvik (Wed, 03 May 2017 18:36:46 GMT):
What is the difference between `--join` and `--peers` for the validator?
toddojala (Wed, 03 May 2017 18:42:58 GMT):
@adamludvik I think that --join specifies which hosts to connect to for the initial connection to the network. --peers is the list of all the hosts to connect to, not just the initial connection.
toddojala (Wed, 03 May 2017 18:43:15 GMT):
I got this idea from looking at the validator -help
adamludvik (Wed, 03 May 2017 18:50:07 GMT):
Thanks @toddojala. James serendipitously walked up stairs after posting this and I asked him in person. `--join` is used to point at a validator from which you want gather peering information from. `--peers` is used to specify a static list of peers that should be peered with.
adamludvik (Wed, 03 May 2017 18:50:47 GMT):
So if you are using `--peering dynamic` you can just point `--join` at a validator and it will gather peering info from it and make connections based on that.
boydjohnson (Wed, 03 May 2017 18:55:20 GMT):
You can also do `--peering dynamic` and have `--peers` be non-empty, too.
adamludvik (Wed, 03 May 2017 18:57:02 GMT):
I also learned that peering is bidirectional, so setting `--peers` to a list of all other validators may be creating duplicate connections. The static peering in poet-smoke is the correct way to create a fully-connected network.
Dan (Wed, 03 May 2017 19:17:03 GMT):
if --peering isn't specified is the default dynamic?
boydjohnson (Wed, 03 May 2017 19:24:30 GMT):
No, the default is static.
zzying (Thu, 04 May 2017 07:42:09 GMT):
Has left the channel.
amundson (Thu, 04 May 2017 14:31:58 GMT):
I have a set of data files which will cause the journal to spin in a loop the first time it receives a transaction, but no transaction ever makes it to a TP
amundson (Thu, 04 May 2017 14:32:31 GMT):
not sure how I caused it exactly
amundson (Thu, 04 May 2017 14:33:01 GMT):
would be handy to have a block inspector for the data files
amundson (Thu, 04 May 2017 14:37:11 GMT):
please add ideas for what you might want in such a tool here: https://jira.hyperledger.org/browse/STL-89
jsmitchell (Thu, 04 May 2017 14:42:14 GMT):
What's the validator logging when it's in this loop?
Dan (Thu, 04 May 2017 14:44:37 GMT):
+1 block inspector tool. (I'd thumbs up your post, but rocketchat can't seem to hold onto the mouse focus for the context menu)
amundson (Thu, 04 May 2017 14:49:22 GMT):
@jsmitchell - I last ran with these data files a couple days ago, so I don't have the output without resetting back to those files.
amundson (Thu, 04 May 2017 14:50:52 GMT):
I have two related proposals I just entered into JIRA. The first is to remove the subprocess backend for the 'sawtooth cluster' command. The second is to remove the 'sawtooth cluster' command completely. Please comment on these if you want either to be kept around. https://jira.hyperledger.org/browse/STL-90 https://jira.hyperledger.org/browse/STL-91
amundson (Thu, 04 May 2017 15:00:06 GMT):
@mitchell - does --peers make sense if you are using --peering dynamic?
jsmitchell (Thu, 04 May 2017 15:00:27 GMT):
Yes, it supports both simultaneously
jsmitchell (Thu, 04 May 2017 15:00:56 GMT):
It will peer with the static ones you provide and also build out topology up to the minimum peering threshold
Dan (Thu, 04 May 2017 15:51:02 GMT):
does this link work for anyone?
http://intelledger.github.io/sawtooth_cli.html
toddojala (Thu, 04 May 2017 15:51:21 GMT):
not for me.
Dan (Thu, 04 May 2017 15:51:36 GMT):
thanks. could you look into why that's broken?
toddojala (Thu, 04 May 2017 15:51:43 GMT):
roger
Dan (Thu, 04 May 2017 15:56:34 GMT):
I was going to look for how to use docker compose in lieu of sawtooth cluster.
Dan (Thu, 04 May 2017 15:57:48 GMT):
I see a simple example in the getting started section. If I wanted to set up a network of let's say 10 validators within my vagrant shell do we have some instructions somewhere?
boydjohnson (Thu, 04 May 2017 16:00:56 GMT):
We don't have for that, but you could look at integration/sawtooth_integration/docker/poet-smoke.yaml for an example of a multi-validator configuration.
amundson (Thu, 04 May 2017 16:33:37 GMT):
@Dan url changed - http://intelledger.github.io/cli.html
amundson (Thu, 04 May 2017 17:56:25 GMT):
```[17:55:44.736 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:44.736 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:44.838 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:44.839 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:44.941 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:44.942 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:45.043 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:45.044 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:45.060 DEBUG dispatch] Removed send_message function for connection ServerThread
[17:55:45.145 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:45.146 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:45.247 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:45.248 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:45.349 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:45.350 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:45.452 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e```
amundson (Thu, 04 May 2017 17:56:58 GMT):
@jsmitchell ^ replicated the same issue again
amundson (Thu, 04 May 2017 17:57:59 GMT):
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ ./bin/validator -vv --public-uri tcp://localhost:8800
[17:55:02.536 INFO path] Skipping path loading from non-existent config file: /home/ubuntu/sawtooth/etc/path.toml
[17:55:02.537 INFO keys] Loading signing key: /home/ubuntu/sawtooth/keys/validator.priv
[17:55:02.539 INFO cli] config [path]: config_dir = "/home/ubuntu/sawtooth/etc"
[17:55:02.540 INFO cli] config [path]: key_dir = "/home/ubuntu/sawtooth/keys"
[17:55:02.540 INFO cli] config [path]: data_dir = "/home/ubuntu/sawtooth/data"
[17:55:02.540 INFO cli] config [path]: log_dir = "/home/ubuntu/sawtooth/logs"
[17:55:02.541 DEBUG core] database file is /home/ubuntu/sawtooth/data/merkle-00.lmdb
[17:55:02.541 DEBUG core] state delta store file is /home/ubuntu/sawtooth/data/state-deltas-00.lmdb
[17:55:02.542 DEBUG core] block store file is /home/ubuntu/sawtooth/data/block-00.lmdb
[17:55:02.545 DEBUG selector_events] Using selector: ZMQSelector
[17:55:02.546 DEBUG dispatch] Added send_message function for connection ServerThread
[17:55:02.547 DEBUG genesis] genesis_batch_file: None
[17:55:02.548 DEBUG genesis] chain_head: ba948f5f(1, S:708ca7fb, P:0b7cc994) True
[17:55:02.549 DEBUG genesis] block_chain_id: 0b7cc994902e7e8df0bb5bb7d336a2c8c501d886954f1486b55e7e89f67ed4061dec60e3c386c8640f0aeb272ec969465d5d686ff7e4b0753cd6e7cf0ae75b22
[17:55:02.550 DEBUG genesis] Requires genesis: False
[17:55:02.551 DEBUG selector_events] Using selector: ZMQSelector
[17:55:02.551 DEBUG dispatch] Added send_message function for connection ServerThread
[17:55:02.553 INFO chain] Chain controller initialized with chain head: ba948f5f(1, S:708ca7fb, P:0b7cc994)
[17:55:02.553 INFO publisher] Now building on top of block: ba948f5f(1, S:708ca7fb, P:0b7cc994)
[17:55:29.803 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 102 bytes
[17:55:29.804 INFO processor_handlers] registered transaction processor: connection_id=e56ceed9c0c1308e7e8341ff25192430a1861aaf84a7bdd9cf64564f12672bce18cd00a3739cde386289db285e2b83cfb6b3a1de6a594c552ddae4e5d4f98d64, family=xo, version=1.0, encoding=csv-utf8, namespaces=['5b7349']
[17:55:29.805 DEBUG interconnect] ServerThread sending TP_REGISTER_RESPONSE to b'04f7f956-b79e-491b-8f9f-48c208d350ee'
[17:55:31.257 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1122 bytes
[17:55:31.272 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:31.274 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'1fc06e4391e043d6'
[17:55:31.374 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:31.479 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e
[17:55:31.479 DEBUG publisher] Abandoning block (2, S:, P:ba948f5f) no batches added
[17:55:31.581 DEBUG publisher] Dropping previously committed batch: bed9c2659f1ac3263b4551110c99e349415cf39a5c5d238806dac2999474af9566cf02b20448392e4f4d753715b9e74e180118f338925e0d2c679f4152dacd5e```
amundson (Thu, 04 May 2017 17:58:12 GMT):
that includes the message prior
jsmitchell (Thu, 04 May 2017 17:58:39 GMT):
@amundson: that seems similar to a defect in jira related to the publisher seeming to lose state on invalid batches, when the last batch is determined to be invalid
jsmitchell (Thu, 04 May 2017 17:59:05 GMT):
looks like it's a duplicate
amundson (Thu, 04 May 2017 17:59:09 GMT):
maybe. but I'd describe this as 'can't restart the validator'
jsmitchell (Thu, 04 May 2017 17:59:25 GMT):
which triggers block publishing
jsmitchell (Thu, 04 May 2017 17:59:43 GMT):
which fails (abandons block) because there is only a single batch and it's bad
amundson (Thu, 04 May 2017 18:00:27 GMT):
don't know how it would know if a batch is bad though, it never talked to a TP
jsmitchell (Thu, 04 May 2017 18:00:48 GMT):
in this case it is bad because it is already in the blockstore
jsmitchell (Thu, 04 May 2017 18:00:53 GMT):
it is a duplicate signature
amundson (Thu, 04 May 2017 18:01:11 GMT):
oh. maybe xo doesn't have a nonce.
jsmitchell (Thu, 04 May 2017 18:02:06 GMT):
so, we need to know why the publisher is seeing duplicates, and why it doesn't dispense of bad batches (for whatever reason) from the pending list so it doesn't get into this looping state
boydjohnson (Thu, 04 May 2017 18:02:09 GMT):
Yes, that is true.
amundson (Thu, 04 May 2017 18:02:40 GMT):
yeah, if I use a different game name, then it works
boydjohnson (Thu, 04 May 2017 18:11:38 GMT):
Hey, @adamludvik Is this Jira story still valid? :https://jira.hyperledger.org/browse/STL-62
adamludvik (Thu, 04 May 2017 18:16:52 GMT):
@boydjohnson Is the `exception Exception as e:` the right way to solve that?
adamludvik (Thu, 04 May 2017 18:16:52 GMT):
@boydjohnson Is the `except Exception as e:` the right way to solve that?
boydjohnson (Thu, 04 May 2017 18:20:40 GMT):
So my thinking was that any uncaught error in the asyncio coroutine would stop messages from being able to be received on that validator, so better to just log the error.
pschwarz (Thu, 04 May 2017 18:22:55 GMT):
We could be smarter about it
adamludvik (Thu, 04 May 2017 18:23:00 GMT):
I think that makes sense in general, but in this case the problem is that an assumption is being made about the length of the list being returned by recv_multipart which isn't valid and is causing an error.
pschwarz (Thu, 04 May 2017 18:23:34 GMT):
That's a pretty naive solution, but we could actually examine the multipart message for the correct pieces
boydjohnson (Thu, 04 May 2017 18:26:42 GMT):
Certainly a naive solution, but the length of the recv_multipart return value is only invalid when a non-dealer socket is connected. We make assumptions in that code that it will only receive messages from a dealer if that socket is a router, or from a router, if that socket is a dealer.
adamludvik (Thu, 04 May 2017 18:28:04 GMT):
I'm not sure that's true. I think you can send n-part messages from a dealer to a router. They are not always 2-part.
boydjohnson (Thu, 04 May 2017 18:31:36 GMT):
That is true. I just looked at the code and had remembered it slightly differently. We are making the assumption that it is a 2-part message, the first part being the identity and the second part being the serialized protobuf bytes of a validator_pb2.Message() instance.
adamludvik (Thu, 04 May 2017 18:36:06 GMT):
So I guess the issue is resolved in that the validator no longer crashes when receiving a >2-part message. If we have a problem with using broad excepts in general, maybe that should be a separate story.
benjaminbollen (Thu, 04 May 2017 18:36:20 GMT):
I guess I should post this here:
> benjaminbollen 8:34 PM
> hi Shawn, I have to run now but I made a first [non-building!] PR here : https://github.com/hyperledger/sawtooth-core/pull/415
with some initial explanation of where I am
the packages introduced will function as a complete set; the non-building should be related to the gopath etc
benjaminbollen (Thu, 04 May 2017 18:36:20 GMT):
I guess I should post this here:
> benjaminbollen 8:34 PM
> hi Shawn, I have to run now but I made a first [non-building!] PR here : https://github.com/hyperledger/sawtooth-core/pull/415
> with some initial explanation of where I am
the packages introduced will function as a complete set; the non-building should be related to the gopath etc
benjaminbollen (Thu, 04 May 2017 18:36:20 GMT):
I guess I should post this here:
> benjaminbollen 8:34 PM
> hi Shawn, I have to run now but I made a first [non-building!] PR here : https://github.com/hyperledger/sawtooth-core/pull/415
> with some initial explanation of where I am
> the packages introduced will function as a complete set; the non-building should be related to the gopath etc
adamludvik (Thu, 04 May 2017 18:40:25 GMT):
@benjaminbollen The PR broke because we have a whitelist of users who can run PRs automatically on our build server. I started a one-off run with the whitelist check disabled for you.
chrisconway (Thu, 04 May 2017 20:28:33 GMT):
Has joined the channel.
Dan (Thu, 04 May 2017 21:27:15 GMT):
Let's add ben to the white list please
mvp1108 (Thu, 04 May 2017 23:10:02 GMT):
Has joined the channel.
mvp1108 (Thu, 04 May 2017 23:11:41 GMT):
hi, working my way through the tutorial for submitting to the REST API from Python, and stuck on some code that doesn't work in my Python 2.7.10 environment --
mvp1108 (Thu, 04 May 2017 23:11:47 GMT):
```key_handler = secp256k1.PrivateKey(private_key)
# No need to manually generate a SHA-256 hash in Python
txn_signature_bytes = key_handler.ecdsa_sign(txn_header_bytes)
txn_signature_hex = txn_signature_bytes.hex()```
mvp1108 (Thu, 04 May 2017 23:12:15 GMT):
I get an error saying that the txn_signature_bytes object doesn't implement a hex() method
mvp1108 (Thu, 04 May 2017 23:12:30 GMT):
it appears to be a wrapper to a C pointer?
mvp1108 (Thu, 04 May 2017 23:19:06 GMT):
there was a place earlier in the code where hex() wouldn't work but .encode("hex") did, but that doesn't work here
amundson (Thu, 04 May 2017 23:33:37 GMT):
@mvp1108 - those docs are for python 3
amundson (Thu, 04 May 2017 23:34:59 GMT):
I confirmed here that they work with python 3 and not python 2.7
amundson (Thu, 04 May 2017 23:39:09 GMT):
@mvp1108 I opened a JIRA issue for this here - https://jira.hyperledger.org/browse/STL-97
amundson (Thu, 04 May 2017 23:40:45 GMT):
@mvp1108 is python 2.7 support important for you?
amundson (Thu, 04 May 2017 23:47:01 GMT):
Also opened https://jira.hyperledger.org/browse/STL-98 - if you want python 2.7 support, please add a comment there in support of this task.
mvp1108 (Thu, 04 May 2017 23:57:29 GMT):
thanks @amundson -- any chance you know how to code that in 2.7? Also, I wasn't able to log into your JIRA board -- I just opened a hyperledger account today but used Facebook SSO...
amundson (Fri, 05 May 2017 00:02:52 GMT):
I can look in a few hours and see if I can figure it out. I haven't tried to sign anything with python 2 since we switched the signing implementation.
jsmitchell (Fri, 05 May 2017 00:03:35 GMT):
That doesn't look like it's using our signing package
jsmitchell (Fri, 05 May 2017 00:03:49 GMT):
It's using secp256k directly
mvp1108 (Fri, 05 May 2017 00:04:00 GMT):
right
mvp1108 (Fri, 05 May 2017 00:04:45 GMT):
well maybe I will try the Javascript tutorial...another victory for node! :-)
jjason (Fri, 05 May 2017 15:11:31 GMT):
@mvp1108 Can you try to following to see if it solves your problem with converting to hex:
```
import binascii
txn_signature_hex = binascii.hexlify(key_handler.ecdsa_serialize(txn_signature_bytes))
```
jjason (Fri, 05 May 2017 15:11:31 GMT):
@mvp1108 Can you try the following to see if it solves your problem with converting to hex:
```
import binascii
txn_signature_hex = binascii.hexlify(key_handler.ecdsa_serialize(txn_signature_bytes))
```
chrisconway (Fri, 05 May 2017 15:18:15 GMT):
$ sawtooth keygen my_key
$ sawtooth config proposal create --key /home/ubuntu/.sawtooth/keys/my_key.priv sawtooth.validator.transaction_families='[{"family": "intkey", "version": "1.0", "encoding": "application/protobuf"}, {"family":"sawtooth_config", "version":"1.0", "encoding":"application/protobuf"}]'
chrisconway (Fri, 05 May 2017 15:19:41 GMT):
Creates a my_key.wif and my_key.addr and then throws an error because there is no my_key.priv
jsmitchell (Fri, 05 May 2017 15:20:20 GMT):
are you on current master?
jsmitchell (Fri, 05 May 2017 15:20:33 GMT):
sawtooth keygen should create a priv and a pub file
jsmitchell (Fri, 05 May 2017 15:20:47 GMT):
not a wif and an addr
jsmitchell (Fri, 05 May 2017 15:21:45 GMT):
as of this commit https://github.com/hyperledger/sawtooth-core/commit/144d4335658dc70c1d8c340cbdcc08ea254980d1
Dan (Fri, 05 May 2017 15:32:07 GMT):
Anyone know a trick to hiding whitespace in github diffs? I thought I found a hidden trick with adding ?w=1 to the url but that doesn't work. I see subsequent github conversations talking about 'hide space' buttons that don't seem to have made it out to github.com.
jsmitchell (Fri, 05 May 2017 15:33:15 GMT):
what do you mean by 'hiding whitespace'?
Dan (Fri, 05 May 2017 15:36:11 GMT):
https://github.com/camsong/chrome-github-mate/issues/5
jsmitchell (Fri, 05 May 2017 15:38:01 GMT):
this seems like a terrible idea
jsmitchell (Fri, 05 May 2017 15:38:14 GMT):
but, that link is for a chrome extension, not github
Dan (Fri, 05 May 2017 15:38:31 GMT):
right but it conveys the feature I was looking for
Dan (Fri, 05 May 2017 15:39:08 GMT):
I don't think you should ignore whitespace in a review, but when you have a large PR bumping up the SNR is helpful.
Dan (Fri, 05 May 2017 15:39:08 GMT):
I don't think you should ignore whitespace in a review, but when you have a large PR bumping up the SnR is helpful.
jsmitchell (Fri, 05 May 2017 15:42:50 GMT):
there is an argument to git diff that does this
jsmitchell (Fri, 05 May 2017 15:43:12 GMT):
`git diff -b` or `git diff -w`
Dan (Fri, 05 May 2017 15:44:38 GMT):
cool. did not know that.
Dan (Fri, 05 May 2017 15:44:40 GMT):
thanks
chrisconway (Fri, 05 May 2017 16:29:57 GMT):
@jsmitchell thanks for getting back to me so fast :) I cloned sawtooth-core last night. I ran the commands from inside the compose_client_1 container built with the hyperledger/sawtooth-all:unstable image from the demo. I appreciate the commit reference because it gave me the confidence to change the name to my_key.priv and things seem to be working now :)
jsmitchell (Fri, 05 May 2017 16:30:38 GMT):
Hrmmmmm
chrisconway (Fri, 05 May 2017 16:35:17 GMT):
Is there a better set of images to be using?
adamludvik (Fri, 05 May 2017 16:59:33 GMT):
@chrisconway Right now our docs are tracking master but our DockerHub images and repo.sawtooth.me/ubuntu/0.8/stable are tracking stable versions. This led to the inconsistency you saw. We are creating a JIRA task to start publishing two versions of the docs, one for stable and one for master to avoid this problem in the future.
AlexCacciamani (Fri, 05 May 2017 17:49:26 GMT):
Hello im on branch 0.7, looking at the extension examples like marketplace and sawtooth xo. I'm finding a warning message on the validator:
AlexCacciamani (Fri, 05 May 2017 17:49:42 GMT):
[17:49:16 WARNING root_page] /Xo/Transaction - NoResource
[17:49:16 WARNING root_page] ['Xo', 'Transaction'] - 2
AlexCacciamani (Fri, 05 May 2017 17:49:47 GMT):
is this normal?
AlexCacciamani (Fri, 05 May 2017 17:49:56 GMT):
thanks :)
AlexCacciamani (Fri, 05 May 2017 17:51:20 GMT):
im also seeing it with the marketplace validator transaction family too...
AlexCacciamani (Fri, 05 May 2017 17:51:20 GMT):
im also seeing it with the marketplace validator transaction family ..
AlexCacciamani (Fri, 05 May 2017 17:51:20 GMT):
im also seeing it with the marketplace validator transaction family ...
boydjohnson (Fri, 05 May 2017 17:51:29 GMT):
@AlexCacciamani I think both of those logging statements are normal (but abnormally bad logging statements in the validator http interface).
AlexCacciamani (Fri, 05 May 2017 17:51:34 GMT):
thanks!
AlexCacciamani (Fri, 05 May 2017 17:57:12 GMT):
An entry level question, how do i force the journal to commit the current block, even if no transactions exist?
AlexCacciamani (Fri, 05 May 2017 17:57:12 GMT):
An entry level question, how do i force the journal to commit the current block? So it doesnt wait for the timer
AlexCacciamani (Fri, 05 May 2017 17:57:26 GMT):
or is that not possible?
boydjohnson (Fri, 05 May 2017 18:00:06 GMT):
I can't fully answer that. Would that be part of constructing a byzantine (or in some way malicious) validator?
AlexCacciamani (Fri, 05 May 2017 18:00:47 GMT):
not at all; just wondering if i had the scenario of a long TIMER variable
AlexCacciamani (Fri, 05 May 2017 18:00:47 GMT):
not at all; just wondering if i had the scenario of a long TIMER variable, but i wanted, at some point on an administrative level be able to commit the current block
boydjohnson (Fri, 05 May 2017 18:02:49 GMT):
You can set poet configurations related to target wait time, or for simple testing use a DevMode consensus on a single validator, but I don't think it is possible or desirable to force a validator to commit the current block.
AlexCacciamani (Fri, 05 May 2017 18:03:07 GMT):
okay, thanks
boydjohnson (Fri, 05 May 2017 18:03:22 GMT):
No problem.
mvp1108 (Fri, 05 May 2017 18:11:30 GMT):
@jjason that worked, thanks
mvp1108 (Fri, 05 May 2017 18:11:33 GMT):
however
mvp1108 (Fri, 05 May 2017 18:12:13 GMT):
now that I can submit a batch to my local validator (I'm just doing the tutorial, Docker-flavor), I get a 400 back saying the batch signature is invalid
mvp1108 (Fri, 05 May 2017 18:13:36 GMT):
Message Attachments
mvp1108 (Fri, 05 May 2017 18:13:44 GMT):
that's what I have right now
mvp1108 (Fri, 05 May 2017 18:13:55 GMT):
for running under python 2.7
mvp1108 (Fri, 05 May 2017 18:14:02 GMT):
thoughts?
ChrisCortez (Fri, 05 May 2017 18:18:46 GMT):
Has joined the channel.
AlexCacciamani (Fri, 05 May 2017 18:20:47 GMT):
`test`
Dan (Fri, 05 May 2017 18:48:57 GMT):
Can you run with python 3? or do you need to work with 2.7 for other reasons?
amundson (Fri, 05 May 2017 19:14:28 GMT):
@Dan - JIRA for the bug you found earlier - https://jira.hyperledger.org/browse/STL-118
mvp1108 (Fri, 05 May 2017 20:04:45 GMT):
@Dan well I installed python 3 yesterday side by side and even made a virtualenv but when I tried pip3 install I got a strange error, I think because it was already installed on the 2.x side and involves native C code?
mvp1108 (Fri, 05 May 2017 20:06:11 GMT):
does the code I posted look like it is at least taking the correct steps to create a hex representation of the public key?
Dan (Fri, 05 May 2017 20:16:59 GMT):
let me try it out ...
amundson (Fri, 05 May 2017 20:22:07 GMT):
just tested out @adamludvik 's latest go SDK additions and restarting the a go TP works great! awesome.
amundson (Fri, 05 May 2017 20:22:07 GMT):
just tested out @adamludvik 's latest go SDK additions and restarting a go TP works great! awesome.
toddojala (Fri, 05 May 2017 20:23:00 GMT):
Awesome
jjason (Fri, 05 May 2017 20:23:56 GMT):
@mvp1108 Can you post a larger snippet of your code as all I can find is the part where you sign the transaction?
Dan (Fri, 05 May 2017 20:23:58 GMT):
@mvp1108 instead of
`public_key_hex = public_key_bytes.encode("hex")`
try using
`public_key_hex = binascii.hexlify(public_key_bytes).decode()
Dan (Fri, 05 May 2017 20:23:58 GMT):
@mvp1108 instead of
`public_key_hex = public_key_bytes.encode("hex")`
try using
`public_key_hex = binascii.hexlify(public_key_bytes).decode()`
mvp1108 (Fri, 05 May 2017 20:24:26 GMT):
k
Dan (Fri, 05 May 2017 20:24:48 GMT):
and then it looks like you are signing the batch using a different mechanism.
mvp1108 (Fri, 05 May 2017 20:25:00 GMT):
@jjason the submit_transaction.py.txt file I posted has it all
mvp1108 (Fri, 05 May 2017 20:25:06 GMT):
really?
jjason (Fri, 05 May 2017 20:25:07 GMT):
@mvp1108 Thx.
Dan (Fri, 05 May 2017 20:25:50 GMT):
oh n/m @mvp1108 I misread the method for the batch signing.
mvp1108 (Fri, 05 May 2017 20:28:21 GMT):
@Dan still getting: 400: A submitted batch had an invalid signature
jjason (Fri, 05 May 2017 20:31:06 GMT):
@mvp1108 @Dan I think you meant `public_key_hex = binascii.hexlify(public_key_bytes)` however I don't think that should matter.
jjason (Fri, 05 May 2017 20:31:22 GMT):
I think `public_key_bytes.encode("hex")` should work fine
mvp1108 (Fri, 05 May 2017 20:31:24 GMT):
y tried it both ways
mvp1108 (Fri, 05 May 2017 20:31:36 GMT):
with and without decode()
Dan (Fri, 05 May 2017 20:42:56 GMT):
On my phone atm, but I can look closer in a bit.
jjason (Fri, 05 May 2017 20:46:54 GMT):
I can also look at it. Give me a bit though, as I don't have Python 2.7 environment currently working with master branch.
Dan (Fri, 05 May 2017 21:02:15 GMT):
@mvp1108 what was the pip3 error you got?
mvp1108 (Fri, 05 May 2017 21:07:57 GMT):
one sec
mvp1108 (Fri, 05 May 2017 21:09:46 GMT):
```Installing collected packages: secp256k1
Running setup.py install for secp256k1 ... error
Complete output from command /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/private/var/folders/x9/xlqxyzhd269bqpkxv73lyf91n7pfzq/T/pip-build-pzk5_y0b/secp256k1/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /var/folders/x9/xlqxyzhd269bqpkxv73lyf91n7pfzq/T/pip-h5cbx3u2-record/install-record.txt --single-version-externally-managed --compile:
0.29.2
Using bundled libsecp256k1
running install
running build
running build_py
creating build
creating build/lib.macosx-10.6-intel-3.6
creating build/lib.macosx-10.6-intel-3.6/secp256k1
copying secp256k1/__init__.py -> build/lib.macosx-10.6-intel-3.6/secp256k1
copying secp256k1/__main__.py -> build/lib.macosx-10.6-intel-3.6/secp256k1
running build_clib
/private/var/folders/x9/xlqxyzhd269bqpkxv73lyf91n7pfzq/T/pip-build-pzk5_y0b/secp256k1/libsecp256k1/autogen.sh: line 3: autoreconf: command not found
Traceback (most recent call last):
File "
Dan (Fri, 05 May 2017 21:11:39 GMT):
@mvp1108 this might be it.. I see you have serialize but probably need serialize_compact for what sawtooth is expecting
`txn_signature_hex = binascii.hexlify(key_handler.ecdsa_serialize_compact(txn_signature_bytes))`
mvp1108 (Fri, 05 May 2017 21:12:04 GMT):
ah
mvp1108 (Fri, 05 May 2017 21:13:01 GMT):
for both of them right?
Dan (Fri, 05 May 2017 21:14:03 GMT):
right
pschwarz (Fri, 05 May 2017 21:14:24 GMT):
Looks like that needs to be corrected in the docs
pschwarz (Fri, 05 May 2017 21:14:42 GMT):
https://intelledger.github.io/_autogen/txn_submit_tutorial_python.html#sign-the-header
pschwarz (Fri, 05 May 2017 21:14:58 GMT):
(if you can double check that, @dan, I'll open a bug for it)
mvp1108 (Fri, 05 May 2017 21:16:01 GMT):
it worked!
Dan (Fri, 05 May 2017 21:16:10 GMT):
yay!
mvp1108 (Fri, 05 May 2017 21:16:12 GMT):
where is the party parrot gif on here?
Dan (Fri, 05 May 2017 21:16:56 GMT):
woot
Dan (Fri, 05 May 2017 21:16:59 GMT):
:woo:
Dan (Fri, 05 May 2017 21:17:15 GMT):
@pscwarz what do you think about that tutorial just using the sawtooth_signing package? It's intended to make all this formating agreement automagic.
Dan (Fri, 05 May 2017 21:17:15 GMT):
@pscwarz what do you think about that tutorial just using the sawtooth_signing package? It's intended to make all this formating
mvp1108 (Fri, 05 May 2017 21:17:30 GMT):
:woot:
pschwarz (Fri, 05 May 2017 21:19:52 GMT):
The purpose of that tutorial was to show how to use the rest api without relying on sawtooth core packages.
pschwarz (Fri, 05 May 2017 21:20:13 GMT):
The javascript version of the same is similar, in that sense (and probably needs the same correction)
mvp1108 (Fri, 05 May 2017 21:22:28 GMT):
y Javascript is broke too, tried that last night in desperation
pschwarz (Fri, 05 May 2017 21:22:47 GMT):
With the same signing issue?
mvp1108 (Fri, 05 May 2017 21:22:53 GMT):
that happy parrot doubles as the canary in the coal mine :-)
pschwarz (Fri, 05 May 2017 21:23:00 GMT):
Haha
mvp1108 (Fri, 05 May 2017 21:23:01 GMT):
y 400 error
pschwarz (Fri, 05 May 2017 21:23:07 GMT):
Cool
pschwarz (Fri, 05 May 2017 21:23:29 GMT):
(well, not cool, but it makes sense)
Dan (Fri, 05 May 2017 21:25:46 GMT):
@pschwarz now that we have the packaging more accessible maybe it would make things easier to use our signing interface.
pschwarz (Fri, 05 May 2017 21:25:47 GMT):
Is that compact format the DER format, @Dan ?
pschwarz (Fri, 05 May 2017 21:26:07 GMT):
Well, we have it in debs, but we don't yet have it in pip packaging
pschwarz (Fri, 05 May 2017 21:26:14 GMT):
Still need to fix the example for JS
Dan (Fri, 05 May 2017 21:26:26 GMT):
no der is different
pschwarz (Fri, 05 May 2017 21:26:30 GMT):
Hm
Dan (Fri, 05 May 2017 21:26:57 GMT):
I had that mislabeled at one point.
pschwarz (Fri, 05 May 2017 21:26:58 GMT):
What is the compact format (or am I going to need to read some source?)
pschwarz (Fri, 05 May 2017 21:26:58 GMT):
What is the compact format (or am I going to need to read some source)?
Dan (Fri, 05 May 2017 21:27:08 GMT):
compact is just the (r,s)
mvp1108 (Fri, 05 May 2017 21:27:10 GMT):
what does it mean when the validator says a transaction in my batch has an unsatisfied dependency?
Dan (Fri, 05 May 2017 21:27:18 GMT):
I think DER prepends some header bytes.
mvp1108 (Fri, 05 May 2017 21:27:26 GMT):
is my blockchain on crack? :-)
pschwarz (Fri, 05 May 2017 21:27:34 GMT):
Gotcha
boydjohnson (Fri, 05 May 2017 21:28:29 GMT):
A transaction can specify a dependency, which is a transaction id of another transaction in a different batch.
pschwarz (Fri, 05 May 2017 21:28:51 GMT):
Then I'm not sure why it doesn't work in JS, since that's what's being produced. Will have to try both examples
boydjohnson (Fri, 05 May 2017 21:31:30 GMT):
@mvp1108, in the TransactionHeader in that txt file you posted, there id a dependencies list with a hard coded string that I can't tell where it comes from. So that transaction id will have to be submitted to the validator in a batch before that transaction will be processed.
boydjohnson (Fri, 05 May 2017 21:31:30 GMT):
@mvp1108, in the TransactionHeader in that txt file you posted, there is a dependencies list with a hard coded string that I can't tell where it comes from. So that transaction id will have to be submitted to the validator in a batch before that transaction will be processed.
pschwarz (Fri, 05 May 2017 21:58:04 GMT):
@boydjohnson was there as part of the example, but for @mvp1108's case it can be empty.
pschwarz (Fri, 05 May 2017 21:58:04 GMT):
@boydjohnson the dependency was there as part of the example, but for @mvp1108's case it can be empty.
boydjohnson (Fri, 05 May 2017 22:02:26 GMT):
Oh, cool. I hadn't looked at that. The note below that python snippet seems to explain it.
Dan (Fri, 05 May 2017 22:04:26 GMT):
@mvp1108 if there was anything unclear in that doc - in addition to or besides these items, feel free to suggest some edits in a PR. and/or lay claim to the jira ticket that @pschwarz did or will create.
mvp1108 (Fri, 05 May 2017 22:04:54 GMT):
I had trouble logging into your JIRA -- can I use mvp1108 somehow
mvp1108 (Fri, 05 May 2017 22:05:55 GMT):
also, what does it mean when validator says "scheduler is finalized, cannot take new batches?" I am running docker containers started with docker compose per tutorial.
boydjohnson (Fri, 05 May 2017 22:09:37 GMT):
The scheduler is finalized, cannot take new batches" logging statement is when the block publishing portion of the code has determined through consensus that it can take a new block, and so won't be adding any new batches to that block and is just waiting on a calculation of the state hash.
Dan (Fri, 05 May 2017 22:10:17 GMT):
so that's just like an info statement not an error @boydjohnson ?
boydjohnson (Fri, 05 May 2017 22:10:27 GMT):
Yeah, definitely.
Dan (Fri, 05 May 2017 22:11:00 GMT):
@mvp1108 I think you can just use that handle as your linux foundation ID. @rjones would mvp need any special permissions?
rjones (Fri, 05 May 2017 22:11:00 GMT):
Has joined the channel.
mvp1108 (Fri, 05 May 2017 22:11:58 GMT):
I couldn't get the password to work, asked it to send me a reset link but email never came../
Dan (Fri, 05 May 2017 22:12:16 GMT):
You should submit a bug about that ... oh wait ;)
rjones (Fri, 05 May 2017 22:12:56 GMT):
I HEAR YOUR SUMMONS
rjones (Fri, 05 May 2017 22:13:25 GMT):
@mvp1108 what is your LFID? (username)
mvp1108 (Fri, 05 May 2017 22:14:23 GMT):
mvp1108 if anything
rjones (Fri, 05 May 2017 22:14:52 GMT):
it is. I'll take the rest of this debugging to DM
Dan (Fri, 05 May 2017 22:21:28 GMT):
:D
pschwarz (Fri, 05 May 2017 22:50:17 GMT):
@mvp1108 @dan Created https://jira.hyperledger.org/browse/STL-125 for the above doc issues
rjones (Fri, 05 May 2017 22:57:38 GMT):
@Dan for some reason I left the volume on my other machine ALL THE WAY UP so when you summoned me to the channel I got a super-loud DING-DONG
Dan (Fri, 05 May 2017 23:27:31 GMT):
So did you @rjones
Dan (Fri, 05 May 2017 23:27:40 GMT):
Change the @rjones
Dan (Fri, 05 May 2017 23:27:52 GMT):
Volume @rjones ?
rjones (Fri, 05 May 2017 23:28:06 GMT):
well, I exited the client on that machine, so... yes
Dan (Fri, 05 May 2017 23:28:19 GMT):
Awwwww :(
Dan (Fri, 05 May 2017 23:28:41 GMT):
There goes my friday night fun.
rjones (Fri, 05 May 2017 23:29:50 GMT):
:)
bmkor (Sat, 06 May 2017 05:19:18 GMT):
Has joined the channel.
MohammadObaid (Sat, 06 May 2017 06:41:16 GMT):
Has joined the channel.
verasnt (Sat, 06 May 2017 14:10:28 GMT):
Has joined the channel.
verasnt (Sat, 06 May 2017 14:11:39 GMT):
hello guys! I want to help the project o/
verasnt (Sat, 06 May 2017 14:15:26 GMT):
i've been reading the docs and i'll try to build and 'play' around with sawtooth a little bit in my machine.. BUT, please, send me the tasks or point me some directions that i can learn and help in a more effective way
verasnt (Sat, 06 May 2017 14:15:29 GMT):
:D
verasnt (Sat, 06 May 2017 14:16:41 GMT):
(i'm from Brazil, sorry about my trash english -- please correct me at anytime ;) )
Dan (Sat, 06 May 2017 15:48:06 GMT):
Ah no, your english is good. Way better than my Portuguese, but that isn't saying much.
Dan (Sat, 06 May 2017 15:48:29 GMT):
We just started filling in tickets on jira:
Dan (Sat, 06 May 2017 15:48:39 GMT):
https://jira.hyperledger.org/secure/RapidBoard.jspa?rapidView=3&view=planning.nodetail&epics=visible
Dan (Sat, 06 May 2017 15:49:43 GMT):
Feel free to also make items if you find inaccuracies in the docs while you are learning.
Dan (Sat, 06 May 2017 15:50:47 GMT):
We change those with the same pull request process. Everything is in sawtooth-core/docs/source/
Dan (Sat, 06 May 2017 15:51:23 GMT):
There's also some relatively new SDKs in several languages if you have a certain language you like.
verasnt (Sat, 06 May 2017 15:52:26 GMT):
roger that.
SahilKapoor (Sat, 06 May 2017 21:23:58 GMT):
Has joined the channel.
verasnt (Sun, 07 May 2017 12:23:03 GMT):
hey guys, i'm translating the sawtooth doc to portuguese(brazilian). I should fork the intelledger repo or create a branch?
verasnt (Sun, 07 May 2017 13:43:05 GMT):
little question.. i was reading the doc, more specific at this page http://intelledger.github.io/architecture/transactions_and_batches.html, and i found a lttle typo.. (alway --> always)
verasnt (Sun, 07 May 2017 13:46:26 GMT):
so i went to gh, fork the sawtooth-docs and i cannot found this specific page in it... Then i fork the sawtooth-core and i found the page, correct the typo and submit a pull request
verasnt (Sun, 07 May 2017 13:47:02 GMT):
is this correct? can i do this?
Dan (Sun, 07 May 2017 16:44:59 GMT):
Yes, all the docs are in sawtooth-core.
Dan (Sun, 07 May 2017 16:45:27 GMT):
Docs in Portuguese will be awesome!
jsmitchell (Mon, 08 May 2017 00:51:29 GMT):
@verasnt Yes, forking the repo and then submitting a PR against master is the right thing to do.
rucha_rangnekar (Mon, 08 May 2017 06:10:51 GMT):
Has joined the channel.
sanket.navin (Mon, 08 May 2017 06:34:13 GMT):
Has joined the channel.
mpiekarska (Mon, 08 May 2017 09:41:34 GMT):
Has joined the channel.
Styxt (Mon, 08 May 2017 10:51:12 GMT):
Has joined the channel.
PacoEcotrust (Mon, 08 May 2017 12:11:47 GMT):
Hi, I am reading about the maintaining the Global State. For example, if in one instance of Sawtooth we had 6 families then we had a tree with 3 levels to represent the 6 families, and the rest specific of the each one of the familie, is it right?
Other question, how is saved the radix tree into the block?
PacoEcotrust (Mon, 08 May 2017 12:11:47 GMT):
Hi, I am reading about the maintaining the Global State. For example, if in one instance of Sawtooth we had 6 families then we had a tree with 3 levels to represent the 6 families, and the rest specific of the each one of the familie, is it right?
Other question, how is saved the radix tree into the block for each one of the transactions? Thanks very much
verasnt (Mon, 08 May 2017 12:16:39 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=uKwYXJKJ8HmKq6n5q) @Dan YEAH! fingers on fire here :)
boydjohnson (Mon, 08 May 2017 12:59:25 GMT):
@PacoEcotrust I have an answer to your 2nd question, but I'm not sure on your 1st: The merkle root, from the merkle/radix tree at the end of processing the transactions from a valid block, is inserted as part of the block so that every other validator can verify that the ending state that that validator ends up with is the same as for the validator that produced the block.
toddojala (Mon, 08 May 2017 14:14:55 GMT):
@PacoEcotrust Maybe @jsmitchell could help with the first question?
jsmitchell (Mon, 08 May 2017 14:19:23 GMT):
@toddojala why don't you take a crack at it? Seems related to the namespace doc you wrote.
toddojala (Mon, 08 May 2017 14:24:24 GMT):
I shall do so. ;)
PacoEcotrust (Mon, 08 May 2017 15:54:18 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=GxGX9pMMYCQk3u74c) @boydjohnson , Yes, ( Global State-Of the all families) the merkle root into the block, but the rest of the tree?, Thanks
PacoEcotrust (Mon, 08 May 2017 15:54:18 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=GxGX9pMMYCQk3u74c) @boydjohnson , Yes, ( Global State-Of all families) the merkle root into the block, but the rest of the tree?, Thanks
jsmitchell (Mon, 08 May 2017 15:55:11 GMT):
Each node keeps its own copy of the global state
jsmitchell (Mon, 08 May 2017 15:56:28 GMT):
when a block comes in, the transactions are processed, which result in transaction level state changes. If the ordered set of state changes of the transactions in the block result in the same merkle hash that is on the block header, then the state changes are atomically committed to the local copy of state.
PacoEcotrust (Mon, 08 May 2017 15:58:10 GMT):
Yeap, but the Global State is not only the merkle root, is also the rest of components of the tree
jsmitchell (Mon, 08 May 2017 16:03:43 GMT):
the merkle root _refers_ to a version of the tree in global state
zac (Mon, 08 May 2017 16:38:27 GMT):
@mvp1108 @amundson @pschwarz I will address these documentation issues today
zac (Mon, 08 May 2017 16:38:45 GMT):
My feeling is that we should _not_ write 2.7 documentation though
zac (Mon, 08 May 2017 16:39:35 GMT):
The idea isn't to exhaustively document the best way to create a Transaction in every version of every language
zac (Mon, 08 May 2017 16:40:01 GMT):
The idea is to leave a handful of examples of ways you _could_ do it, to better explain the underlying principles
zac (Mon, 08 May 2017 16:40:37 GMT):
If you don't need to understand the underlying principles, you should probably just use one of the SDKs
PacoEcotrust (Mon, 08 May 2017 16:43:05 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=YoY4g7whQhBurkGS3) @jsmitchell Yes, but the rest of components of the tree where they are saved?
jsmitchell (Mon, 08 May 2017 16:43:18 GMT):
in a key value store on every node
PacoEcotrust (Mon, 08 May 2017 16:49:31 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=zJ7MvmseoYtSYgjYG) @jsmitchell ..the key is the address and the value is the particular tree?
jsmitchell (Mon, 08 May 2017 16:49:37 GMT):
no
jsmitchell (Mon, 08 May 2017 16:49:59 GMT):
http://intelledger.github.io/architecture/global_state.html
jsmitchell (Mon, 08 May 2017 16:50:31 GMT):
the merkle trie is a set of versioned trees all referenced by their respective state root hashes
jsmitchell (Mon, 08 May 2017 16:50:47 GMT):
the state root hash points to the root node of a given version of the tree
jsmitchell (Mon, 08 May 2017 16:51:12 GMT):
from that point, the radix address can be traversed to find a specific leaf node for that version of the tree
jsmitchell (Mon, 08 May 2017 16:51:41 GMT):
from the perspective of the user of the state, there is data stored at an address
amundson (Mon, 08 May 2017 17:00:18 GMT):
we have a new channel - #sawtooth-burrow for discussion specific to sawtooth+burrow integration
jsmitchell (Mon, 08 May 2017 17:22:02 GMT):
@PacoEcotrust does that make sense?
jsmitchell (Mon, 08 May 2017 17:51:43 GMT):
@cianx: I'm starting to think about this consensus messaging thing
jsmitchell (Mon, 08 May 2017 17:53:11 GMT):
it seems like there would be a need to drive the configuration of the network
jsmitchell (Mon, 08 May 2017 17:53:38 GMT):
e.g. peer in this fashion because of the expectations of the consensus
jsmitchell (Mon, 08 May 2017 17:55:56 GMT):
beyond the questions of the mechanics of consensus messaging
mhart (Mon, 08 May 2017 18:20:28 GMT):
Hi all! What's the expected behavior of the validator when trying to set state at an existing address? I'm currently getting an infinite loop of output
mhart (Mon, 08 May 2017 18:20:38 GMT):
```
mhart (Mon, 08 May 2017 18:20:38 GMT):
```
[18:17:50.425 DEBUG publisher] Abandoning block (4, S:, P:8546fe9d) no batches added
[18:17:50.528 DEBUG publisher] Dropping previously committed batch: 4be7155e1191a3ca137976e1be50ba3dbe2afe7e7604dffe46fbc403dc9cb73455aa9a7f919b1fa6ccf6b23637c16b430892ba308acd45b6f1b6f6042a80be5a
[18:17:50.529 DEBUG publisher] Abandoning block (4, S:, P:8546fe9d) no batches added
[18:17:50.631 DEBUG publisher] Dropping previously committed batch: 4be7155e1191a3ca137976e1be50ba3dbe2afe7e7604dffe46fbc403dc9cb73455aa9a7f919b1fa6ccf6b23637c16b430892ba308acd45b6f1b6f6042a80be5a
[18:17:50.633 DEBUG publisher] Abandoning block (4, S:, P:8546fe9d) no batches added
[18:17:50.735 DEBUG publisher] Dropping previously committed batch: 4be7155e1191a3ca137976e1be50ba3dbe2afe7e7604dffe46fbc403dc9cb73455aa9a7f919b1fa6ccf6b23637c16b430892ba308acd45b6f1b6f6042a80be5a
[18:17:50.736 DEBUG publisher] Abandoning block (4, S:, P:8546fe9d) no batches added
[18:17:50.840 DEBUG publisher] Dropping previously committed batch: 4be7155e1191a3ca137976e1be50ba3dbe2afe7e7604dffe46fbc403dc9cb73455aa9a7f919b1fa6ccf6b23637c16b430892ba308acd45b6f1b6f6042a80be5a
[18:17:50.841 DEBUG publisher] Abandoning block (4, S:, P:8546fe9d) no batches added
[18:17:50.943 DEBUG publisher] Dropping previously committed batch: 4be7155e1191a3ca137976e1be50ba3dbe2afe7e7604dffe46fbc403dc9cb73455aa9a7f919b1fa6ccf6b23637c16b430892ba308acd45b6f1b6f6042a80be5a
[18:17:50.944 DEBUG publisher] Abandoning block (4, S:, P:8546fe9d) no batches added
```
mhart (Mon, 08 May 2017 18:20:54 GMT):
Just keeps repeating that over and over ^
boydjohnson (Mon, 08 May 2017 18:22:39 GMT):
That is a known bug where if a batch is invalid for any reason (The batch has the same signature as an already committed batch) the block publisher won't clear it out and just keeps repeating it. I'll post the jira issue for this bug, if you want to comment further on it.
mhart (Mon, 08 May 2017 18:23:12 GMT):
right - yep, it has the same signature
mhart (Mon, 08 May 2017 18:23:22 GMT):
basically just submitting the same transaction twice
mhart (Mon, 08 May 2017 18:23:27 GMT):
ok, so known issue, all good
jsmitchell (Mon, 08 May 2017 18:49:15 GMT):
yeah, if sole batch in a block is invalid for any reason, it isn't handled correctly atm
jsmitchell (Mon, 08 May 2017 18:49:48 GMT):
@mhart: if you intended those transactions to be different, you gotta nonce
boydjohnson (Mon, 08 May 2017 18:52:36 GMT):
Here is the jira issue for fixing this bug: https://jira.hyperledger.org/browse/STL-158.
chrisconway (Mon, 08 May 2017 21:49:00 GMT):
```test```
jsmitchell (Mon, 08 May 2017 21:49:11 GMT):
```test succeeded```
chrisconway (Mon, 08 May 2017 21:49:51 GMT):
Unfortunatly, this one does not ```root@fe821b8ef287:/# xo create test
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 42, in __init__
with open(keyfile) as fd:
FileNotFoundError: [Errno 2] No such file or directory: '/root/.sawtooth/keys/root.wif'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 357, in main_wrapper
main()
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 340, in main
do_create(args, config)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 275, in do_create
keyfile=key_file)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 46, in __init__
raise IOError("Failed to read keys.")
OSError: Failed to read keys.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif /root/.sawtooth/keys/root.wif
cp: cannot create regular file '/root/.sawtooth/keys/root.wif': No such file or directory
root@fe821b8ef287:/# cd root/
root@fe821b8ef287:~# mkdir .sawtooth
root@fe821b8ef287:~# cd .sawtooth/
root@fe821b8ef287:~/.sawtooth# mkdir keys
root@fe821b8ef287:~/.sawtooth# cd ..
root@fe821b8ef287:~# cd ..
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# cd etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
bash: cd: etc/sawtooth/keys/root.wif: Not a directory
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.addr root/.sawtooth/keys/.
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# xo create first
Error:
chrisconway (Mon, 08 May 2017 21:49:51 GMT):
Unfortunatly, this one does not ```root@fe821b8ef287:/# xo create test
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 42, in __init__
with open(keyfile) as fd:
FileNotFoundError: [Errno 2] No such file or directory: '/root/.sawtooth/keys/root.wif'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 357, in main_wrapper
main()
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 340, in main
do_create(args, config)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 275, in do_create
keyfile=key_file)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 46, in __init__
raise IOError("Failed to read keys.")
OSError: Failed to read keys.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif /root/.sawtooth/keys/root.wif
cp: cannot create regular file '/root/.sawtooth/keys/root.wif': No such file or directory
root@fe821b8ef287:/# cd root/
root@fe821b8ef287:~# mkdir .sawtooth
root@fe821b8ef287:~# cd .sawtooth/
root@fe821b8ef287:~/.sawtooth# mkdir keys
root@fe821b8ef287:~/.sawtooth# cd ..
root@fe821b8ef287:~# cd ..
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# cd etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
bash: cd: etc/sawtooth/keys/root.wif: Not a directory
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.addr root/.sawtooth/keys/.
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# xo create first
Error:
chrisconway (Mon, 08 May 2017 21:49:51 GMT):
Unfortunatly, this one does not ```root@fe821b8ef287:/# xo create test
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 42, in __init__
with open(keyfile) as fd:
FileNotFoundError: [Errno 2] No such file or directory: '/root/.sawtooth/keys/root.wif'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 357, in main_wrapper
main()
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 340, in main
do_create(args, config)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 275, in do_create
keyfile=key_file)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 46, in __init__
raise IOError("Failed to read keys.")
OSError: Failed to read keys.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif /root/.sawtooth/keys/root.wif
cp: cannot create regular file '/root/.sawtooth/keys/root.wif': No such file or directory
root@fe821b8ef287:/# cd root/
root@fe821b8ef287:~# mkdir .sawtooth
root@fe821b8ef287:~# cd .sawtooth/
root@fe821b8ef287:~/.sawtooth# mkdir keys
root@fe821b8ef287:~/.sawtooth# cd ..
root@fe821b8ef287:~# cd ..
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# cd etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
bash: cd: etc/sawtooth/keys/root.wif: Not a directory
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.addr root/.sawtooth/keys/.
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# xo create first
Error:
chrisconway (Mon, 08 May 2017 21:49:51 GMT):
Unfortunatly, this one does not ```root@fe821b8ef287:/# xo create test
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 42, in __init__
with open(keyfile) as fd:
FileNotFoundError: [Errno 2] No such file or directory: '/root/.sawtooth/keys/root.wif'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 357, in main_wrapper
main()
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 340, in main
do_create(args, config)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_cli.py", line 275, in do_create
keyfile=key_file)
File "/usr/lib/python3/dist-packages/sawtooth_xo/xo_client.py", line 46, in __init__
raise IOError("Failed to read keys.")
OSError: Failed to read keys.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif /root/.sawtooth/keys/root.wif
cp: cannot create regular file '/root/.sawtooth/keys/root.wif': No such file or directory
root@fe821b8ef287:/# cd root/
root@fe821b8ef287:~# mkdir .sawtooth
root@fe821b8ef287:~# cd .sawtooth/
root@fe821b8ef287:~/.sawtooth# mkdir keys
root@fe821b8ef287:~/.sawtooth# cd ..
root@fe821b8ef287:~# cd ..
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# cd etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
bash: cd: etc/sawtooth/keys/root.wif: Not a directory
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.wif root/.sawtooth/keys/.
root@fe821b8ef287:/# cp etc/sawtooth/keys/root.addr root/.sawtooth/keys/.
root@fe821b8ef287:/# ls
batches.intkey bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@fe821b8ef287:/# xo create first
Error:
amundson (Mon, 08 May 2017 21:50:12 GMT):
the ``` have to go on a separate line
pschwarz (Mon, 08 May 2017 21:51:30 GMT):
@chrisconway What's your environment like? Did you install from docker? Debs?
amundson (Mon, 08 May 2017 21:51:49 GMT):
to generate the client key for xo, use 'sawtooth keygen'
amundson (Mon, 08 May 2017 21:51:59 GMT):
no need to run as root for that, fwiw
boydjohnson (Mon, 08 May 2017 21:52:21 GMT):
Those commands look like from within a docker container.
chrisconway (Mon, 08 May 2017 21:52:36 GMT):
I installed docker and am using the demo environment that was provided by sawtooth
chrisconway (Mon, 08 May 2017 21:53:02 GMT):
those commands are from within the compose_client_1
chrisconway (Mon, 08 May 2017 21:54:23 GMT):
@amundson I'll give the sawtooth keygen command a try without the admin
boydjohnson (Mon, 08 May 2017 21:54:36 GMT):
Ah, are you able to ```ping validator```?
boydjohnson (Mon, 08 May 2017 21:54:36 GMT):
Ah, are you able to 'ping validator'?
amundson (Mon, 08 May 2017 21:54:57 GMT):
'sawtooth admin keygen' generates keys for the validator, 'sawtooth keygen' for the client
boydjohnson (Mon, 08 May 2017 21:55:49 GMT):
How about, also, 'ping rest_api'?
chrisconway (Mon, 08 May 2017 21:59:57 GMT):
@boydjohnson when i do 'ping $addr' it returns "PING $addr ($addr): 56 data bytes" and hangs
chrisconway (Mon, 08 May 2017 22:00:32 GMT):
when i do 'ping $addr:$port' it returns cannot resolve unknown host
chrisconway (Mon, 08 May 2017 22:00:52 GMT):
I think this means I have to deal with some proxy issues on my end
chrisconway (Mon, 08 May 2017 22:00:59 GMT):
thank you
boydjohnson (Mon, 08 May 2017 22:01:57 GMT):
No problem. I think our docker compose demo yaml file might be out of date -- expecting the cli loading tools to directly hit the validator instead of the rest api.
zac (Tue, 09 May 2017 01:30:35 GMT):
@mvp1108 Thanks for being a guinea pig for the new transaction submit docs! A PR is in with some updates that clarify a few things, and also have example code that will run if just copied and pasted in.
https://github.com/hyperledger/sawtooth-core/pull/430
PacoEcotrust (Tue, 09 May 2017 07:27:42 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=AvK4cYErQuPxRKD43) @jsmitchell , From the theoretical point of view I understand , but from the implementation which is the data structure that manage the tree into the block data structure, thanks.
SahilKapoor (Tue, 09 May 2017 11:27:30 GMT):
Hi,
SahilKapoor (Tue, 09 May 2017 11:27:34 GMT):
I am new to sawtooth
SahilKapoor (Tue, 09 May 2017 11:27:52 GMT):
Can market place example run on version 0.8 ?
SahilKapoor (Tue, 09 May 2017 11:28:04 GMT):
I wanted to run that and learn from it.
SahilKapoor (Tue, 09 May 2017 11:28:30 GMT):
As per the documents it is mentioned v0.7
SahilKapoor (Tue, 09 May 2017 12:46:49 GMT):
Fabric cna interact with external world via api, can sawtooth do the same thing
SahilKapoor (Tue, 09 May 2017 12:46:49 GMT):
Fabric can interact with external world via api, can sawtooth do the same thing ?
jsmitchell (Tue, 09 May 2017 12:48:10 GMT):
@SahilKapoor Yes - http://intelledger.github.io/rest_api/endpoint_specs.html
jsmitchell (Tue, 09 May 2017 12:48:45 GMT):
We have not ported MarketPlace to 0.8 yet
Dan (Tue, 09 May 2017 15:07:33 GMT):
If I want a native linux dev environment for just validator dev, can I just install the stuff I see listed in tools/package_groups/{*deps; *tools} ?
Dan (Tue, 09 May 2017 15:27:02 GMT):
n/m I got hooked up
jsmitchell (Tue, 09 May 2017 15:29:15 GMT):
@PacoEcotrust: blocks contain batches. batches contain transactions. the block header contains the hash of the root of the state trie resulting from the state transitions due to the transactions in the block.
jsmitchell (Tue, 09 May 2017 15:29:46 GMT):
the raw block data is stored in the block store
jsmitchell (Tue, 09 May 2017 15:31:03 GMT):
each node processes the transactions in a block, and if they get to an identical version of state (by comparing the state root hash in the block header against their own calculated version based on generating the transaction state transitions), then they apply the block to the blockstore and they apply the state transitions to the merkle trie.
jsmitchell (Tue, 09 May 2017 15:33:12 GMT):
the state is _not_ stored in the block data
jsmitchell (Tue, 09 May 2017 15:33:30 GMT):
the state is calculated from the transaction data in the blocks
jsmitchell (Tue, 09 May 2017 15:34:14 GMT):
and the state root hash in the block header proves that all nodes end up with the identical bits based on those calculations
toddojala (Tue, 09 May 2017 15:34:43 GMT):
@PacoEcotrust We will soon have a document published that may help to explain the addressing and namespacing. I'll send you a message when it is up.
SahilKapoor (Tue, 09 May 2017 16:01:00 GMT):
@jsmitchell Any timeline by when Market place will be ported to 0.8.
PacoEcotrust (Tue, 09 May 2017 16:42:48 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=Ly8YkkYR7qX7P3N84) @toddojala Thanks
jjason (Tue, 09 May 2017 16:49:23 GMT):
@adamludvik Has something changed with `build_all` recently that breaks when behind firewall? Doesn't seem to be using proxy environment variables when running `docker`command :(
adamludvik (Tue, 09 May 2017 16:55:11 GMT):
Not that I know of. I will look into it
jjason (Tue, 09 May 2017 16:55:18 GMT):
Thx.
jjason (Tue, 09 May 2017 16:55:51 GMT):
I didn't see any changes in git since it was fixed that looked like they should have any impact on this, but I am docker ignorant.
adamludvik (Tue, 09 May 2017 16:58:59 GMT):
Can you double check you have the http proxy environment variables set in the environment you're running the command from?
jjason (Tue, 09 May 2017 16:59:26 GMT):
```
http_proxy=http://proxy-us.intel.com:911
ftp_proxy=
https_proxy=http://proxy-us.intel.com:912
HTTPS_PROXY=http://proxy-us.intel.com:912
no_proxy=intel.com,.intel.com,10.0.0.0,10.0.0.8,192.168.0.0,192.168.0.16,localhost,127.0.0.0,127.0.0.8,134.134.0.0,134.134.0.16,172.16.0.0,172.16.0.20
HTTP_PROXY=http://proxy-us.intel.com:911
```
jjason (Tue, 09 May 2017 17:00:53 GMT):
http://stackoverflow.com/questions/23111631/cannot-download-docker-images-behind-a-proxy
jjason (Tue, 09 May 2017 17:01:19 GMT):
That seems to fix the proxy problem, but I don't like it. Also it then just lead to failure when it tried to fetch GPG keys.
jjason (Tue, 09 May 2017 17:01:39 GMT):
Has the docker deb package updated recently I wonder....
adamludvik (Tue, 09 May 2017 17:02:31 GMT):
Was it failing when downloading the `ubuntu:xenial` images?
adamludvik (Tue, 09 May 2017 17:02:31 GMT):
Was it failing when downloading the `ubuntu:xenial` image?
adamludvik (Tue, 09 May 2017 17:03:39 GMT):
I'm probably going to need to see the error messages. Can you dm them to me?
jjason (Tue, 09 May 2017 17:05:11 GMT):
Yes.
verasnt (Tue, 09 May 2017 21:39:22 GMT):
hey guys, quick question...
verasnt (Tue, 09 May 2017 21:39:55 GMT):
sawtooth doc was created with sphinx? And, how should i proceed with this translation(i'm translating to PT Brazil)? must i Create a branch and submit a PR with all the work at once?
jsmitchell (Tue, 09 May 2017 21:52:37 GMT):
@verasnt: yep, the doc uses sphinx
jsmitchell (Tue, 09 May 2017 21:54:46 GMT):
@amundson what do you think about longer-lived branches for translations that can be merged to master once they are done?
verasnt (Tue, 09 May 2017 22:00:07 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=PNkhLoxg4wLFCK8od) @jsmitchell i think the longer-lived branches are a better idea :)
SahilKapoor (Wed, 10 May 2017 15:16:57 GMT):
Any examples running on 0.8 version?
boydjohnson (Wed, 10 May 2017 15:32:03 GMT):
Hi @SahilKapoor , Do you mean example to get started with the 0.8 version or do you mean example transaction processing implementations? Here are some docs about getting started: http://intelledger.github.io/app_developers_guide/intro_to_sawtooth.html?highlight=tutorial.
SahilKapoor (Wed, 10 May 2017 15:34:32 GMT):
@boydjohnson Like we have market place based on 0.7. Any of these will work on https://01.org/sawtooth/index.html?
boydjohnson (Wed, 10 May 2017 15:36:55 GMT):
We don't yet have any transaction families implemented yet for 0.8 that are as complex as those.
SahilKapoor (Wed, 10 May 2017 16:28:38 GMT):
@boydjohnson Thanks. Do we have any example using java for transactions?
boydjohnson (Wed, 10 May 2017 16:51:31 GMT):
@SahilKapoor This is an example of the java transaction processor handler (where the business logic goes) for a very simple transaction family call intkey: https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/intkey_java/IntegerKeyHandler.java. The java implementation isn't yet up to the intkey spec that we just published to our docs, but will be soon. Here is that specification: http://intelledger.github.io/transaction_family_specifications/integerkey_transaction_family.html.
pschwarz (Wed, 10 May 2017 18:57:43 GMT):
@SahilKapoor Not a Java Transaction Processor, but here's a nice write up on the XO transaction family example that is in `sawtooth-core/sdk/examples/xo_python` or `sawtooth-core/sdk/examples/xo_javascript`. There is a java implementation coming soon
pschwarz (Wed, 10 May 2017 18:57:47 GMT):
https://iamjustatad.wordpress.com/2017/05/09/tic-tac-woe-getting-the-hyperledger-sawtooth-lake-noughts-and-crosses-example-working/
Dan (Wed, 10 May 2017 19:20:34 GMT):
@rbuysse https://chat.hyperledger.org/channel/general?msg=NMf2unhiF9ntkwoaZ
Dan (Wed, 10 May 2017 19:20:57 GMT):
https://provenance.sawtooth.me/ is not responding
rbuysse (Wed, 10 May 2017 20:23:26 GMT):
apache crashed, it's back up now.
rbuysse (Wed, 10 May 2017 20:23:48 GMT):
it's been up for a while, I've been having trouble logging into rocketchat.
rbuysse (Wed, 10 May 2017 20:45:06 GMT):
I just added some monitoring.
jjason (Wed, 10 May 2017 23:21:49 GMT):
Instead of passing around `data_dir`, `key_dir`, etc., to different modules/methods, should we replace these with passing around a `PathConfig` object?
jjason (Wed, 10 May 2017 23:25:57 GMT):
Or at a minimum, establish that if an object/method needs more than one of `data_dir`, 'config_dir`, etc., pass a `PathConfig` object instead?
jjason (Wed, 10 May 2017 23:25:57 GMT):
Or at a minimum, establish that if an object/method needs more than one of `data_dir`, `config_dir`, etc., pass a `PathConfig` object instead?
verasnt (Thu, 11 May 2017 11:26:28 GMT):
morning guys.. i'm trying to run the project in my machine here and i'm facing this error
```
$:~/Documents/codex/sawtooth/sawtooth-core/bin$ ./build_all
[--- Build mode: mounted ---]
[--- Building go ---]
[--- Building sawtooth-dev-go from docker/sawtooth-dev-go ---]
unable to prepare context: path "docker/" not found
```
verasnt (Thu, 11 May 2017 11:27:48 GMT):
i already search for something like this in the dock installation tutorial but i can't found...
verasnt (Thu, 11 May 2017 11:33:34 GMT):
Oops.. it seems that i forgot to run vagrant up inside the tools directory... I'll update my vagrant and run it again..
verasnt (Thu, 11 May 2017 12:19:29 GMT):
problem solved :D .. i wasn't running the
```
vagrant ssh
```
verasnt (Thu, 11 May 2017 12:21:41 GMT):
problem solvled.. i wasn't running the
```
vagrant ssh
```
verasnt (Thu, 11 May 2017 12:21:51 GMT):
:rolling_eyes:
SahilKapoor (Thu, 11 May 2017 13:06:59 GMT):
Is there a way of making a transaction private? Lets say I transfer asset from A to B at some price but that price should not be visible to C. D being a regulator can see everything ? Is this kind of scenario possible?
jaemin.lim (Thu, 11 May 2017 13:10:46 GMT):
Has joined the channel.
verasnt (Thu, 11 May 2017 13:14:04 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=exkQcuynyRq3RLmYA) @SahilKapoor i'm a n00b here BUT i think it'll be.. not sure if is already implemented
jsmitchell (Thu, 11 May 2017 13:16:00 GMT):
@SahilKapoor The trivial solution is a centralized ordering service that just stores receipts. That would keep the multi-party secured data somewhere else (e.g. a 'side-chain). Would be very easy to implement as a transaction processor in Sawtooth.
jsmitchell (Thu, 11 May 2017 13:16:27 GMT):
We are interested in more substantial solutions
jsmitchell (Thu, 11 May 2017 13:17:02 GMT):
Do you have a use case for this?
jsmitchell (Thu, 11 May 2017 13:18:02 GMT):
We have a team exploring a non-trivial solution in this space. Depending on what you are trying to do, it may make sense to have a conversation.
amundson (Thu, 11 May 2017 13:48:54 GMT):
FYI - @rbuysse enabled a github feature yesterday which enforces the requirement that there be at least one approval and no changes requested prior to merge. It changes the interface a bit in that it tells you that "Merging is blocked" when those conditions are not met
amundson (Thu, 11 May 2017 13:57:16 GMT):
@verasnt - A long-lived branch is a possibility. I think what we need to know before deciding on the branch strategy is how we would expect to maintain and publish the translated docs. I've not looked into this much yet, but there is this - http://www.sphinx-doc.org/en/stable/config.html#intl-options. I think that is suggesting that we would set the language in the conf file prior to build and it would generate it in the selected language. We might want to find a couple projects doing internationalization with sphinx-doc and see if there is a common pattern/approach.
amundson (Thu, 11 May 2017 14:02:29 GMT):
we could also start internationalizing our CLI and logging messages as well, which I think initially means figuring out how to do it properly (and probably? start marking all the strings with _())
verasnt (Thu, 11 May 2017 14:04:29 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=tMcwBmG3juac2Ch5K) @amundson i agree with that.. i'll look for some projects that are doing this and bring some insights here for we discuss
SahilKapoor (Thu, 11 May 2017 14:28:27 GMT):
@jsmitchell I want to hide some of the trade data i.e C can see which all entities were involved in the trade but cannot see few other parameters like rating of the entities or price of the of the exchange.
SahilKapoor (Thu, 11 May 2017 14:28:43 GMT):
Can we get some example of side chain?
SahilKapoor (Thu, 11 May 2017 14:29:03 GMT):
I was going through fabric and I asked similar question there
SahilKapoor (Thu, 11 May 2017 14:29:32 GMT):
In response I got this -> https://jira.hyperledger.org/browse/FAB-1151 . It has nice documentation and ppt.
SahilKapoor (Thu, 11 May 2017 14:29:49 GMT):
Would something like that can be created in sawtooth..
SahilKapoor (Thu, 11 May 2017 14:30:56 GMT):
Sea food example is great but I need to implement few of it features as private part of the transaction
jsmitchell (Thu, 11 May 2017 14:52:11 GMT):
@SahilKapoor: The side chain stuff would be as simple as crafting a transaction processor which stores hashes on the 'common' chain. These hashes would be submitted as a result of transactions on the side chains as 'ordered proof' that the transactions exist on the side chains. The side chains would be instanced to the counterparties and the regulators, and store the actual data.
jsmitchell (Thu, 11 May 2017 14:53:07 GMT):
not a very interesting model, and not something we're focused on
jsmitchell (Thu, 11 May 2017 14:54:44 GMT):
if you trust encryption into the future, you could also pursue a multi-sig approach which creates an encrypted blob of data as part of the transaction that gets written to global state. Only the parties with the private keys would be able to decrypt the data, even though all consortium participants would have a copy of the encrypted blob.
travin (Thu, 11 May 2017 15:58:24 GMT):
Hey everyone. Is the seafood supply chain project available for review on GitHub?
travin (Thu, 11 May 2017 15:58:24 GMT):
Ah, alright. Thanks for the update @kelly_ !
travin (Thu, 11 May 2017 15:58:24 GMT):
Hey everyone, is the seafood supply chain project on GitHub
kelly_ (Thu, 11 May 2017 16:00:59 GMT):
hey @travin that code is not yet available on github
kelly_ (Thu, 11 May 2017 16:01:06 GMT):
we are porting it to the .8 architecture
kelly_ (Thu, 11 May 2017 16:01:19 GMT):
@cianx is working on that and it will likely be available in the next couple weeks
kelly_ (Thu, 11 May 2017 16:01:38 GMT):
all of the demos are built on .7 which had a different architecture for smart contracts
travin (Thu, 11 May 2017 16:06:15 GMT):
Hey @kelly_ Thanks for the info! Looking forward to it.
kelly_ (Thu, 11 May 2017 16:06:52 GMT):
if you have any specific requirements we'd love to hear them so we can incorporate them
travin (Thu, 11 May 2017 16:08:37 GMT):
Not at the moment, but if some come up, I'll make sure to mention them here. Thank you!
amundson (Thu, 11 May 2017 22:45:44 GMT):
C++ SDK has been merged into master!!! Great work @cianx!
amundson (Fri, 12 May 2017 14:20:23 GMT):
I'm working on the desired table of contents for the Application Developer's Guide today. If you have ideas about the guide, please let me know. Will paste what I come up with here later.
jjason (Fri, 12 May 2017 14:46:28 GMT):
I would like a section on how to call from VBA (VisualBasic for Applications). A day doesn't go by when I don't think - dang, if I only had access to a blockchain from my Excel spreadsheet.
JonathanLevi (Fri, 12 May 2017 15:07:25 GMT):
A quick question. The github.com/haltingstate/secp256k1-go for secp256k1 is not compatible with Sawtooth validator...
JonathanLevi (Fri, 12 May 2017 15:07:51 GMT):
We are trying to work in Golang... working with the Go SDK
jsmitchell (Fri, 12 May 2017 15:08:17 GMT):
@adamludvik ^
JonathanLevi (Fri, 12 May 2017 15:08:33 GMT):
There is no code to create transaction in gosdk, transaction processor only... so suggestions welcome, please.
JonathanLevi (Fri, 12 May 2017 15:08:33 GMT):
There is (currentlyno code to create transaction in gosdk, transaction processor only... so suggestions welcome, please.
JonathanLevi (Fri, 12 May 2017 15:08:33 GMT):
There is (currently) no code to create transaction in gosdk, transaction processor only... so suggestions welcome, please.
jsmitchell (Fri, 12 May 2017 15:10:15 GMT):
@JonathanLevi when you say it is not compatible, what do you mean?
adamludvik (Fri, 12 May 2017 15:16:20 GMT):
The Go SDK is still relatively new and we haven't developed client side tools yet. If you are interested in helping put something together I'd be happy to give you a hand! The javascript SDK is the only SDK that has client side tools. Otherwise both intkey_python and xo_python have example CLIs for those transaction families. I am not familiar with that repo, but I have been planning to look into this project for secp256k1: https://github.com/tendermint/go-crypto.
JonathanLevi (Fri, 12 May 2017 15:52:29 GMT):
Hi sorry, I'm back sorry.
JonathanLevi (Fri, 12 May 2017 15:52:29 GMT):
Hi sorry, I'm back.
JonathanLevi (Fri, 12 May 2017 15:52:29 GMT):
Hi, sorry, I'm back here.
JonathanLevi (Fri, 12 May 2017 15:52:56 GMT):
We basically generate a transaction and use the REST API... but whatever we do, we end up with *signature_verifier] batch failed signature validation*
JonathanLevi (Fri, 12 May 2017 15:53:56 GMT):
It may even be the data format and not the library (or initialization parameters), I can't tell. Thought I'd run it by this channel.
JonathanLevi (Fri, 12 May 2017 15:55:08 GMT):
(BTW: Have been trying to do the same thing as the intkey_python... yes.
JonathanLevi (Fri, 12 May 2017 15:55:25 GMT):
type IntkeyPayload struct {
Verb string
Name string
Value int
}
JonathanLevi (Fri, 12 May 2017 15:55:28 GMT):
etc.)
kelly_ (Fri, 12 May 2017 16:00:17 GMT):
@Dan may be able to help you out on the crypto side @JonathanLevi
zac (Fri, 12 May 2017 16:21:38 GMT):
@JonathanLevi Have you read over the new Transaction creation tutorial?
zac (Fri, 12 May 2017 16:22:07 GMT):
There are a lot of moving parts, and the tutorial mostly lists them out
zac (Fri, 12 May 2017 16:22:29 GMT):
Could be a relatively small oversight
JonathanLevi (Fri, 12 May 2017 16:26:07 GMT):
The *new* Transaction creation tutorial, being: http://intelledger.github.io/0.8/_autogen/sdk_submit_tutorial_js.html?highlight=transaction%20creator ?
JonathanLevi (Fri, 12 May 2017 16:26:07 GMT):
I think so. We were following this (with the exact same parameter). I believe this is the latest? http://intelledger.github.io/0.8/_autogen/sdk_submit_tutorial_js.html?highlight=transaction%20creator
JonathanLevi (Fri, 12 May 2017 16:26:07 GMT):
I think so. We were following this (with the exact same parameters). I believe this is the latest? http://intelledger.github.io/0.8/_autogen/sdk_submit_tutorial_js.html?highlight=transaction%20creator
JonathanLevi (Fri, 12 May 2017 16:27:09 GMT):
I suspect too that it may be something minor...
Dan (Fri, 12 May 2017 16:30:53 GMT):
signatures... when you can't be one bit off its always something minor. ;)
JonathanLevi (Fri, 12 May 2017 16:31:19 GMT):
Yes, it's a shame it's not all of them!
Dan (Fri, 12 May 2017 16:31:27 GMT):
gist with the sig is we are only passing the (r,s).
JonathanLevi (Fri, 12 May 2017 16:31:31 GMT):
Let me try to xor them.
Dan (Fri, 12 May 2017 16:31:36 GMT):
lol
zac (Fri, 12 May 2017 16:31:42 GMT):
That is the tutorial for the SDK, which obfuscates a lot of the steps
zac (Fri, 12 May 2017 16:31:51 GMT):
Helpful if you are using the SDK, but not otherwise
JonathanLevi (Fri, 12 May 2017 16:32:11 GMT):
What would you recommend to follow @zac?
zac (Fri, 12 May 2017 16:32:18 GMT):
http://intelledger.github.io/0.8/_autogen/txn_submit_tutorial_js.html
JonathanLevi (Fri, 12 May 2017 16:32:26 GMT):
(and, of course, thanks everyone!)
zac (Fri, 12 May 2017 16:32:53 GMT):
That is hopefully helpful
JonathanLevi (Fri, 12 May 2017 16:32:56 GMT):
Yes, the same. Same parameters, btw.
zac (Fri, 12 May 2017 16:33:23 GMT):
There is a slightly newer version, which includes the detail that the signature must be a compact 64-byte sig
JonathanLevi (Fri, 12 May 2017 16:33:42 GMT):
We can just spend some more time over it, not a biggy. Thought you guys may have seen it, which is why I posted here quickly.
zac (Fri, 12 May 2017 16:33:44 GMT):
Other than that, everything _I_ know is in that doc
JonathanLevi (Fri, 12 May 2017 16:33:59 GMT):
@zac: Roger. Thanks!
zac (Fri, 12 May 2017 16:33:59 GMT):
@Dan Probably understands more though
Dan (Fri, 12 May 2017 16:37:40 GMT):
@zac should probably understand that was an incorrect assertion. ;)
zac (Fri, 12 May 2017 16:38:07 GMT):
I don't have to understand anything
Dan (Fri, 12 May 2017 16:38:10 GMT):
I might play with that secp256 go library on the plane later. I see they at least have good commit messages.
https://github.com/haltingstate/secp256k1-go/commit/12062bbe5b33d56668ed2d7218f67a3d6ef4ce91
Dan (Fri, 12 May 2017 16:39:02 GMT):
But anyway, the trick with signing for others before was just we were unclear, all we look for is the r,s pair. so if there's header bytes etc. that's going to break things.
Dan (Fri, 12 May 2017 16:39:15 GMT):
Bitcoin seems to call that a compact signature.
Dan (Fri, 12 May 2017 16:39:48 GMT):
I can't guarantee that term is consistently used in these wrapper libraries.
Dan (Fri, 12 May 2017 16:39:56 GMT):
Which curve is Fabric using?
zac (Fri, 12 May 2017 16:42:10 GMT):
I saw "compact" used with the Python secp256k1 library, but not elsewhere
zac (Fri, 12 May 2017 16:42:35 GMT):
I think they key is 64-bytes
zac (Fri, 12 May 2017 16:42:43 GMT):
If it's longer then that, it's not right
zac (Fri, 12 May 2017 16:42:43 GMT):
If it's longer than that, it's not right
Dan (Fri, 12 May 2017 16:43:06 GMT):
another good tip
TomBarnes (Fri, 12 May 2017 18:00:01 GMT):
Does the rest API allow you to inspect transactions that are pending (not yet published in a block)?
TomBarnes (Fri, 12 May 2017 18:02:45 GMT):
Does the rest API allow you to inspect blocks that may have once been in the block chain but have since been removed due to fork resolution?
zac (Fri, 12 May 2017 18:15:32 GMT):
No to both
zac (Fri, 12 May 2017 18:15:53 GMT):
You can inspect the committed status of _batches_ that are pending
zac (Fri, 12 May 2017 18:16:01 GMT):
But not the transactions within them
zac (Fri, 12 May 2017 18:16:20 GMT):
And blocks discarded by fork resolution are (to my understanding) just tossed out
zac (Fri, 12 May 2017 18:16:34 GMT):
So the REST API would have no way of finding them
zac (Fri, 12 May 2017 18:17:32 GMT):
Though, if forked blocks _do_ stick around for a bit, and are stored in the block store like other blocks, you _would_ be able to fetch them individually by block id
amundson (Fri, 12 May 2017 18:45:27 GMT):
@Tom Barnes what's the use case behind the first question? the current capability is basically that if you submitted a batch, you can lookup it's status.
amundson (Fri, 12 May 2017 18:45:44 GMT):
hmm, that space in the username is unfortunate
jsmitchell (Fri, 12 May 2017 18:46:02 GMT):
yeah, rocketchat continues to impress
boydjohnson (Fri, 12 May 2017 18:49:32 GMT):
There are 1800 open issues. https://github.com/RocketChat/Rocket.Chat
amundson (Fri, 12 May 2017 18:49:51 GMT):
```Application Developer's Guide
- Installing and Running Sawtooth
- Using Sawtooth with Docker
- Using Sawtooth on Ubuntu 16.04
- Understanding Transaction Family Concepts
- Address and Namespace Design
- ...
- Introduction to the Xo Transaction Family
- C++ Development
- Building and Submitting Transactions
- Installing the C++ SDK
- via git repository
- via Debian packages
- Transaction Processor Tutorial
- Go Development
- Installing the Go SDK
- via git repository
- via Debian packages
- Building and Submitting Transactions
- Transaction Processor Tutorial
- Java Development
- Installing the Java SDK
- via Maven
- via Debian packages
- via git repository
- Building and Submitting Transactions
- Transaction Processor Tutorial
- Javascript Development
- Installing the Javascript SDK
- via npm
- via Debian packages
- via git repository
- Building and Submitting Transactions
- Transaction Processor Tutorial
- Python 3 Development
- Installing the Python 3 SDK
- via PIP
- via Debian packages
- via git repository
- Building and Submitting Transactions
- Transaction Processor Tutorial
- Testing Transaction Processors
- Development without an SDK
- Building and Submitting Transactions (Python 3)
- Building and Submitting Transactions (Javascript)
```
amundson (Fri, 12 May 2017 18:50:12 GMT):
oh, pretty read
amundson (Fri, 12 May 2017 18:50:12 GMT):
oh, pretty red
amundson (Fri, 12 May 2017 18:50:28 GMT):
(funny typo)
amundson (Fri, 12 May 2017 18:51:04 GMT):
anyway, that's a work-in-progress version of the potential TOC for the app dev guide
amundson (Fri, 12 May 2017 18:51:21 GMT):
lots of good input from @zac
amundson (Fri, 12 May 2017 18:52:25 GMT):
the division by language is intended to prevent skipping around the document. lots of text on those sections would be the same, but language-specific examples, etc.
boydjohnson (Fri, 12 May 2017 18:53:28 GMT):
Since there is a 'Development without an SDK' section, do we want to have section about how, in general, an sdk is made?
amundson (Fri, 12 May 2017 18:53:52 GMT):
no, creating a new SDK isn't the goal of the app dev guide
zac (Fri, 12 May 2017 18:54:19 GMT):
Decent idea for Core Dev though
amundson (Fri, 12 May 2017 18:55:08 GMT):
that's essentially there as an advanced topic, as there are potentially languages we don't currently have SDKs for, and so knowing how to craft transactions are constructed is potentially useful
amundson (Fri, 12 May 2017 18:55:08 GMT):
that's essentially there as an advanced topic, as there are potentially languages we don't currently have SDKs for, and so knowing how to craft transactions is potentially useful
amundson (Fri, 12 May 2017 18:56:42 GMT):
The first section "Installing and Running Sawtooth" would contain a lot more content than the current environment setup section, as it would cover everything you need to know about using sawtooth in the given environment (start/stop validators, connect TPs, whatever)
amundson (Fri, 12 May 2017 18:57:24 GMT):
"Introduction to the Xo Transaction Family" would walk you through using the existing implementation(s), so you know how to use the CLI and such prior to working through the TP tutorial
amundson (Fri, 12 May 2017 18:57:38 GMT):
(feedback from a blog post)
Dan (Fri, 12 May 2017 20:14:23 GMT):
@amundson your ToC flew by while I was afk. Might have for others. could be you'll get other feedback by email to stl list.
adamludvik (Fri, 12 May 2017 21:57:54 GMT):
Working on a Go Client SDK using the tendermint library... @Dan @JonathanLevi
JonathanLevi (Fri, 12 May 2017 21:58:48 GMT):
Thank you Adam.
TomBarnes (Fri, 12 May 2017 23:09:26 GMT):
@amundson OK - thanks. Question involved non-repudiation - wanted to understand at what point submitted transactions were "inspect-able" - that would be the first point at which they might be repudiated. Looks like the only way to repudiate a transaction is to manipulate the contents of the current fork, either by attacking the fork data, or by creating an alternative fork.
SahilKapoor (Sun, 14 May 2017 09:03:36 GMT):
Hi
SahilKapoor (Sun, 14 May 2017 09:04:23 GMT):
Is there any date by when we can one working scenario for v0.8.. It would really help in building and understanding further use cases.
Dpkkmr (Sun, 14 May 2017 11:11:11 GMT):
Has joined the channel.
Dpkkmr (Sun, 14 May 2017 11:22:42 GMT):
Hi All
I'm new to sawtoothlake, I'm following Getting Started with Sawtooth, while I'm starting Validator using (sawtooth keygen --key-dir /home/ubuntu/sawtooth/keys/ validator) command, I am facing some problem. (Error: no such directory: /home/ubuntu/sawtooth/keys/
). It will be helpful if some one can help me resolve this error.
Dan (Sun, 14 May 2017 16:28:46 GMT):
Hi @Dpkkmr did you setup your environment with docker our one of the other options?
Dan (Sun, 14 May 2017 16:28:51 GMT):
http://intelledger.github.io/app_developers_guide/environment_setup.html
Dpkkmr (Sun, 14 May 2017 17:29:50 GMT):
Message Attachments
Dpkkmr (Sun, 14 May 2017 17:29:51 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=8Coezkpd9x4YuP6ZT) @Dan I have followed the instructions given in the link which you have mentioned.
Dan (Sun, 14 May 2017 18:07:37 GMT):
@toddojala are those sawtooth commands consistent with the docker install?
rbuysse (Sun, 14 May 2017 18:44:37 GMT):
Generating keys, creating a genesis block and validator startup are done automatically in the docker environment.
rbuysse (Sun, 14 May 2017 18:44:48 GMT):
people using the docker environment can skip ahead to http://intelledger.github.io/app_developers_guide/intro_to_sawtooth.html#multi-language-support-for-transaction-processors
rbuysse (Sun, 14 May 2017 18:45:55 GMT):
though I think some of the documentation there is a little out of date. I know that @toddojala has a PR up to fix it.
Dan (Sun, 14 May 2017 18:50:40 GMT):
Thanks @rbuysse. Does that clear things up some @Dpkkmr
rbuysse (Sun, 14 May 2017 18:51:12 GMT):
Looks like it was merged, the current correct instructions can be found here: http://intelledger.github.io/0.8/app_developers_guide/intro_to_sawtooth.html#multi-language-support-for-transaction-processors
tcsiwula (Mon, 15 May 2017 00:06:40 GMT):
Has joined the channel.
William_weicong (Mon, 15 May 2017 06:27:24 GMT):
Has joined the channel.
boydjohnson (Mon, 15 May 2017 13:49:02 GMT):
@amundson With the ToC for App Developers guide, I would imagine that some folks would want a docker image for their transaction processor, so making a transaction processor docker image and container is as simple as basing the file off of our SDK image and then adding transaction family specific dependencies.
amundson (Mon, 15 May 2017 13:49:59 GMT):
is that a section we add near the end of the TOC?
amundson (Mon, 15 May 2017 13:50:25 GMT):
or something we cover in "Using Sawtooth with Docker" section?
boydjohnson (Mon, 15 May 2017 14:17:33 GMT):
I would think either as part of "Using Sawtooth with Docker", or an optional section within each SDK section.
toddojala (Mon, 15 May 2017 14:46:18 GMT):
@boydjohnson I like that idea, as long as we don't get too deep into docker technical details, which can change - and which we don't want to have to support. But you make it sound really easy!
boydjohnson (Mon, 15 May 2017 14:55:48 GMT):
@rbuysse @adamludvik Are we publishing base image docker files to docker hub?
toddojala (Mon, 15 May 2017 14:56:06 GMT):
@Dan and @Dpkkmr I think Ryan nailed it. The latest iteration of the documentation has not gone to the release version of our docs yet, so you just need to add the /0.8 to the documentation URL. @rbuysse We should consider creating a new release, due to the doc updates...
jjason (Mon, 15 May 2017 15:40:31 GMT):
Anyone seen this error before when submitting PR?
```
integration_test_1 | [15:29:00.459 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
integration_test_1 | [15:29:00.460 INFO keys] Loading signing key: /etc/sawtooth/keys/validator.priv
integration_test_1 | [15:29:00.463 INFO cli] config [path]: config_dir = "/etc/sawtooth"
integration_test_1 | [15:29:00.464 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
integration_test_1 | [15:29:00.464 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
integration_test_1 | [15:29:00.464 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
integration_test_1 | [15:29:00.477 ERROR cli] Address already in use
integration_test_1 | Traceback (most recent call last):
integration_test_1 | File "/project/sawtooth-core/validator/sawtooth_validator/server/cli.py", line 214, in main
integration_test_1 | validator.start()
integration_test_1 | File "/project/sawtooth-core/validator/sawtooth_validator/server/core.py", line 481, in start
integration_test_1 | self._service.start()
integration_test_1 | File "/project/sawtooth-core/validator/sawtooth_validator/networking/interconnect.py", line 597, in start
integration_test_1 | raise err
integration_test_1 | File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
integration_test_1 | self.run()
integration_test_1 | File "/usr/lib/python3.5/threading.py", line 862, in run
integration_test_1 | self._target(*self._args, **self._kwargs)
integration_test_1 | File "/project/sawtooth-core/validator/sawtooth_validator/networking/interconnect.py", line 348, in setup
integration_test_1 | self._socket.bind(self._address)
integration_test_1 | File "zmq/backend/cython/socket.pyx", line 487, in zmq.backend.cython.socket.Socket.bind (zmq/backend/cython/socket.c:5156)
integration_test_1 | File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:7535)
integration_test_1 | zmq.error.ZMQError: Address already in use
integration_test_1 | Exception in thread InterconnectThread-5:
integration_test_1 | Traceback (most recent call last):
integration_test_1 | File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
integration_test_1 | self.run()
integration_test_1 | File "/usr/lib/python3.5/threading.py", line 862, in run
integration_test_1 | self._target(*self._args, **self._kwargs)
integration_test_1 | File "/project/sawtooth-core/validator/sawtooth_validator/networking/interconnect.py", line 348, in setup
integration_test_1 | self._socket.bind(self._address)
integration_test_1 | File "zmq/backend/cython/socket.pyx", line 487, in zmq.backend.cython.socket.Socket.bind (zmq/backend/cython/socket.c:5156)
integration_test_1 | File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:7535)
integration_test_1 | zmq.error.ZMQError: Address already in use
```
jsmitchell (Mon, 15 May 2017 15:41:23 GMT):
that's from jenkins @jjason ?
jjason (Mon, 15 May 2017 15:45:09 GMT):
Yep
jjason (Mon, 15 May 2017 15:45:42 GMT):
Trying to figure out if it something in my PR that I did or just really bad luck.
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-458/1/console
jsmitchell (Mon, 15 May 2017 15:47:57 GMT):
@adamludvik @boydjohnson are we reusing docker containers between test executions in the same PR test run?
boydjohnson (Mon, 15 May 2017 15:56:52 GMT):
The shutdown-smoke, which is skipped right now, does. But there isn't another test that reuses a docker container, that I know of.
amundson (Mon, 15 May 2017 16:34:29 GMT):
this is a good document for commit message format - https://chris.beams.io/posts/git-commit/
amundson (Mon, 15 May 2017 16:34:55 GMT):
as we start doing more tagging and release notes, that becomes more important
boydjohnson (Mon, 15 May 2017 16:37:35 GMT):
@jjason @jsmitchell The test error posted is from dynamic network test that starts up validators all in one container. I'm unsure what caused the error, though.
jjason (Mon, 15 May 2017 16:38:27 GMT):
@boydjohnson Thanks. I re-ran the build on that PR and it passed, so looks like another intermittent problem.
adamludvik (Mon, 15 May 2017 17:22:17 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=LZh6WF5MTf6JMusLr) @boydjohnson I am not sure what you mean by this.
adamludvik (Mon, 15 May 2017 17:27:59 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=L4ELxfZPSzbwizCWH) @jsmitchell Not intentionally. I believe the dynamic network test uses subprocess to create networks. If something goes wrong and a process doesn't exit cleanly, you could get that error when the next process starts that tries to use the same address.
boydjohnson (Mon, 15 May 2017 17:41:14 GMT):
@adamludvik @rbuysse Explained to me that we are pushing docker images, but not files. I had thought it might be nice to have a sawtooth-python-sdk (or any other) published docker file for app developers to base a docker file off of, if they wanted to do their development in docker, and didn't want to look around our repo. I'm definitely not pushing that we need to do this, or talk about it a bunch in our docs.
jsmitchell (Mon, 15 May 2017 18:17:14 GMT):
just saw that zmq address in use issue in another PR build
boydjohnson (Mon, 15 May 2017 19:54:48 GMT):
@jsmitchell I am working on namespace/(wildcarded)/(shortened) address read/write access in the context manager. Since I am touching that part of the code, can I do the hex character enforcement and (any other address enforcement) that I thought you were maybe working on? I would use regex, and length of the str for addresses. Do we want to enforce on context creation where the inputs and outputs are provided?
Dan (Mon, 15 May 2017 21:56:28 GMT):
@jsmitchell ^
Dera (Tue, 16 May 2017 04:43:25 GMT):
Has joined the channel.
KentLandholm (Tue, 16 May 2017 07:36:09 GMT):
Has joined the channel.
jsmitchell (Tue, 16 May 2017 13:48:22 GMT):
@boydjohnson sounds good!
boydjohnson (Tue, 16 May 2017 13:48:58 GMT):
I'll do so.
Dan (Tue, 16 May 2017 15:56:06 GMT):
random failure on a pr:
```validator_1 | INFO:sawtooth_processor_test.mock_validator:Received TpStateGetRequest(7) from b'bb2f09ffe94c4888'
validator_1 | ERROR
validator_1 | test_inc_a (test_tp_intkey.TestIntkey) ... INFO:sawtooth_processor_test.mock_validator:Sending TpProcessRequest(5) to b'bb2f09ffe94c4888'
ERROR:__main__:Test timed out.
ERROR:__main__:Command '['docker-compose', '-p', 'ea97d08b2f0bd18d6f1be1e006f9eb5f1d6da7b64a103cdb1ec2949dab641201', '-f', ```
Dan (Tue, 16 May 2017 15:56:39 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-468/2/
Dan (Tue, 16 May 2017 16:55:55 GMT):
~5 failures on a doc change
Dan (Tue, 16 May 2017 16:56:27 GMT):
Can I get some more eyes on https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-468/5/console
toddojala (Tue, 16 May 2017 16:58:40 GMT):
@Dan I started a new build.
agunde (Tue, 16 May 2017 16:58:48 GMT):
I think it needs to be rebased.
agunde (Tue, 16 May 2017 16:58:48 GMT):
I think it needs to be rebased. @Dan
Dan (Tue, 16 May 2017 17:08:56 GMT):
Thanks @agunde. I feel a little deja-vu.
Dan (Tue, 16 May 2017 17:20:54 GMT):
I fixed the glitch.
Dan (Tue, 16 May 2017 17:21:13 GMT):
Now I'm going to find a :burrito: before the :fire: starts.
boydjohnson (Tue, 16 May 2017 17:22:42 GMT):
@amundson @jsmitchell When a transaction processor tries to set to an invalid address does it make sense to deal with it differently than an authorization exception? I am thinking about sending back an invalid address status, but that would mean that each sdk would have to deal with that as a possible status.
Dan (Tue, 16 May 2017 17:30:29 GMT):
I was looking at our app dev guide... I don't see environment setup for proxy.
toddojala (Tue, 16 May 2017 17:31:55 GMT):
@Dan The App Dev guide is no longer going to use Vagrant, just Docker and direct installs, so there probably isn't a need for a proxy setup. (I could be wrong!)
Dan (Tue, 16 May 2017 17:32:28 GMT):
I think docker needs to reach out to get things.
Dan (Tue, 16 May 2017 17:33:02 GMT):
Please put yourself behind a proxy and see if it works. I'm still committed to finding a :burrito: but slowly failing on that mission.
kelly_ (Tue, 16 May 2017 17:36:00 GMT):
can confirm that proxy needs to be set behind intel firewalls
kelly_ (Tue, 16 May 2017 17:36:00 GMT):
can confirm that proxy needs to be set behind firewalls
kelly_ (Tue, 16 May 2017 17:36:31 GMT):
Message Attachments
SahilKapoor (Tue, 16 May 2017 17:38:43 GMT):
Hi,
kelly_ (Tue, 16 May 2017 17:39:53 GMT):
@dan - this may be relevant https://intelpedia.intel.com/Proxy_at_Intel#Docker
SahilKapoor (Tue, 16 May 2017 17:40:09 GMT):
I know all the developers are doing their best to port demo to v0.8. Can we have some timeline by when can they be ready? I helps a lot to pick up and learn from the examples.
kelly_ (Tue, 16 May 2017 17:47:43 GMT):
@SahilKapoor I believe @cianx will be uploading a simple supply chain based transaction family sometime this week
rjones (Tue, 16 May 2017 19:38:11 GMT):
Has left the channel.
Dan (Tue, 16 May 2017 20:26:49 GMT):
@adamludvik PEM was the format I couldn't think of earlier (for persisting keys)
adamludvik (Tue, 16 May 2017 20:54:21 GMT):
Thanks
jjason (Tue, 16 May 2017 20:58:58 GMT):
@Dan @toddojala I fought with docker behind proxy trying to do things on bare metal Linux. I had to do the following as it didn't seem to want to respect my HTTP proxy environent variables (`HTTP_PROXY`, etc.):
```
sudo mkdir /etc/systemd/system/docker.service.d
Create a file as root (aka sudo) named
/etc/systemd/system/docker.service.d/http-proxy.conf and add the following
lines to it:
[Service]
Environment="HTTP_PROXY=http://
jjason (Tue, 16 May 2017 20:58:58 GMT):
@Dan @toddojala I fought with docker behind proxy trying to do things on bare metal Linux. I had to do the following as it didn't seem to want to respect my HTTP proxy environent variables (`HTTP_PROXY`, etc.):
```
sudo mkdir /etc/systemd/system/docker.service.d
Create a file as root (aka sudo) named
/etc/systemd/system/docker.service.d/http-proxy.conf and add the following
lines to it:
[Service]
Environment="HTTP_PROXY=http://proxy-us.intel.com:911/"
Create a file as root (aka sudo) named
/etc/systemd/system/docker.service.d/https-proxy.conf and add the following
lines to it:
[Service]
Environment="HTTPS_PROXY=http://proxy-us.intel.com:912/"
Execute the following:
sudo systemctl daemon-reload
You can verify that the environment variables are loaded:
sudo systemctl show --property Environment docker
Now you can restart docker:
sudo systemctl restart docker
```
jjason (Tue, 16 May 2017 20:58:58 GMT):
@Dan @toddojala I fought with docker behind proxy trying to do things on bare metal Linux. I had to do the following as it didn't seem to want to respect my HTTP proxy environent variables (`HTTP_PROXY`, etc.):
```
sudo mkdir /etc/systemd/system/docker.service.d
Create a file as root (aka sudo) named
/etc/systemd/system/docker.service.d/http-proxy.conf and add the following
lines to it:
[Service]
Environment="HTTP_PROXY=http://
jjason (Tue, 16 May 2017 20:58:58 GMT):
@Dan @toddojala I fought with docker behind proxy trying to do things on bare metal Linux. I had to do the following as it didn't seem to want to respect my HTTP proxy environent variables (`HTTP_PROXY`, etc.):
```
sudo mkdir /etc/systemd/system/docker.service.d
Create a file as root (aka sudo) named
/etc/systemd/system/docker.service.d/http-proxy.conf and add the following
lines to it:
[Service]
Environment="HTTP_PROXY=http://
jjason (Tue, 16 May 2017 21:01:36 GMT):
In addition, I had problems with DNS. Docker seems to want to look for `/etc/resolv.conf`, which on my bare metal Linux box only had `nameserver 127.0.0.1`, which docker ignores. to fix that I ran `nmcli dev show | grep DNS` and looked for the IPv4 DNS servers and added them to `/etc/resolv.conf`. If not behind the proxy, you may still need to add DNS servers.
toddojala (Tue, 16 May 2017 21:06:16 GMT):
@jjason Thanks, great info. We'll discuss this and add something to help with proxy based on our discussion.
Dan (Tue, 16 May 2017 21:19:04 GMT):
@adamludvik you can try changing sawtooth signing to use hex for the privkey and then cross import/export for your go client. I put up a branch on my fork, but its basically just changing wif to hex in the keyword args for the two private encode/decode methods.
https://github.com/dcmiddle/sawtooth-core/tree/change-privkey-format
Dan (Tue, 16 May 2017 21:22:26 GMT):
I was considering putting up something with PEM but that introduces some messiness.
adamludvik (Tue, 16 May 2017 21:34:55 GMT):
yep
adamludvik (Tue, 16 May 2017 21:41:34 GMT):
I feel silly now. Thanks. I get the same pubkey, but different sigs. But I can debug this now.
adamludvik (Tue, 16 May 2017 21:43:03 GMT):
https://github.com/dcmiddle/sawtooth-core/commit/ea490b58bdca9962f121bf0ca4f3629956c1803e#diff-4c571163d2762287ec52434384613b91L137 should there be two `sig = ...` lines there?
adamludvik (Tue, 16 May 2017 21:43:22 GMT):
Oh wait... nm
adamludvik (Tue, 16 May 2017 22:31:38 GMT):
https://github.com/bitcoin-core/secp256k1/blob/master/src/secp256k1.c#L249
adamludvik (Tue, 16 May 2017 22:35:01 GMT):
This is what it does to R and S in compact encoding: https://github.com/bitcoin-core/secp256k1/blob/a8abae7e5f45c04a3b70cca215601ba903769586/src/scalar_low_impl.h#L60
FlyingTiger (Wed, 17 May 2017 13:21:15 GMT):
Hi, guys, I think the Journal diagram in http://intelledger.github.io/architecture/journal.html has a bug. It should be that the BlockPublisher broadcasts a published block to the validator network through the gossip protocol, not Consensus.BlockPublisher?
FlyingTiger (Wed, 17 May 2017 13:21:40 GMT):
What's your point? :)
Dan (Wed, 17 May 2017 13:34:51 GMT):
@adamludvik it looks fancier than it is. the relevant compact encoding stuff is here: https://github.com/bitcoin-core/secp256k1/blob/master/src/secp256k1.c#L269
That structuring he's doing in get32 is just formatting into the 32 byte field. Main thing is compact = [r[32],s[32]]
Dan (Wed, 17 May 2017 13:36:40 GMT):
(and sorry I didn't notice your message earlier. too many :rocket: windows open and they gobble the notifications as though I'm not afk).
boydjohnson (Wed, 17 May 2017 14:21:32 GMT):
Hey @FlyingTiger It is good to hear from you! I think you are right. That diagram shows an arrow from Consensus.BlockPublisher to Gossip but it is the journal.publisher.BlockPublisher that actually sends the block out through Gossip. @cianx, can you provide info on this?
cianx (Wed, 17 May 2017 15:46:49 GMT):
Thanks Boyd, @FlyingTiger you are correct the block is published from the block publisher to gossip. There is a channel for transactions from the consensus.BlockPublisher to gossip but that does not need to be shown on this diagram.
cianx (Wed, 17 May 2017 15:47:04 GMT):
We will get the docs updated shortly.
adamludvik (Wed, 17 May 2017 18:07:46 GMT):
@JonathanLevi I have a PR up for a Go Client SDK: https://github.com/hyperledger/sawtooth-core/pull/479 Would appreciate your feedback!
Dan (Thu, 18 May 2017 01:05:23 GMT):
someone have a .ssh/config for osx? What I use on linux and gitbash doesn't seem to fly on osx.
jsmitchell (Thu, 18 May 2017 01:05:43 GMT):
fly for what purpose?
Dan (Thu, 18 May 2017 01:25:31 GMT):
keychain
Dan (Thu, 18 May 2017 01:26:39 GMT):
`Bad configuration option: AddKeysToAgent`
Dan (Thu, 18 May 2017 01:26:59 GMT):
`Bad configuration option: UseKeychain`
Dan (Thu, 18 May 2017 01:27:18 GMT):
Gotta get my keys on a `blockchain`
jsmitchell (Thu, 18 May 2017 01:28:29 GMT):
UseKeychain appears to be a mac specific option
Dan (Thu, 18 May 2017 01:31:12 GMT):
I'm sure I got it off the interwebs a while ago. I remember it not working but been a while since I coded on this machine. Anyway if you have a .ssh config that caches your git creds lemme know.
jsmitchell (Thu, 18 May 2017 01:31:37 GMT):
i run ssh-add and ssh-agent when I reboot
jsmitchell (Thu, 18 May 2017 01:31:48 GMT):
my ssh config is empty
Dan (Thu, 18 May 2017 01:39:10 GMT):
does it prompt you everytime you pull/push?
jsmitchell (Thu, 18 May 2017 01:39:23 GMT):
no, that's what ssh-add does
jsmitchell (Thu, 18 May 2017 01:39:51 GMT):
caches the credentials in the agent
Dan (Thu, 18 May 2017 01:40:12 GMT):
yeah I thought I had that
Dan (Thu, 18 May 2017 01:40:25 GMT):
might have somethign to do with me `expoert`ing variables in my bashrc
Dan (Thu, 18 May 2017 01:40:39 GMT):
spilling is hard
FlyingTiger (Thu, 18 May 2017 01:51:36 GMT):
@boydjohnson @cinty Thanks for your answer. I opened a new issue for this bug, please take a look. https://jira.hyperledger.org/browse/STL-246
FlyingTiger (Thu, 18 May 2017 01:51:57 GMT):
@cianx
cianx (Thu, 18 May 2017 03:04:37 GMT):
@FlyingTiger thanks, are you going to the Beijing hackathon in june?
FlyingTiger (Thu, 18 May 2017 03:20:33 GMT):
@cianx No, I'm not. As I know, all of the last hackathons were organized for fabric. Is there any plan for STL? Look forward to it. :)
FlyingTiger (Thu, 18 May 2017 03:26:52 GMT):
I went to the shanghai hackathon in March. Out team developed a project "Get me a bike". Users of share bike company A could borrow a bike from company B.
cianx (Thu, 18 May 2017 03:34:58 GMT):
Cool, that sound like a fun project. I am planning to be at the bejing hackathon. I am not sure what projects we will be working on yet. Any ideas you have for STL?
vinoypm (Thu, 18 May 2017 06:22:19 GMT):
Has joined the channel.
vinoypm (Thu, 18 May 2017 06:23:43 GMT):
i am completely new to saw tooth give me some model projects pages
Dpkkmr (Thu, 18 May 2017 07:25:56 GMT):
[ ](https://chat.hyperledger.org/channel/sawtoothlake?msg=Kt6rX2s4h3vLz5Gq8) @toddojala
Thanks :)
FlyingTiger (Thu, 18 May 2017 08:20:38 GMT):
HI, guys. I couldn't found the definition of a transaction processor on http://intelledger.github.io/. So I want to ask the following questions. What are the features of a transaction processor? What's the relationship between a transaction process and a transaction family? Is there any document about a transaction processor?
FlyingTiger (Thu, 18 May 2017 08:39:01 GMT):
:) I found the document about the transaction processor, it is on http://intelledger.github.io/_autogen/sdk_TP_tutorial_python.html
kelly_ (Thu, 18 May 2017 13:53:26 GMT):
@vinoypm there are some Demos here - https://01.org/sawtooth/
SahilKapoor (Thu, 18 May 2017 14:06:46 GMT):
@kelly_ aren't these demos based on previous version
pschwarz (Thu, 18 May 2017 14:27:33 GMT):
@vinoypm You'll find some simple examples in https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples
toddojala (Thu, 18 May 2017 14:36:50 GMT):
@FlyingTiger Great. We have Transaction Processor tutorials out for both Python and JavaScript as of today (more coming). http://intelledger.github.io/_autogen/sdk_TP_tutorial_python.html
kelly_ (Thu, 18 May 2017 14:38:05 GMT):
Sawtooth is now an active project! Nice proposal Dan!
jsmitchell (Thu, 18 May 2017 14:38:16 GMT):
:woot:
kelly_ (Thu, 18 May 2017 14:39:45 GMT):
@SahilKapoor yes those are .7 demos. @cianx is pushing a supply chain transaction family for 0.8 today I believe
cbf (Thu, 18 May 2017 14:55:19 GMT):
Congrats to Dan and team on graduating to Active status!
jsmitchell (Thu, 18 May 2017 14:55:31 GMT):
Thanks @cbf!
Dan (Thu, 18 May 2017 14:58:24 GMT):
Thanks @cbf !
Dan (Thu, 18 May 2017 14:59:29 GMT):
@vinoypm there's examples here: https://www.hyperledger.org/projects/sawtooth
For traceability, financial transactions, and digital marketplace.
Dan (Thu, 18 May 2017 14:59:37 GMT):
Traceability = Supply Chain
zac (Thu, 18 May 2017 15:00:46 GMT):
@vinoypm The only major demos are 0.7 ones right now (though that supply chain demo _is dropping very soon). But for writing your own Transaction Processors there are a lot of examples in that SDK directory in multiple languages. In particular I would checkout the tic-tac-toe demo `xo`. It has a CLI you can use, so it demonstrates end-to-end functionality and demonstrates somewhat interesting behavior.
Dan (Thu, 18 May 2017 15:01:06 GMT):
@FlyingTiger I've been meaning to make some clarifications on Transaction proc vs. Family.
tldr: Transaction Family = {Transaction Processor {handler}, Client}
Dan (Thu, 18 May 2017 15:03:19 GMT):
Family is the concept that there is a small list of transaction types for any given domain or deployment. (Even though things like EVM would allow for a broad set of transactions). The transaction processor is the server side component that interprets the validity and state change for the transactions (or atomic batches of transactions).
In 0.8 one aspect of the TP is that it is its own process which is another important design feature of Transaction Processors and why we make references to that server side logic explicitly over Transaction Family's as the general concept.
Dan (Thu, 18 May 2017 15:03:43 GMT):
@amundson can now disagree with me. :D
Dan (Thu, 18 May 2017 15:07:05 GMT):
Hi @rjones I'm going to rename this channel again to #sawtooth. Can you please create a different #sawtoothlake so we catch anyone with old links for a few weeks?
rjones (Thu, 18 May 2017 15:07:05 GMT):
Has joined the channel.
amundson (Thu, 18 May 2017 16:58:28 GMT):
@Dan I agree with that, Family is the overriding concept (like intkey) which includes the transaction processor, client(s), state specification/design, etc.
amundson (Thu, 18 May 2017 16:59:30 GMT):
for intkey for example, we have multiple implementation of the transaction processors (one per SDK language), and one CLI client in python, integration tests which use it, state definition of the intkey namespace, etc.
rjones (Thu, 18 May 2017 17:00:58 GMT):
@dan that's a little fraught - why rename it? I mean, it's your channel, but we have hit a lot of bugs in rocket.chat renaming channels and I'm not sure I trust that every single one is fixed
rjones (Thu, 18 May 2017 17:04:45 GMT):
@dan but, the heart wants what the heart wants, and I guess it would be nice to have a test case for "renaming channels no longer makes them invite only". Rename away!
amundson (Thu, 18 May 2017 17:12:18 GMT):
@rjones - we could test that on #sawtoothlake-pr-review first
rjones (Thu, 18 May 2017 17:43:26 GMT):
@amundson if the bot breaks I'm going to cry :)
rjones (Thu, 18 May 2017 17:44:21 GMT):
@amundson renamed. We'll see soon enough if the webhook still works
cianx (Thu, 18 May 2017 17:46:28 GMT):
running `build_all -l python`
cianx (Thu, 18 May 2017 17:46:34 GMT):
```Unpacking libgcc-5-dev:amd64 (5.4.0-6ubuntu1~16.04.4) ...
dpkg: error processing archive /var/cache/apt/archives/libgcc-5-dev_5.4.0-6ubuntu1~16.04.4_amd64.deb (--unpack):
error creating directory './usr/lib/gcc/x86_64-linux-gnu/5/include': No space left on device
dpkg: unrecoverable fatal error, aborting:
unable to flush /var/lib/dpkg/updates/tmp.i after padding: No space left on device
E: Sub-process /usr/bin/dpkg returned an error code (2)
The command '/bin/sh -c echo "deb http://repo.sawtooth.me/ubuntu/ci xenial universe" >> /etc/apt/sources.list && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6B58B1AC10FB5F63 && apt-get update && apt-get install -y -q apt-transport-https build-essential ca-certificates curl git inetutils-ping libffi-dev libssl-dev pep8 python3-aiodns=1.1.1-1 python3-aiohttp=1.3.5-1 python3-async-timeout=1.2.0-1 python3-bitcoin=1.1.42-1 python3-cbor python3-cchardet=2.0a3-1 python3-chardet=2.3.0-1 python3-colorlog python3-cov-core python3-cryptography-vectors=1.7.2-1 python3-cryptography=1.7.2-1 python3-dev python3-grpcio-tools=1.1.3-1 python3-grpcio=1.1.3-1 python3-lmdb=0.92-1 python3-multidict=2.1.4-1 python3-nose2 python3-pip python3-protobuf=3.2.0-1 python3-pycares=2.1.1-1 python3-pytest-runner=2.6.2-1 python3-pytest=2.9.0-1 python3-pytz=2016.10-1 python3-requests python3-secp256k1=0.13.2-1 python3-setuptools-scm=1.15.0-1 python3-six=1.10.0-1 python3-toml python3-yaml python3-yarl=0.10.0-1 python3-zmq software-properties-common && apt-get clean && rm -rf /var/lib/apt/lists/* && pip3 install pylint==1.6.5 bandit coverage --upgrade' returned a non-zero code: 100```
pschwarz (Thu, 18 May 2017 17:53:26 GMT):
It looks like a space issue - probably due to docker images
pschwarz (Thu, 18 May 2017 17:54:59 GMT):
What does `docker container ls` show?
cianx (Thu, 18 May 2017 17:56:54 GMT):
```(SAWTOOTH)ubuntu-xenial /project/sawtooth-core
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES```
cianx (Thu, 18 May 2017 17:57:44 GMT):
```(SAWTOOTH)ubuntu-xenial /project/sawtooth-core
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sawtooth-rest_api latest 0236de0d889c 7 days ago 727MB
sawtooth-tp_config latest 0236de0d889c 7 days ago 727MB
sawtooth-tp_intkey_python latest 0236de0d889c 7 days ago 727MB
sawtooth-tp_supply_python latest 0236de0d889c 7 days ago 727MB
sawtooth-tp_validator_registry latest 0236de0d889c 7 days ago 727MB
sawtooth-tp_xo_python latest 0236de0d889c 7 days ago 727MB
sawtooth-validator latest 0236de0d889c 7 days ago 727MB
sawtooth-dev-python latest 0236de0d889c 7 days ago 727MB
sawtooth-tp_xo_javascript latest b4727eb8f09d 7 days ago 395MB
sawtooth-dev-javascript latest b4727eb8f09d 7 days ago 395MB
sawtooth-tp_intkey_javascript latest b4727eb8f09d 7 days ago 395MB
sawtooth-dev-java latest 337982edc744 7 days ago 653MB
sawtooth-tp_intkey_java latest 337982edc744 7 days ago 653MB
sawtooth-tp_intkey_go latest c247e3f0bc07 7 days ago 646MB
sawtooth-dev-go latest c247e3f0bc07 7 days ago 646MB
hyperledger/sawtooth-validator latest f3d80125caa8 8 days ago 166MB
hyperledger/sawtooth-tp_xo_python latest 78a47ef119e1 8 days ago 165MB
hyperledger/sawtooth-tp_intkey_python latest dcd6ed457e62 8 days ago 160MB
hyperledger/sawtooth-tp_config latest 46992f46fd02 8 days ago 161MB
hyperledger/sawtooth-rest_api latest 02534c8800c4 8 days ago 164MB
hyperledger/sawtooth-all latest 6858687624a8 8 days ago 173MB
sawtooth-dev-test latest c827bd63cfca 2 weeks ago 491MB
sawtooth-build-python latest 7662d78edee8 2 weeks ago 543MB
pschwarz (Thu, 18 May 2017 17:58:40 GMT):
How about `docker image ls`?
pschwarz (Thu, 18 May 2017 18:09:20 GMT):
nvm, I see what you did there
pschwarz (Thu, 18 May 2017 18:10:08 GMT):
You can delete `yarnpkg/node-yarn` from that list we don't use that
pschwarz (Thu, 18 May 2017 18:10:39 GMT):
You can probably delete all the one's named `
pschwarz (Thu, 18 May 2017 18:11:05 GMT):
Those two should free up 1.7GB
Dan (Thu, 18 May 2017 22:27:35 GMT):
@rjones you scared me with your :rocket: :ghost: stories.
Dan (Thu, 18 May 2017 22:28:01 GMT):
If you think its less breakage then please just create a #sawtooth channel and we will wend our conversations that way.
rjones (Thu, 18 May 2017 22:28:13 GMT):
had to look to see if you follow me on snapchat
rjones (Thu, 18 May 2017 22:28:45 GMT):
Room name changed to: sawtooth by rjones
rjones (Thu, 18 May 2017 22:28:51 GMT):
nah
Dan (Thu, 18 May 2017 22:34:51 GMT):
omg he just threw caution to the wind!
rjones (Thu, 18 May 2017 22:47:26 GMT):
didn't realize you renamed the project. why?
Dan (Thu, 18 May 2017 22:48:26 GMT):
Official rules are to put HL in front of each name. Saying "Hyperledger Sawtooth Lake" was too long.
Dan (Thu, 18 May 2017 22:49:10 GMT):
Even without HL, it was kind of a long name.
rjones (Thu, 18 May 2017 22:49:14 GMT):
but Sawtooth Lake is a place I can go
Dan (Thu, 18 May 2017 22:49:30 GMT):
Today's blockchain kids demand syllable minimization.
rjones (Thu, 18 May 2017 22:49:37 GMT):
HYPSTL
Dan (Thu, 18 May 2017 22:50:08 GMT):
Oh that would have been good too. "Hey you running HYPSTL?" "You know it!"
Dan (Thu, 18 May 2017 22:52:10 GMT):
The fact it's a real lake will be part of the backstory only the most devoted will know.
rjones (Thu, 18 May 2017 22:53:44 GMT):
glad I only got those tattoos lined and not filled :(
Dan (Fri, 19 May 2017 00:22:55 GMT):
Lol
FlyingTiger (Fri, 19 May 2017 02:35:40 GMT):
@Dan @amundson Thanks for your detailed explanation. Would you add the relationship between TP and TF to the document? I think the new one could understand TP better if adding it.
SahilKapoor (Fri, 19 May 2017 07:51:04 GMT):
@cianx Were you able to push the sample or still facing some issues? If you were then for sure it will be really helpful to lot of people.
cianx (Fri, 19 May 2017 12:54:58 GMT):
@SahilKapoor I am working on getting the unit tests to pass. Once those are running I will post the PR.
SahilKapoor (Fri, 19 May 2017 13:15:43 GMT):
@cianx Great!
jsmitchell (Fri, 19 May 2017 13:48:52 GMT):
I've merged a PR which should hopefully eliminate most (all?) of the remaining intermittent test failure we've been seeing. If you have a PR that has failed testing due to `AssertionError: http://0.0.0.0:8083/blocks is not available within 5 attempts`, you should rebase and push.
jsmitchell (Fri, 19 May 2017 13:50:22 GMT):
@pschwarz ^ At first glance, I think you're the only one with a test failure for this reason at the moment.
greg2git (Fri, 19 May 2017 14:38:13 GMT):
Has joined the channel.
Dan (Fri, 19 May 2017 15:13:50 GMT):
@jsmitchell yay!
Dan (Fri, 19 May 2017 15:18:00 GMT):
Curious on namespace preferences... when I'm reading unfamiliar code it helps to see the namespace where e.g. a class comes from. Import wild cards that hide that make the code more concise but lose that immediate traceability. Not language specific thing (adam was explaining go imports to me just now for example).
kelly_ (Fri, 19 May 2017 18:29:03 GMT):
hey @SahilKapoor what sort of projects are you working on? are you an independent developer or working for a company?
SahilKapoor (Fri, 19 May 2017 18:29:40 GMT):
@kelly_ Independent Developer
kelly_ (Fri, 19 May 2017 18:29:58 GMT):
excellent, any specific use cases you are interested in?
SahilKapoor (Fri, 19 May 2017 18:31:07 GMT):
I think supply chain example can be taken forward and many use case can come out of it.
SahilKapoor (Fri, 19 May 2017 18:32:52 GMT):
And digital asset market place which is common but can be of great use in developing countries..
SahilKapoor (Fri, 19 May 2017 18:54:00 GMT):
Just one thing I think would be helpful is managing private data of the asset. For example. land registry asset given to bank for loan. Now that bank want to use it for leverage but want to hide owner's name or some specific details. So transaction is not private but some data of the asset is public to only few kind of participant .
SahilKapoor (Fri, 19 May 2017 18:54:12 GMT):
Dont know how that can be implemented using sawtooth
rjones (Fri, 19 May 2017 19:00:46 GMT):
Has left the channel.
kelly_ (Fri, 19 May 2017 19:29:35 GMT):
hey Sahil, those are great use cases
kelly_ (Fri, 19 May 2017 19:30:00 GMT):
a very simple way would be to hash the private data before putting it on the blockchain
kelly_ (Fri, 19 May 2017 19:30:19 GMT):
that way the owner could prove ownership, but it wouldn't be possible to know just by looking at the blockchain
SahilKapoor (Fri, 19 May 2017 20:38:26 GMT):
@kelly_ But what if regulator want to see that data?
Dan (Fri, 19 May 2017 20:40:52 GMT):
instead of hashing it could be encrypted with the regulator's public key.
Dan (Fri, 19 May 2017 20:42:00 GMT):
If the regulation policy is that both the user and the regulator must agree then encrypt with both keys.
Dan (Fri, 19 May 2017 20:42:00 GMT):
of if the regulation policy is that both the user and the regulator must agree then encrypt with both keys.
Dan (Fri, 19 May 2017 20:42:51 GMT):
btw, we're in the process of facilitating meetups in a few cities. If you don't mind me asking what city are you in?
SahilKapoor (Fri, 19 May 2017 20:48:02 GMT):
Delhi, India
Dan (Fri, 19 May 2017 20:50:05 GMT):
Cool. I'll put that on the list to investigate.
Dan (Fri, 19 May 2017 20:51:13 GMT):
wow isn't it like 2:20 am for you right now?
cianx (Fri, 19 May 2017 21:48:19 GMT):
What does this mean?
cianx (Fri, 19 May 2017 21:48:24 GMT):
```(SAWTOOTH)ubuntu-xenial /project/sawtooth-core
$ run_docker_test sdk/examples/intkey_python/tests/tp-intkey-python.yaml -s validator --clean
/project/sawtooth-core
INFO:__main__:Shutting down with: ['docker-compose', '-p', 'latest', '-f', 'sdk/examples/intkey_python/tests/tp-intkey-python.yaml', 'down', '--remove-orphans']
Removing network latest_default
WARNING: Network latest_default not found.
```
cianx (Fri, 19 May 2017 21:48:48 GMT):
I just rebased of the latest master and did a `build_all -l python`
drozd (Fri, 19 May 2017 23:42:45 GMT):
@cianx I think `--clean` is only needed if the last run of `run_docker_test` failed to shut down properly, so that warning just means there wasn't anything to clean
gtewallace (Sat, 20 May 2017 12:26:11 GMT):
Has joined the channel.
SahilKapoor (Sat, 20 May 2017 19:41:51 GMT):
Hi @cianx the supplychain example, how can we use it? It is not merged in master and is there any documentation around it?
SahilKapoor (Sat, 20 May 2017 19:41:51 GMT):
Hi @cianx
SahilKapoor (Sat, 20 May 2017 19:41:51 GMT):
Hi @cianx the supplychain example , how can we use it? It is not merged in master and is there any documentation around it?
SahilKapoor (Sat, 20 May 2017 19:41:51 GMT):
Hi @cianx the supplychain example , how can we use it? It is not merged in master and is there any documentation around it?
SahilKapoor (Sat, 20 May 2017 19:42:28 GMT):
I guess you were facing some issues with the example, are those resolved now?
boydjohnson (Sat, 20 May 2017 21:58:41 GMT):
Hey @jsmitchell, I spread some bad information, specifically to you. I had said 'depends_on' in docker-compose yaml files was necessary for one container to use another container's service name as a host name. This is false. Every container that is made by the 'docker-compose up' command can reach any other container listed in the same yaml file by it's service name. From the docs https://docs.docker.com/compose/networking/: "Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name."
jsmitchell (Sat, 20 May 2017 22:11:07 GMT):
_cries_
jsmitchell (Sat, 20 May 2017 22:11:33 GMT):
If you can't believe @boydjohnson, who _can_ you believe
davidscherban (Sat, 20 May 2017 22:34:25 GMT):
Has joined the channel.
anuragsrivastava (Sun, 21 May 2017 10:30:46 GMT):
Has joined the channel.
anuragsrivastava (Sun, 21 May 2017 10:33:39 GMT):
Hi! I am trying to wrap my head around the architecture of sawtooth. Got stuck in Journal. What is the difference between a Block and a Batch and why are they processed differently?
anuragsrivastava (Sun, 21 May 2017 10:46:25 GMT):
I understand that a set of ordered transactions form a batch
anuragsrivastava (Sun, 21 May 2017 11:54:10 GMT):
is a block collection of batches?
FlyingTiger (Sun, 21 May 2017 12:53:32 GMT):
@ambatigaan Transactions are always wrapped inside of a batch. All transactions within a batch are committed to state together or not at all.
ambatigaan (Sun, 21 May 2017 12:53:32 GMT):
Has joined the channel.
FlyingTiger (Sun, 21 May 2017 12:57:01 GMT):
A block is a collection of transactions, and contains a link to a previous block. The data in a block cannot be altered.
FlyingTiger (Sun, 21 May 2017 13:31:10 GMT):
Sorry, a block should be a collection of batches in the latest new version of STL.
anuragsrivastava (Sun, 21 May 2017 13:36:17 GMT):
@FlyingTiger thanks for validating it. :)
FlyingTiger (Sun, 21 May 2017 13:50:00 GMT):
Could anybody help me? When I ran "./bin/run_tests -x java_sdk -x javascript_sdk", I got the following error:
FlyingTiger (Sun, 21 May 2017 13:50:27 GMT):
[---Running signing tests---]
/root/projects/sawtooth-core
Traceback (most recent call last):
File "/root/projects/sawtooth-core/bin/run_docker_test", line 357, in
FlyingTiger (Sun, 21 May 2017 13:50:29 GMT):
What's wrong with it?
cianx (Sun, 21 May 2017 18:51:45 GMT):
@SahilKapoor The initial transaction processor PR is up: https://github.com/hyperledger/sawtooth-core/pull/493
boydjohnson (Sun, 21 May 2017 21:45:44 GMT):
@FlyingTiger I would guess, but don't know, that the ./bin/run_tests command was run in an environment that didn't have python 3.5 installed.
FlyingTiger (Mon, 22 May 2017 02:19:59 GMT):
@boydjohnson ~/projects/sawtooth-core# python --version
Python 3.4.3
FlyingTiger (Mon, 22 May 2017 02:19:59 GMT):
Python 3.4.3 is not enough, Python 3.5 is needed?
Robtg4 (Mon, 22 May 2017 06:34:18 GMT):
Has joined the channel.
Robtg4 (Mon, 22 May 2017 06:34:27 GMT):
Any tutorials around this?
FlyingTiger (Mon, 22 May 2017 08:06:34 GMT):
@Robtg4 Around what? STL or STL Environment Setup?
FlyingTiger (Mon, 22 May 2017 08:07:55 GMT):
http://intelledger.github.io/core_developers_guide/environment_setup.html
JonathanLevi (Mon, 22 May 2017 10:49:24 GMT):
Good morning. Just waking up after quite an intense hacking sessions.
JonathanLevi (Mon, 22 May 2017 10:49:24 GMT):
Good morning. Just waking up after quite an intense overnight hacking session.
JonathanLevi (Mon, 22 May 2017 10:49:41 GMT):
*We won 2 ( ! ) awards yesterday* with our *Sawtooth* based secure/guaranteed payment/audit-able, privacy preserving Chess game that uses Sovrin identifiers and Quorum for guaranteed funds distribution.
JonathanLevi (Mon, 22 May 2017 10:50:32 GMT):
Didn't want to build it on Fabric, as I wanted to force myself to sit down and get a working end-to-end flaw of SL.
JonathanLevi (Mon, 22 May 2017 10:50:57 GMT):
You guys have quite an awesome architecture, really.
FlyingTiger (Mon, 22 May 2017 11:37:41 GMT):
@boydjohnson Thanks, you are right. I installed and used python 3.5, and "./bin/run_tests -x java_sdk -x javascript_sdk" is passed.
jsmitchell (Mon, 22 May 2017 11:56:45 GMT):
@JonathanLevi wow, thanks! Congratulations on your awards!
SahilKapoor (Mon, 22 May 2017 12:53:00 GMT):
Hi @cianx
SahilKapoor (Mon, 22 May 2017 12:53:03 GMT):
the supplychain example, how can we use it? It is not merged in master and is there any documentation around it?
Dan (Mon, 22 May 2017 13:08:45 GMT):
Hi @SahilKapoor it is still in review. You can use that branch though to get familiar.
SahilKapoor (Mon, 22 May 2017 13:09:19 GMT):
Yes will do..
boydjohnson (Mon, 22 May 2017 13:14:27 GMT):
@FlyingTiger Yes! I'm glad you got python 3.5 installed. Note that the build_all script will build docker images by default that can have the source code mounted inside, but if you want to test out the debian packages, which is what is being run in the build server, you would first run 'build_all [any exclusion or limiting] debs' and then run_tests. To go back to the mounted version you would have to run 'build_all' again. Since build_all debs takes so long it is recommended that during development only the mounted files are used for python development.
boydjohnson (Mon, 22 May 2017 13:22:57 GMT):
Has anyone else noticed differences on the dynamic-network.yaml test between mounted and debs? It passes for both, but with mounted each validator only has 1 block at the end, where for debs each validator has ~18 blocks. To see the difference (if any) run `build_all -l python debs` (on current master) and then `run_docker_test integration/sawtooth_integration/docker/dynamic-network.yaml` it should produce many blocks and pass. Run `build_all -l python` and then `run_docker_test integration/sawtooth_integration/docker/dynamic-network.yaml` and only 1 block is produced.
adamludvik (Mon, 22 May 2017 14:04:49 GMT):
What if you do `build_all -l python installed`?
boydjohnson (Mon, 22 May 2017 14:06:49 GMT):
Haven't tried that. Will try soon.
boydjohnson (Mon, 22 May 2017 14:11:46 GMT):
Hey @adamludvik What is the difference between 'debs' and 'installed'?
rbuysse (Mon, 22 May 2017 14:12:37 GMT):
debs just builds the debs
adamludvik (Mon, 22 May 2017 14:12:51 GMT):
`installed` builds debs for all the python components and then creates docker images with those debs. ^
boydjohnson (Mon, 22 May 2017 14:14:30 GMT):
Oh, thanks. So running build_all debs shouldn't affect the test?
rbuysse (Mon, 22 May 2017 14:15:25 GMT):
running build_all debs should not have any affect on the docker images used for tests
boydjohnson (Mon, 22 May 2017 14:16:12 GMT):
Thanks. I will try to get a more rational test difference. Perhaps there is a intermittent difference.
toddojala (Mon, 22 May 2017 14:20:02 GMT):
@Robtg4 Keep in mind that if you go the "latest release" version of the docs, you'll get the very latest, but that might be out of sync with the stable release version that you get with the docker images and .deb packages.
boydjohnson (Mon, 22 May 2017 14:49:47 GMT):
Ah, so just realized something. @adamludvik @rbuysse That dynamic-network.yaml test runs all the processes inside one container using subprocess. The container is based on the sawtooth-dev-python image. So that would run all the mounted code, right?
adamludvik (Mon, 22 May 2017 14:50:16 GMT):
yes
boydjohnson (Mon, 22 May 2017 14:51:40 GMT):
Looking on build.sawtooth.me, I can't seem to find a test run where the dynamic-network test produces only 1 block, but I get that regularly in local runs on master.
drozd (Mon, 22 May 2017 14:56:46 GMT):
@boydjohnson I've seen that error too. Currently that result passes because the test only verifies consensus, not nontrivial consensus (which is clearly an oversight)
boydjohnson (Mon, 22 May 2017 14:57:32 GMT):
Thanks for confirming, @drozd
jsmitchell (Mon, 22 May 2017 16:29:54 GMT):
@JonathanLevi Is your code available to take a look at? I'm really interested in seeing how you did the Sovrin integration!
pschwarz (Mon, 22 May 2017 16:56:00 GMT):
@JonathanLevi great to meet you this weekend at the hackathon, and awesome that you guys won those awards. It was a very cool solution, and definitely love to see how you put the chess transaction processor together, if it's available.
mwagner (Mon, 22 May 2017 19:48:04 GMT):
Has joined the channel.
cianx (Mon, 22 May 2017 20:14:58 GMT):
@FlyingTiger I have posted a PR to update the Journal Docs (https://github.com/hyperledger/sawtooth-core/pull/508)
FlyingTiger (Tue, 23 May 2017 11:02:36 GMT):
I got some warnings when I ran the "intkey load -f batches.intkey" command
FlyingTiger (Tue, 23 May 2017 11:02:54 GMT):
[18:54:58 WARNING load] (401): Unauthorized
[18:54:58 WARNING load] (401): Unauthorized
FlyingTiger (Tue, 23 May 2017 11:03:19 GMT):
What's the problem?
FlyingTiger (Tue, 23 May 2017 11:19:19 GMT):
I also got an error when I ran the "./bin/sawtooth config proposal create..." command.
FlyingTiger (Tue, 23 May 2017 11:19:31 GMT):
Error: (401): Unauthorized
FlyingTiger (Tue, 23 May 2017 11:19:56 GMT):
What's wrong with it?
Styxt (Tue, 23 May 2017 11:27:19 GMT):
Has left the channel.
jsmitchell (Tue, 23 May 2017 12:51:57 GMT):
What url are you giving to those processes when you start them?
jsmitchell (Tue, 23 May 2017 12:52:47 GMT):
It needs to be the url of a running instance of rest_api which is connected to the validator
SahilKapoor (Tue, 23 May 2017 13:38:06 GMT):
Can something like https://github.com/hyperledger/composer/issues/1043 be implemented by sawtooth
SahilKapoor (Tue, 23 May 2017 13:38:06 GMT):
@jsmitchell Can something like https://github.com/hyperledger/composer/issues/1043 be implemented by sawtooth
SahilKapoor (Tue, 23 May 2017 13:38:06 GMT):
@jsmitchell Can something like https://github.com/hyperledger/composer/issues/1043 be implemented by sawtooth
SahilKapoor (Tue, 23 May 2017 13:38:06 GMT):
@jsmitchell Can something like https://github.com/hyperledger/composer/issues/1043 be implemented with sawtooth
pschwarz (Tue, 23 May 2017 14:23:01 GMT):
@FlyingTiger There are some setup things that you need to do to enable the proposal/voting mechanism. Namely, you need to be sure that you started did the following steps:
```
$ sawtooth config genesis
Generated config-genesis.batch
$ sawtooth admin genesis config-genesis.batch
Processing config-genesis.batch...
Generating /home/ubuntu/sawtooth/data/genesis.batch
$ validator -vv --public-uri
pschwarz (Tue, 23 May 2017 14:24:27 GMT):
You can provide more configuration settings to the `sawtooth config genesis` command, that will go into the genesis block. Minimally this puts one setting: your public key as an authorized configuration proposer/voter
toddojala (Tue, 23 May 2017 14:39:31 GMT):
@pschwarz Interesting. I think we may need to update the docs to capture this latest flow with config and genesis.
toddojala (Tue, 23 May 2017 14:39:42 GMT):
I'll get that in asap.
jsmitchell (Tue, 23 May 2017 14:40:53 GMT):
@pschwarz I suspect that error that @FlyingTiger got was because he ran proposal create in `interactive` mode, rather than with an output file
pschwarz (Tue, 23 May 2017 14:41:12 GMT):
Ah, that is also possibly true
jsmitchell (Tue, 23 May 2017 14:41:14 GMT):
and similar to his intkey error, he has an issue with rest api/validator
pschwarz (Tue, 23 May 2017 14:41:40 GMT):
Was it behind a proxy?
Dan (Tue, 23 May 2017 17:24:56 GMT):
@Tom Barnes continuing from email I just sent. @dhuseby mentioned that the CII dynamic analysis requirement is for c++ (memory unsafe) and the other related requirement for fuzzing/dyn analysis is to do before release. We just need to document that is part of the release plan.
Please also look into AFL for the fuzzing tool and see if there's a python adapter we can use. Meanwhile though I think that gets us to 100%. If you can update that questionnaire today then that helps with timing of some announcements that HL would like to make.
jsmitchell (Tue, 23 May 2017 17:51:15 GMT):
@FlyingTiger are you still around?
jsmitchell (Tue, 23 May 2017 17:56:07 GMT):
@FlyingTiger https://github.com/hyperledger/sawtooth-core/pull/511 is approved. I don't know if anyone has gone over the process for PRs with you, but basically you set yourself up as the 'Assignee' and you add a handful of reviewers. Once you have at least two approved reviews (and zero 'request changes' reviews), you can go ahead and 'rebase and merge' the PR into master via the github interface.
jsmitchell (Tue, 23 May 2017 17:57:04 GMT):
If you don't have permission to do that yet, you can assign someone else (probably one of the reviewers) as an alternate Assignee and ask them to do it.
SahilKapoor (Tue, 23 May 2017 18:47:37 GMT):
@cianx Is there any documentation for implementing supply chain sample
cianx (Tue, 23 May 2017 20:17:24 GMT):
@SahilKapoor The transaction processor spec will be submitted to a Pull request in a day or two. Next week we will have a command line interface and some example usages of the cli documented. What are you trying to accomplish with the SupplyChain example.
cianx (Tue, 23 May 2017 20:17:24 GMT):
@SahilKapoor The transaction processor spec will be submitted to a Pull request in a day or two. Next week we will have a command line interface and some example usages of the cli documented. What are you trying to accomplish with the SupplyChain example?
FlyingTiger (Wed, 24 May 2017 02:40:19 GMT):
Hi, guys, I encountered a problem again, when I ran the "validator -vv --public-uri tcp://localhost:8800", and stopped it by pressing CTRL -c
FlyingTiger (Wed, 24 May 2017 02:41:40 GMT):
Then I reran the "validator -vv --public-uri tcp://localhost:8800" command, I got the following error:
FlyingTiger (Wed, 24 May 2017 02:41:46 GMT):
[10:31:38.362 DEBUG selector_events] Using selector: ZMQSelector
Exception in thread InterconnectThread-5:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/root/projects/sawtooth-core/validator/sawtooth_validator/networking/interconnect.py", line 348, in setup
self._socket.bind(self._address)
File "zmq/backend/cython/socket.pyx", line 495, in zmq.backend.cython.socket.Socket.bind (zmq/backend/cython/socket.c:5653)
File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:10014)
zmq.error.ZMQError: Address already in us
FlyingTiger (Wed, 24 May 2017 02:42:00 GMT):
Please help me, thanks
jsmitchell (Wed, 24 May 2017 02:44:29 GMT):
@FlyingTiger make sure all the processes are stopped and wait a minute or two
jsmitchell (Wed, 24 May 2017 02:44:34 GMT):
http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html
jsmitchell (Wed, 24 May 2017 02:44:48 GMT):
its TCP TIME_WAIT
jsmitchell (Wed, 24 May 2017 02:45:17 GMT):
It's a pain, but not sure how to improve it
FlyingTiger (Wed, 24 May 2017 02:46:19 GMT):
@jsmitchell I have waited for almost one hour.
jsmitchell (Wed, 24 May 2017 02:46:35 GMT):
You must have processes still running
FlyingTiger (Wed, 24 May 2017 02:47:53 GMT):
Oh, yes, "tp_config" process is running
FlyingTiger (Wed, 24 May 2017 02:47:58 GMT):
I stopped it
jsmitchell (Wed, 24 May 2017 02:48:47 GMT):
Yep, wait a couple of minutes now, and it should be ok
FlyingTiger (Wed, 24 May 2017 02:50:24 GMT):
So we should stop all the processes, then restart validator? But I didn't found this information on the documents.
FlyingTiger (Wed, 24 May 2017 02:51:06 GMT):
@jsmitchell thanks very much! :)
jsmitchell (Wed, 24 May 2017 02:51:38 GMT):
Yeah, it's not the ideal situation. We may be able to fix it with changes to how connections are closed.
FlyingTiger (Wed, 24 May 2017 06:08:16 GMT):
@pschwarz I followed your instructions, and the "intkey load -f batches.intkey" command is passed.
FlyingTiger (Wed, 24 May 2017 06:09:12 GMT):
The following messages appear in the logging output of the validator:
[11:16:39.471 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1002974 bytes
[11:16:39.876 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'726526ed37914010'
[11:16:39.901 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 965335 bytes
[11:16:39.925 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'726526ed37914010'
FlyingTiger (Wed, 24 May 2017 07:33:41 GMT):
Another problem, when I ran the "./bin/sawtooth batch list" command, the output is Error: (503): Service Unavailable
FlyingTiger (Wed, 24 May 2017 07:34:58 GMT):
The validator outputs the following information
FlyingTiger (Wed, 24 May 2017 07:35:20 GMT):
[15:20:56.940 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_LIST_REQUEST message: 73 bytes
[15:20:56.941 DEBUG client_handlers] Unable to get chain head from block store
[15:20:56.942 DEBUG interconnect] ServerThread sending CLIENT_BATCH_LIST_RESPONSE to b'e757ceafa29948e0'
FlyingTiger (Wed, 24 May 2017 07:41:31 GMT):
Why unable to get chain head from block store? What do I need to do?
FlyingTiger (Wed, 24 May 2017 08:34:02 GMT):
The problem is that the validator has no genesis block. I recreated the genesis block, and restarted the validator. It's ok.
FlyingTiger (Wed, 24 May 2017 08:44:43 GMT):
@pschwarz I followed your instructions, and the "intkey load -f batches.intkey" command is passed. But has another problem that the validator has no genesis block. I don't know why? the validator outputs the following information:
FlyingTiger (Wed, 24 May 2017 08:57:49 GMT):
[16:37:42.171 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
[16:37:42.171 INFO keys] Loading signing key: /etc/sawtooth/keys/validator.priv
[16:37:42.172 INFO cli] config [path]: config_dir = "/etc/sawtooth"
[16:37:42.173 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
[16:37:42.173 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
[16:37:42.173 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
[16:37:42.173 DEBUG core] database file is /var/lib/sawtooth/merkle-00.lmdb
[16:37:42.174 DEBUG core] state delta store file is /var/lib/sawtooth/state-deltas-00.lmdb
[16:37:42.175 DEBUG core] block store file is /var/lib/sawtooth/block-00.lmdb
[16:37:42.178 DEBUG selector_events] Using selector: ZMQSelector
[16:37:42.182 DEBUG dispatch] Added send_message function for connection ServerThread
[16:37:42.182 DEBUG genesis] genesis_batch_file: /var/lib/sawtooth/genesis.batch
[16:37:42.183 DEBUG genesis] block_chain_id: not yet specified
[16:37:42.183 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 110 bytes
[16:37:42.183 INFO genesis] Producing genesis block from /var/lib/sawtooth/genesis.batch
[16:37:42.184 INFO processor_handlers] registered transaction processor: connection_id=2e62a02f37f5c8d383f867745ebef906137f355e3e53d7e664c4e00c5e1dc198b05d530a2d8d03e6b3f3115b1ba5d0312be7ce725d0719d92fcc9ec6827ee8af, family=intkey, version=1.0, encoding=application/cbor, namespaces=
FlyingTiger (Wed, 24 May 2017 09:02:29 GMT):
@pschwarz I solved the problem, should start the config family transaction processor, run the "$ tp_config tcp://localhost:40000"
pschwarz (Wed, 24 May 2017 14:15:05 GMT):
@FlyingTiger Great, glad you figured it out. There are a number of moving parts needed there :)
pd93 (Wed, 24 May 2017 15:10:47 GMT):
Has joined the channel.
haridhakshini (Wed, 24 May 2017 16:23:01 GMT):
Hi all! :) I am Haridhakshini and I am a Hyperledger intern for Sawtooth Lake project.
I am really excited to be a part of this community and looking forward to contribute the best I can! :)
jsmitchell (Wed, 24 May 2017 16:23:20 GMT):
excellent! Welcome @haridhakshini !!
mfford (Wed, 24 May 2017 16:25:34 GMT):
#channel The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, May 25th from 10-11am CDT. This will be the first in a series of technical forums featuring presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Call-in: 401-283-2000 4807579435#
Conference Link: https://www.uberconference.com/hyperledger-community
International Access Numbers: https://www.uberconference.com/international
Agenda:
1. Introductions-Mark Ford
2. Writing Transaction Family Specifications – Todd Ojala
3. One specification, many implementations (SDK/Intkey)-Adam Ludvik
4. Open Forum
mfford (Wed, 24 May 2017 16:25:34 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, May 25th from 10-11am CDT. This will be the first in a series of technical forums featuring presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Call-in: 401-283-2000 4807579435#
Conference Link: https://www.uberconference.com/hyperledger-community
International Access Numbers: https://www.uberconference.com/international
Agenda:
1. Introductions-Mark Ford
2. Writing Transaction Family Specifications – Todd Ojala
3. One specification, many implementations (SDK/Intkey)-Adam Ludvik
4. Open Forum
PriteshPatel (Wed, 24 May 2017 19:39:11 GMT):
Has joined the channel.
kenmazsyma (Wed, 24 May 2017 23:21:23 GMT):
Has joined the channel.
kenmazsyma (Wed, 24 May 2017 23:39:27 GMT):
Has left the channel.
mpk (Thu, 25 May 2017 00:14:48 GMT):
Has joined the channel.
mpk (Thu, 25 May 2017 00:17:56 GMT):
Hello. I was able to setup Sawtooth Lake, create a transaction processor and send transaction from a node.js web client. I am also able to read the state back rom node.js. But the data returned is all encrypted. How to do I decrypt it back from my client node.js program. I am getting the data as a json in response to rest api call : GET /state/{address}
FlyingTiger (Thu, 25 May 2017 07:36:03 GMT):
When I ran ‘./bin/run_lint’, The command produced many outputs,
************* Module sawtooth_cli.admin_command.config
R: 25, 4: Unnecessary "else" after "return" (no-else-return)
R: 62, 4: Unnecessary "else" after "return" (no-else-return)
......
We need to remove them, do we?
FlyingTiger (Thu, 25 May 2017 11:22:55 GMT):
When I ran './bin/run_lint', I got an error:
FlyingTiger (Thu, 25 May 2017 11:23:23 GMT):
File "/usr/local/lib/python3.5/dist-packages/astroid/decorators.py", line 85, in wrapped
res = next(generator)
File "/usr/local/lib/python3.5/dist-packages/astroid/inference.py", line 409, in _filter_operation_errors
for result in infer_callable(self, context):
File "/usr/local/lib/python3.5/dist-packages/astroid/inference.py", line 709, in _infer_augassign
for lhs in self.target.infer_lhs(context=context):
File "/usr/local/lib/python3.5/dist-packages/astroid/inference.py", line 137, in infer_name
frame, stmts = self.lookup(self.name)
File "/usr/local/lib/python3.5/dist-packages/astroid/node_classes.py", line 716, in lookup
return self.scope().scope_lookup(self, name)
File "/usr/local/lib/python3.5/dist-packages/astroid/scoped_nodes.py", line 698, in scope_lookup
return frame._scope_lookup(node, name, offset)
File "/usr/local/lib/python3.5/dist-packages/astroid/scoped_nodes.py", line 146, in _scope_lookup
stmts = node._filter_stmts(self.locals[name], self, offset)
File "/usr/local/lib/python3.5/dist-packages/astroid/node_classes.py", line 740, in _filter_stmts
if offset == -1:
RecursionError: maximum recursion depth exceeded in comparison
FlyingTiger (Thu, 25 May 2017 11:23:59 GMT):
What's wrong with this?
jsmitchell (Thu, 25 May 2017 11:49:47 GMT):
pylint released 1.7.x. In docker it is pinned to 1.6.5 so that builds work. in vagrant you can do "sudo pip3 install pylint==1.6.5" to downgrade pylint and then run_lint will pass.
jsmitchell (Thu, 25 May 2017 11:50:54 GMT):
@mpk 2 how are you serializing your data for storage in the transaction processor you wrote (when you call set())?
jsmitchell (Thu, 25 May 2017 11:51:53 GMT):
You bytes you set will be the bytes you get from the rest API. You will need to deserialize your data in your js code.
jsmitchell (Thu, 25 May 2017 11:51:53 GMT):
You bytes you set will be the bytes you get from the rest API. You will need to deserialize your data in your js code.
jsmitchell (Thu, 25 May 2017 11:51:53 GMT):
The bytes you set will be the bytes you get from the rest API. You will need to deserialize your data in your js code.
jsmitchell (Thu, 25 May 2017 13:47:05 GMT):
@FlyingTigerL: did that help?
jsmitchell (Thu, 25 May 2017 13:47:05 GMT):
@FlyingTiger: did that help?
pschwarz (Thu, 25 May 2017 14:16:02 GMT):
@mpk 2 The data returned by `/state` is the encoded bytes your transaction processor stored at that address, base64 encoded again.
dennismckinnon (Thu, 25 May 2017 14:56:54 GMT):
Has joined the channel.
tkuhrt (Thu, 25 May 2017 15:54:08 GMT):
Recording from today's Technical Forum for anyone who would like to have a listen. Meeting starts at 15:44 into the recording: https://www.uberconference.com/getmp3/AMIfv97kKoPTEWU7Rd0iKWD5EkajQ25dntyaR9M0zL34CaU318mMXGGqDymoy1QUpBBORRxOLwqOS8f4l0bF0CrItnESJ4YYPMrQaDRQviy3zZkwwDZXOm4uA9LyNzKTfM-N7raCXPdsJDA_XO5WUnTng7-TOGGdqQ.mp3
mpk (Thu, 25 May 2017 20:59:39 GMT):
@pschwarz . If its simply encoded and not encrypted, then anybody will be able to read the data through REST API. What about security? Anyway, I will try that out
mpk (Thu, 25 May 2017 21:02:40 GMT):
@jsmitchell , I am serializing exactly as in the documentation. All that is working correctly. If I miss a step, the TP will reject. I am reading back using a simple restcall , which anyone could do . My expectation is that the data is secure and need to decrypted using public key. I just do not know how to do it
jsmitchell (Thu, 25 May 2017 21:05:40 GMT):
if you want to store encrypted payload, you will need to encrypt it on the client side as part of your transaction format
jsmitchell (Thu, 25 May 2017 21:05:40 GMT):
if you want to store encrypted content, you will need to encrypt it on the client side as part of your transaction format
jsmitchell (Thu, 25 May 2017 21:06:51 GMT):
the transaction processor would just have to store that portion of the payload as is. Obviously, if the transaction processor has the private keys, then anyone running a validator would have the private keys and be able to decrypt the data.
jsmitchell (Thu, 25 May 2017 21:06:58 GMT):
What is your use case?
jsmitchell (Thu, 25 May 2017 21:08:25 GMT):
as @pschwarz said, the data coming back from your rest call is the same data as your transaction processor set()
mpk (Thu, 25 May 2017 21:18:15 GMT):
I do not want to encrypt. I just want to get the data back. Let follow your advice and see a simple decoding would do. Thank you.
jsmitchell (Thu, 25 May 2017 21:18:42 GMT):
how are you setting the data in your transaction processor?
jsmitchell (Thu, 25 May 2017 21:18:58 GMT):
how are you picking the address to use and how are you serializing the data to be stored there?
mpk (Thu, 25 May 2017 21:19:01 GMT):
let me check
mpk (Thu, 25 May 2017 21:23:57 GMT):
https://join.me/482-113-310
mpk (Thu, 25 May 2017 21:24:33 GMT):
I am sorry, wrong window
mpk (Thu, 25 May 2017 21:56:52 GMT):
I am setting the value like this: stateValue[name] = value
mpk (Thu, 25 May 2017 21:57:26 GMT):
this is in the transaction processor. This works and I can see the value using CLI.
mpk (Thu, 25 May 2017 21:57:34 GMT):
as plain text
FlyingTiger (Fri, 26 May 2017 01:36:58 GMT):
@jsmitchell Yes, it did. Thanks very much!
jsmitchell (Fri, 26 May 2017 14:01:52 GMT):
@mpk are you willing to share your code? I could take a quick peek and maybe provide some pointers.
zac (Fri, 26 May 2017 15:59:02 GMT):
@mpk The CLI decodes the base64 data before printing. That is just a format for transmitting data over HTTP. Your client should do the same (use `from base64 import b64decode` in Python).
zac (Fri, 26 May 2017 15:59:02 GMT):
@mpk The CLI decodes the base64 data before printing. That is just a format used to transmitting data over HTTP/JSON. Your client should do the same (use `from base64 import b64decode` in Python).
zac (Fri, 26 May 2017 15:59:02 GMT):
@mpk The CLI decodes the base64 data before printing. It's just a format used to transmitting data over HTTP/JSON. Your client can do the same (use `from base64 import b64decode` in Python).
zac (Fri, 26 May 2017 15:59:02 GMT):
@mpk The CLI decodes the base64 data before printing. It's just a format used to transmit data over HTTP/JSON. Your client can do the same (use `from base64 import b64decode` in Python).
pd93 (Fri, 26 May 2017 16:12:36 GMT):
Hi guys, I've been using Fabric for a while now. But I'm becoming increasingly interested in some of the other Hyperledger projects (particularly those gaining traction like Sawtooth Lake and Iroha). I was wondering if you could - in as few words as possible - tell me what the main differences/benefits of using Sawtooth Lake over Fabric might be. Thanks :)
pd93 (Fri, 26 May 2017 16:12:36 GMT):
Hi guys, I've been using Fabric for a while now. But I'm becoming increasingly interested in some of the other Hyperledger projects (particularly those gaining traction like Sawtooth Lake and Iroha). I was wondering if you could - in as few words as possible - tell me (or point me to some documentation explaining) what the main differences/benefits of using Sawtooth Lake over Fabric might be. Thanks :)
mpk (Fri, 26 May 2017 16:47:44 GMT):
@jsmitchell . Thank you! Let me get back to you next week.
mpk (Fri, 26 May 2017 16:51:37 GMT):
@pd93 - from my analysis, Fabric is much more versatile, but the code is not ready for prime time. Sawtooth is much simpler but works now. I have not tried Iroha, but its more for light weight clients like mobile apps. Remember that all these are in incubation mode . I dropped my efforts on Fabric for now and focussing on Sawtooth - the code is more disciplined and stable there. That said, Fabric have better architecture and I will eventually migrate to that.
jsmitchell (Fri, 26 May 2017 16:53:00 GMT):
Well, I'm going to have to go ahead and disagree with you :)
jsmitchell (Fri, 26 May 2017 16:53:14 GMT):
All three projects are out of incubation
jsmitchell (Fri, 26 May 2017 16:53:31 GMT):
We can have a lengthy discussion about architectures
mpk (Fri, 26 May 2017 16:56:15 GMT):
I am talking about Version 1.x . Fabric is totally different between 0.6 and 1.x right? Anyway, may be I am still learning. I need to see things working first hand with my own code before I can say anything strongly. For now, just sharing my experience with you guys. But this technology will rock!
pd93 (Fri, 26 May 2017 17:11:19 GMT):
@mpk Indeed Fabric v1 is very different from v0.6 but I'm mainly interested in the differences in architecture. For example what use cases might suit Sawtooth better than Fabric and how it's architecture effects its confidentiality, distribution & scalability. I find there is often a trade off between these three depending on the framework.
pd93 (Fri, 26 May 2017 17:11:19 GMT):
@jsmitchell @mpk Indeed Fabric v1 is very different from v0.6 but I'm mainly interested in the differences in architecture. For example what use cases might suit Sawtooth better than Fabric and how it's architecture effects its confidentiality, distribution & scalability. I find there is often a trade off between these three depending on the framework.
mpk (Fri, 26 May 2017 17:16:27 GMT):
@jsmitchell Yes, I agree.
zac (Fri, 26 May 2017 17:31:08 GMT):
@pd93 I don't know if I have used Fabric enough to comment on differences between the architectures, but there are two aspects of Sawtooth that jump out at me:
zac (Fri, 26 May 2017 17:31:08 GMT):
@pd93 I don't know if I have used Fabric enough to comment on differences between the architectures, but there are a few aspects of Sawtooth that jump out at me:
zac (Fri, 26 May 2017 17:31:08 GMT):
@pd93 I don't know if I have used Fabric enough to comment on differences between the architectures, but there are a few Sawtooth's strengths that jump out at me:
zac (Fri, 26 May 2017 17:33:14 GMT):
1) Sawtooth makes very few assumptions about what it is you want to do with the blockchain. Payloads submitted are completely opaque to the validators, which just handle things like signing. You can then plug in your own Transaction Processor to validate the payload, allowing you to do just about anything pretty easily.
zac (Fri, 26 May 2017 17:34:26 GMT):
2) The consensus mechanisms is also pluggable. It is easy to switch between different methods of achieving consensus, including on an already running blockchain.
zac (Fri, 26 May 2017 17:35:47 GMT):
3) Among the consensus mechanisms available, there is the hardware-supported PoET (Proof of Elapsed Time), which offers a lot of advantages in terms of scalability, resources used, and time used.
zac (Fri, 26 May 2017 17:35:47 GMT):
3) Among the consensus mechanisms available, there is the hardware-supported PoET (Proof of Elapsed Time), which offers a lot of advantages in terms of scalability, resources consumed, and time passed.
pd93 (Fri, 26 May 2017 17:45:15 GMT):
@zac That's actually quite interesting. Fabric is also quite a general purpose framework, but from what I can tell, the orderers are able to see all channels/txs. Does Sawtooth have a similar concept to channels?
It seems that the main difference between the two currently is in the consensus mechanism (ie. PoET vs Kafka). Though I believe there are plans for interoperability between the Hyperledger frameworks and their pluggable components in the future?
pd93 (Fri, 26 May 2017 17:45:15 GMT):
@zac That's actually quite interesting. Fabric is also quite a general purpose framework, but from what I can tell, the orderers (validators) are able to see all channels/txs. Does Sawtooth have a similar concept to channels?
It seems that the main difference between the two currently is in the consensus mechanism (ie. PoET vs Kafka). Though I believe there are plans for interoperability between the Hyperledger frameworks and their pluggable components in the future?
pd93 (Fri, 26 May 2017 17:45:15 GMT):
@zac That's actually quite interesting. Fabric is also quite a general purpose framework, but from what I can tell, the orderers (validators) are able to see all channels/txs. Does Sawtooth have a concept similar to Fabric's channels?
It seems that the main difference between the two currently is in the consensus mechanism (ie. PoET vs Kafka). Though I believe there are plans for interoperability between the Hyperledger frameworks and their pluggable components in the future?
zac (Fri, 26 May 2017 17:55:48 GMT):
It's definitely been discussed, but I'm not sure how much there is in the way of hard plans
zac (Fri, 26 May 2017 17:56:04 GMT):
What do Fabric's channels do? I'm not familiar.
jsmitchell (Fri, 26 May 2017 17:56:18 GMT):
they are side chains
jsmitchell (Fri, 26 May 2017 17:56:35 GMT):
the main block chain is just an ordering service
zac (Fri, 26 May 2017 17:57:01 GMT):
So this is how they would handle transactions with different purposes?
zac (Fri, 26 May 2017 17:57:12 GMT):
A different side chain for each?
jsmitchell (Fri, 26 May 2017 17:57:22 GMT):
no, it's for different security domains
jsmitchell (Fri, 26 May 2017 17:57:50 GMT):
in most use cases though, it seems like you end up with one channel per counterparty relationship plus regulators
jsmitchell (Fri, 26 May 2017 17:57:57 GMT):
so it's an N^2 problem
zac (Fri, 26 May 2017 17:58:13 GMT):
Ah, so they are private chains, that store hashes on the main chain to confirm order publicly without exposing the data?
jsmitchell (Fri, 26 May 2017 17:58:19 GMT):
yep
zac (Fri, 26 May 2017 17:58:41 GMT):
Well, nothing is stopping you from doing that on Sawtooth
pd93 (Fri, 26 May 2017 17:58:46 GMT):
@jsmitchell Summed it up better and faster than I could :P
jsmitchell (Fri, 26 May 2017 17:58:57 GMT):
right, we don't find that security model very compelling
zac (Fri, 26 May 2017 17:59:51 GMT):
Yeah, nothing built in to do it
zac (Fri, 26 May 2017 18:00:31 GMT):
But there is no reason you could set up two blockchains to do that manually either
zac (Fri, 26 May 2017 18:00:31 GMT):
But there is no reason you couldn't set up two blockchains to do that manually either
zac (Fri, 26 May 2017 18:00:31 GMT):
But there is no reason you couldn't manually set up two blockchains to do that either
pd93 (Fri, 26 May 2017 18:07:32 GMT):
@jsmitchell So would you say that Sawtooth is more secure because txs are opaque to the validator?
pschwarz (Fri, 26 May 2017 18:22:36 GMT):
The security aspect is more gained from having tight control on how the transactions are actually executed. Fabric, ethereum, etc allow for execution using Turing-complete languages.
pschwarz (Fri, 26 May 2017 18:23:19 GMT):
The opacity is more about Sawtooth making very few assumptions or demands on your business logic
zac (Fri, 26 May 2017 18:23:44 GMT):
Yeah, if the payload is opaque, then the payload can be anything
pschwarz (Fri, 26 May 2017 18:24:18 GMT):
Like all blockchains, you need to produce deterministic results, but Sawtooth doesn't care what format the data is in, how you store it, or how you transmit it to the blockchain via a transactions
pschwarz (Fri, 26 May 2017 18:24:18 GMT):
Like all blockchains, you need to produce deterministic results, but Sawtooth doesn't care what format the data is in, how you store it, or how you transmit it to the blockchain within a transactions
pd93 (Fri, 26 May 2017 18:44:37 GMT):
Ok cool. That's all really helpful information. Thanks :) I'll be sure to give this a go soon
amundson (Fri, 26 May 2017 18:46:04 GMT):
payloads are opaque, but not secret. you could encrypt them or do other interesting patterns, but the opaque-ness if about flexibility
amundson (Fri, 26 May 2017 18:46:04 GMT):
payloads are opaque, but not secret. you could encrypt them or do other interesting patterns, but the opaque-ness is about flexibility
chsados (Sat, 27 May 2017 04:02:31 GMT):
Has joined the channel.
chsados (Sat, 27 May 2017 04:04:00 GMT):
is there anything I can do as a home user with a raspberry pi and an old i7 desktop with 16GB ddr3?
chsados (Sat, 27 May 2017 04:04:11 GMT):
or where can I find some fun projects with real world uses?
mpk (Sat, 27 May 2017 21:47:36 GMT):
@jsmitchell , I was able to decode the data without any problems. Apparently, its is not encrypted with the key. That means anyone who has access to the api urls can read the block chain data. Am I right? If so, is this secure?
jsmitchell (Sat, 27 May 2017 22:09:19 GMT):
That's how distributed ledgers work. They are distributed. If you want the data encrypted, encrypt it.
ccandiaw (Mon, 29 May 2017 21:47:01 GMT):
Has joined the channel.
FlyingTiger (Tue, 30 May 2017 06:42:53 GMT):
I looked into the validator registry transaction family specification, had one question, how could other validators verify whether a validator is allowed to join the validator network? :)
Ainsight (Tue, 30 May 2017 11:03:51 GMT):
Has joined the channel.
jsmitchell (Tue, 30 May 2017 12:58:41 GMT):
@FlyingTiger the checks are done in the consensus code. https://github.com/hyperledger/sawtooth-core/blob/master/consensus/poet/core/sawtooth_poet/poet_consensus/poet_block_verifier.py
Dan (Tue, 30 May 2017 14:13:48 GMT):
@FlyingTiger I don't think anyone has yet recreated the white list validator registry you made last year.
toddojala (Tue, 30 May 2017 14:55:24 GMT):
@chsados I think you can start with our Introductory documentation materials and learn about how the code works with your i7, and maybe even the raspberry pi. Please check out: http://intelledger.github.io/0.8/app_developers_guide.html
toddojala (Tue, 30 May 2017 14:56:00 GMT):
@chsados Start by reading the Introduction, Architecture and Application Developer's Guide sections of the docs, and try out the code.
pd93 (Tue, 30 May 2017 15:19:31 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=8woH9ZCnHdm3v4TqY) @pschwarz Just to pick up on Friday's conversation.. Do you think you could give me an example of these "tight controls"? I'm trying to write up a very brief overview of the difference
pd93 (Tue, 30 May 2017 15:19:31 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=8woH9ZCnHdm3v4TqY) @pschwarz Just to pick up on Friday's conversation.. Do you think you could give me an example of these "tight controls"? I'm trying to write up a very brief overview of the differences between frameworks
pschwarz (Tue, 30 May 2017 15:22:01 GMT):
If you look at one of the examples, Intkey, the transactions are only allowed to change a state value in very specific ways: take a named integer and do one of three operations on it: set, increment or decrement. The nodes in the network cannot perform any other computations, nor will they be asked to do so
pschwarz (Tue, 30 May 2017 15:22:42 GMT):
(That being in the case where only the Intkey transaction processor is running on a node)
pschwarz (Tue, 30 May 2017 15:23:48 GMT):
A app developer can, of course, expand what gets executed on each node (Intkey is a trivial example), but still has control over how much and what operations can happen
pd93 (Tue, 30 May 2017 15:26:05 GMT):
Ok cool :) That's really useful information. So to clarify.. there is no turing complete 'smart contracts'/'chaincode' or anything like that
pschwarz (Tue, 30 May 2017 15:27:02 GMT):
That is up to the app developer :) . We do have some on-going work for an EVM transaction processor implementation, though it's still pretty new yet
pschwarz (Tue, 30 May 2017 15:27:27 GMT):
You can find it at https://github.com/hyperledger/sawtooth-core/tree/burrow-evm
pschwarz (Tue, 30 May 2017 15:27:27 GMT):
You can find on this branch https://github.com/hyperledger/sawtooth-core/tree/burrow-evm
pd93 (Tue, 30 May 2017 15:28:58 GMT):
Ok thanks again :) I'll give it a go
Dan (Tue, 30 May 2017 15:40:43 GMT):
@pd93 the broader idea is that if you were to have a consortium of companies using this blockchain, they would define what kind of transactions were desired.
That could be a decision to support EVM style contracts or it could be a decision to just use constrained semantics like intkey.
Sawtooth doesn't presume a default transaction style.
JonathanLevi (Tue, 30 May 2017 15:44:18 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=tqn6s99HoXBmHy8Ky) I am actually thinking (trying to figure out) what's the best way to go about this. Of course this is subject to the application needs, but,
JonathanLevi (Tue, 30 May 2017 15:44:49 GMT):
More generally, it can be powerful to have some validations done at the transaction processor level... while others at the "consensus" level.
Fanarito (Tue, 30 May 2017 16:08:14 GMT):
Has joined the channel.
mpk (Tue, 30 May 2017 16:30:27 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=37MwBHptyYK3ApZZ3) @jsmitchell , So, Sawtooth Lake has no concept of private channels like the Fabric?
amundson (Tue, 30 May 2017 17:10:35 GMT):
@mpk You can do out-of-band transaction processing with Sawtooth, which is probably equivalent but has better architectural separation. The primary Sawtooth network would perform a GSL-like role tracking state merkle hashes of the "sub-networks". If using Sawtooth to manage consensus of those "sub-networks", then you run it like any other Sawtooth network with the exception that merkle hashes are propogated up to the primary network. If not using Sawtooth to manage consensus (because you are doing 2-party communication where BFT and other consensus mechanisms don't apply), then you would need to implement the side-band communication.
amundson (Tue, 30 May 2017 17:13:28 GMT):
Fabric provides more management infrastructure for doing this, but it is not clear that it does so while being compatible with a wide range of consensus mechanisms.
amundson (Tue, 30 May 2017 17:39:12 GMT):
we need to standardize/finalize our CLI names. here is a first cut.
amundson (Tue, 30 May 2017 17:39:25 GMT):
```Clients:
sawtooth
poet
intkey
intkey-jvm-sc
xo
noop
Validator:
st-validator (was: validator)
st-rest-api (was: rest_api)
Transaction Processors:
Method 1
--------
st-tp-config
st-tp-intkey-go
st-tp-intkey-java
st-tp-intkey-javascript
st-tp-intkey-python
st-tp-intkey-jvm-sc
st-tp-xo-go
st-tp-xo-javascript
st-tp-xo-python
st-tp-noop-go
st-tp-supplychain-python
st-tp-poet-validator-registry
Method 2
--------
st-tp-config
intkey-tp-go
intkey-tp-java
intkey-tp-javascript
intkey-tp-python
intkey-jvm-sc-tp
xo-tp-go
xo-tp-javascript
xo-tp-python
noop-tp-go
supplychain-tp-python
poet-tp-validator-registry
```
amundson (Tue, 30 May 2017 17:39:56 GMT):
thoughts?
adamludvik (Tue, 30 May 2017 17:47:09 GMT):
I like method 2 better, because going from `intkey` to `intkey-tp-go` seems like it would be easier to remember.
amundson (Tue, 30 May 2017 17:48:08 GMT):
#2 scales better too, in that it makes more sense for non-core stuff to have it's own non-st prefix
adamludvik (Tue, 30 May 2017 17:50:05 GMT):
Also tab completion would be useful with that method.
jsmitchell (Tue, 30 May 2017 17:51:21 GMT):
method 2 looks good to me. I don't love st- as a prefix for the server processes
amundson (Tue, 30 May 2017 17:51:43 GMT):
I could see keeping "validator" but not "rest-api"
adamludvik (Tue, 30 May 2017 17:52:03 GMT):
Why not just `sawtooth-validator` and `sawtooth-rest-api`?
jsmitchell (Tue, 30 May 2017 17:52:25 GMT):
yep
adamludvik (Tue, 30 May 2017 17:52:28 GMT):
`s2th`?
adamludvik (Tue, 30 May 2017 17:53:12 GMT):
^ That was on the whiteboard at my interview
jsmitchell (Tue, 30 May 2017 17:53:26 GMT):
i always wonder if ordering on rocketchat is deterministic
jsmitchell (Tue, 30 May 2017 17:53:33 GMT):
and i'm saying yep to something horrible
jsmitchell (Tue, 30 May 2017 17:54:00 GMT):
2-saw 2-tooth
amundson (Tue, 30 May 2017 17:54:41 GMT):
the interaction between 'sawtooth' and 'sawtooth-*' seems awkward to me
amundson (Tue, 30 May 2017 17:55:44 GMT):
```Clients:
sawtooth
poet
intkey
intkey-jvm-sc
xo
noop
Validator:
sawtooth-validator
sawtooth-rest-api
Transaction Processors:
sawtooth-tp-config
intkey-tp-go
intkey-tp-java
intkey-tp-javascript
intkey-tp-python
intkey-jvm-sc-tp
xo-tp-go
xo-tp-javascript
xo-tp-python
noop-tp-go
supplychain-tp-python
poet-tp-validator-registry
```
jsmitchell (Tue, 30 May 2017 17:56:22 GMT):
that last one is odd
amundson (Tue, 30 May 2017 17:56:48 GMT):
jsmitchell (Tue, 30 May 2017 17:57:41 GMT):
sawtooth-config-tp and poet-validator-registry-tp make more sense to me
amundson (Tue, 30 May 2017 17:58:31 GMT):
but not xo-go-tp?
jsmitchell (Tue, 30 May 2017 17:58:51 GMT):
no, because the 'go' thing is to differentiate the language it's in
jsmitchell (Tue, 30 May 2017 17:59:04 GMT):
it's an xo-tp
jsmitchell (Tue, 30 May 2017 17:59:09 GMT):
that is implemented in go
jsmitchell (Tue, 30 May 2017 17:59:34 GMT):
we only have the lang in the name because there are multiple implementations for example purposes
amundson (Tue, 30 May 2017 18:00:21 GMT):
-tp- or -stp-?
amundson (Tue, 30 May 2017 18:02:28 GMT):
ok, under that logic supplychain shouldn't have the language qualifier
jsmitchell (Tue, 30 May 2017 18:02:41 GMT):
yep
amundson (Tue, 30 May 2017 18:02:41 GMT):
```Clients:
sawtooth
poet
intkey
intkey-jvm-sc
xo
noop
Validator:
sawtooth-validator
sawtooth-rest-api
Transaction Processors:
sawtooth-config-tp
intkey-tp-go
intkey-tp-java
intkey-tp-javascript
intkey-tp-python
intkey-jvm-sc-tp
xo-tp-go
xo-tp-javascript
xo-tp-python
noop-tp-go
supplychain-tp
poet-validator-registry-tp
```
jsmitchell (Tue, 30 May 2017 18:02:53 GMT):
nor should noop
amundson (Tue, 30 May 2017 18:03:24 GMT):
presumably noop will be implemented in other languages for perf testing?
amundson (Tue, 30 May 2017 18:03:34 GMT):
(of SDKs)
amundson (Tue, 30 May 2017 18:04:21 GMT):
@agunde is jvm-sc-tp really intkey-specific?
pschwarz (Tue, 30 May 2017 18:04:37 GMT):
This looks very good now
agunde (Tue, 30 May 2017 18:08:31 GMT):
@amundson No, it could be changed to jvm-sc-tp (also need to change the name of the directory it is in, currently sdk/examples/intkey_jvm_sc, should be changed to just jvm_sc.)
amundson (Tue, 30 May 2017 18:08:36 GMT):
@pschwarz - what's the new name for the config txn family?
amundson (Tue, 30 May 2017 18:09:32 GMT):
@agunde how about 'jvmsc' and 'jvmsc-tp'?
agunde (Tue, 30 May 2017 18:11:06 GMT):
That would be fine.
pschwarz (Tue, 30 May 2017 18:15:24 GMT):
Outside of that brainstorming we did, I hadn't made a decision yet
pschwarz (Tue, 30 May 2017 18:16:03 GMT):
top contender was "setworks"
pschwarz (Tue, 30 May 2017 18:16:03 GMT):
top contender was "sawtooth-setworks"
jsmitchell (Tue, 30 May 2017 18:16:42 GMT):
what no
pschwarz (Tue, 30 May 2017 18:16:47 GMT):
I also liked "sawtooth-crosstie"
pschwarz (Tue, 30 May 2017 18:16:55 GMT):
(sawmill terminology)
jsmitchell (Tue, 30 May 2017 18:16:58 GMT):
sawtooth-settings
agunde (Tue, 30 May 2017 18:17:04 GMT):
@amundson the cli in sdk/examples/intkey_jvm_sc/sawtooth_intkey is however intkey specific
pschwarz (Tue, 30 May 2017 18:17:20 GMT):
Boring :)
pschwarz (Tue, 30 May 2017 18:17:32 GMT):
But, also pro
amundson (Tue, 30 May 2017 18:39:54 GMT):
setworks is pretty good
amundson (Tue, 30 May 2017 18:40:23 GMT):
'setworks' and 'setworks-tp' (separation of setworks from sawtooth command may make sense?)
jsmitchell (Tue, 30 May 2017 18:40:49 GMT):
it
jsmitchell (Tue, 30 May 2017 18:40:49 GMT):
it's one letter away from networks
jsmitchell (Tue, 30 May 2017 18:41:06 GMT):
but has nothing to do with networks
amundson (Tue, 30 May 2017 18:41:40 GMT):
```Clients:
sawtooth
setworks
poet
intkey
jvmsc
xo
noop
Validator:
sawtooth-validator
sawtooth-rest-api
Transaction Processors:
setworks-tp
intkey-tp-go
intkey-tp-java
intkey-tp-javascript
intkey-tp-python
jvmsc-tp
xo-tp-go
xo-tp-javascript
xo-tp-python
noop-tp-go
supplychain-tp
poet-validator-registry-tp
```
amundson (Tue, 30 May 2017 18:46:55 GMT):
also need to consider config file names
amundson (Tue, 30 May 2017 18:47:33 GMT):
``` /etc/sawtooth/
path.toml
validator.toml
rest-api.toml
setworks.toml
intkey.toml
xo.toml
noop.toml
supplychain.toml
poet.toml
```
mpk (Tue, 30 May 2017 18:48:16 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=8mhvnDSHm5iTNdMdm) @amundson Thank you. It makes sense.
agunde (Tue, 30 May 2017 18:49:49 GMT):
@amundson There are also log confing files, log_config.toml, rest_api_log_config.toml, and the tp log config files.
agunde (Tue, 30 May 2017 18:49:49 GMT):
@amundson There are also log config files, log_config.toml, rest_api_log_config.toml, and the tp log config files.
amundson (Tue, 30 May 2017 18:51:40 GMT):
log config is interesting, in that for the multiple language implementations they wouldn't take the same logging configuration
amundson (Tue, 30 May 2017 18:52:10 GMT):
so xo_log_config.toml - would be python-only
agunde (Tue, 30 May 2017 18:52:21 GMT):
Correct
mpk (Tue, 30 May 2017 18:54:17 GMT):
Thanks everyone for your suggestions. I have a functional demo, Node.JS website, sending transactions (using our own, built using node.js transaction processor) inserting, reading and updating text document on block chain block chain.
amundson (Tue, 30 May 2017 18:55:12 GMT):
@agunde - one options for logging would be to embed it into a [logging] table
amundson (Tue, 30 May 2017 18:55:29 GMT):
which would look something like this inside validator.toml (for example)
amundson (Tue, 30 May 2017 18:57:08 GMT):
```
[logging]
version = 1
disable_existing_loggers = false
[logging.formatters.simple]
format = "[%(asctime)s.%(msecs)03d [%(threadName)s] %(module)s %(levelname)s] %(message)s"
datefmt = "%H:%M:%S"
[logging.handlers.debug]
level = "DEBUG"
formatter = "simple"
class = "logging.FileHandler"
filename = "example-debug.log"
[logging.handlers.interconnect]
level = "DEBUG"
formatter = "simple"
class = "logging.handlers.RotatingFileHandler"
filename = "example-interconnect.log"
maxBytes = 5000000
backupCount=20
[logging.handlers.error]
level = "ERROR"
formatter = "simple"
class = "logging.FileHandler"
filename = "example-error.log"
[logging.loggers."sawtooth_validator.networking.interconnect"]
level = "DEBUG"
propagate = true
handlers = [ "interconnect"]
[logging.root]
level = "DEBUG"
handlers = [ "error", "debug"]
```
amundson (Tue, 30 May 2017 18:57:12 GMT):
thoughts on that?
agunde (Tue, 30 May 2017 18:58:02 GMT):
I think that would be a good way to reduce the number of config files we have.
amundson (Tue, 30 May 2017 18:59:41 GMT):
the only thing that wouldn't really let you do is share a single logging configuration file across components
amundson (Tue, 30 May 2017 19:00:54 GMT):
which might not be a big deal since you can't point them to the same files anyway
amundson (Tue, 30 May 2017 19:02:49 GMT):
if you wanted to configure them all to point to syslog, you would have to edit 2 files plus 1 per TP, which would be a minimum of 4
amundson (Tue, 30 May 2017 19:27:48 GMT):
also attempting to standardize/simplify our CLI and config options. here is what we came up with so far.
amundson (Tue, 30 May 2017 19:28:01 GMT):
```sawtooth-validator Usage
------------------------
All equivalent:
NEW: sawtooth-validator --bind=network:tcp://127.0.0.1:8800/ --bind=component:tcp://127.0.0.1:40000/ --endpoint=tcp://1.2.3.4:8800/ --peering=dynamic --seed=tcp://2.3.4.5:8800/ --peer=tcp://2.3.4.5:8800/
NEW: sawtooth-validator -B network:tcp://127.0.0.1:8800/ -B component:tcp://127.0.0.1:40000/ -E tcp://1.2.3.4:8800/ -P=dynamic -s tcp://2.3.4.5:8800/ -p tcp://2.3.4.5:8800/
NEW: sawtooth-validator -B network:127.0.0.1:8800 -B component:127.0.0.1:40000 -E 1.2.3.4:8800 -P dynamic -s 2.3.4.5:8800 -p 2.3.4.5:8800
OLD: validator --network-endpoint=tcp://127.0.0.1:8800/ --component-endpoint=tcp://127.0.0.1:8800/ --public-uri=tcp://1.2.3.4:8800/ --peering=dynamic --join=tcp://2.3.4.5:8800/ --peers=tcp://2.3.4.5:8800/
FUTURE: sawtooth-validator -B network,client:127.0.0.1:8800 -B tp,client:127.0.0.1:40000 -E 1.2.3.4:8800
validator.toml
--------------
bind = [
"network:tcp://127.0.0.1:8800/",
"component:tcp://127.0.0.1:8800/"
]
endpoint = "tcp://1.2.3.4:8800/"
peering = "dynamic"
peers = [
"tcp://2.3.4.5:8800/"
]
seeds = [
"tcp://2.3.4.5:8800/"
]
sawtooht-rest-api Usage
-----------------------
All equivalent:
NEW: sawtooth-rest-api --bind=localhost:8080 --connect=tcp://127.0.0.1:40000/ --timeout=300
NEW: sawtooth-rest-api -B localhost:8080 -C tcp://127.0.0.1:40000/ -t 300
NEW: sawtooth-rest-api -B localhost:8080 -C 127.0.0.1:40000 -t 5m
OLD: rest_api --host=localhost --port=8080 --timeout=300
rest-api.toml
-----------------
connect = "tcp://127.0.0.1:40000"
bind = [
"localhost:8800"
]
timeout = 300
```
amundson (Tue, 30 May 2017 19:28:01 GMT):
```sawtooth-validator Usage
------------------------
All equivalent:
NEW: sawtooth-validator --bind=network:tcp://127.0.0.1:8800/ --bind=component:tcp://127.0.0.1:40000/ --endpoint=tcp://1.2.3.4:8800/ --peering=dynamic --seed=tcp://2.3.4.5:8800/ --peer=tcp://2.3.4.5:8800/
NEW: sawtooth-validator -B network:tcp://127.0.0.1:8800/ -B component:tcp://127.0.0.1:40000/ -E tcp://1.2.3.4:8800/ -P=dynamic -s tcp://2.3.4.5:8800/ -p tcp://2.3.4.5:8800/
NEW: sawtooth-validator -B network:127.0.0.1:8800 -B component:127.0.0.1:40000 -E 1.2.3.4:8800 -P dynamic -s 2.3.4.5:8800 -p 2.3.4.5:8800
OLD: validator --network-endpoint=tcp://127.0.0.1:8800/ --component-endpoint=tcp://127.0.0.1:8800/ --public-uri=tcp://1.2.3.4:8800/ --peering=dynamic --join=tcp://2.3.4.5:8800/ --peers=tcp://2.3.4.5:8800/
FUTURE: sawtooth-validator -B network,client:127.0.0.1:8800 -B tp,client:127.0.0.1:40000 -E 1.2.3.4:8800
validator.toml
--------------
bind = [
"network:tcp://127.0.0.1:8800/",
"component:tcp://127.0.0.1:40000/"
]
endpoint = "tcp://1.2.3.4:8800/"
peering = "dynamic"
peers = [
"tcp://2.3.4.5:8800/"
]
seeds = [
"tcp://2.3.4.5:8800/"
]
sawtooht-rest-api Usage
-----------------------
All equivalent:
NEW: sawtooth-rest-api --bind=localhost:8080 --connect=tcp://127.0.0.1:40000/ --timeout=300
NEW: sawtooth-rest-api -B localhost:8080 -C tcp://127.0.0.1:40000/ -t 300
NEW: sawtooth-rest-api -B localhost:8080 -C 127.0.0.1:40000 -t 5m
OLD: rest_api --host=localhost --port=8080 --timeout=300
rest-api.toml
-----------------
connect = "tcp://127.0.0.1:40000"
bind = [
"localhost:8800"
]
timeout = 300
```
gauravbhatt (Tue, 30 May 2017 19:54:45 GMT):
Has joined the channel.
Dan (Tue, 30 May 2017 22:04:42 GMT):
@amundson looks like you got some good discussion on these topics. I've kind of caught up, but would still be good to summarize where you are at on these to the mail list.
Dan (Tue, 30 May 2017 22:05:18 GMT):
I didn't track setworks - Was that the config txn family?
FlyingTiger (Wed, 31 May 2017 02:48:19 GMT):
@jsmitchell @Dan Thanks, I got it.
ajoshioptonlinenet (Wed, 31 May 2017 12:42:26 GMT):
Has joined the channel.
amundson (Wed, 31 May 2017 14:20:54 GMT):
@Dan good idea
amundson (Wed, 31 May 2017 14:21:30 GMT):
@Dan - yes, setworks is the proposed new name for the config family
jsmitchell (Wed, 31 May 2017 14:21:45 GMT):
:thumbdown_tone1:
Fanarito (Wed, 31 May 2017 14:30:51 GMT):
I am trying to setup and test sawtooth and have set it up on a virtualmachine.
Then I run `sudo sawtooth cluster start --count 2 -m subprocess -P tp_intkey_python` to setup a test network.
Then I run `intkey create_batch` and finally `intkey load -f batches.intkey`.
The intkey load command completes succesfully on that terminal with the output `batches: 1001 batch/sec: 350.6686556134236`
however on the cluster terminal it just outputs that the serverthread is sending and receiving some data repeatedly.
This continues until the machine runs out of memory. But if I press Ctrl-C it tries to close all the threads running, but can't close the thread named "Thread"
The virtual machine has 4gb memory.
any ideas on what might be going wrong?
Fanarito (Wed, 31 May 2017 14:30:51 GMT):
I am trying to setup and test sawtooth and have set it up on a virtualmachine.
I run `sudo sawtooth cluster start --count 2 -m subprocess -P tp_intkey_python` to setup a test network.
Then I run `intkey create_batch` and finally `intkey load -f batches.intkey`.
The intkey load command completes succesfully on that terminal with the output `batches: 1001 batch/sec: 350.6686556134236`
however on the cluster terminal it just outputs that the serverthread is sending and receiving some data repeatedly.
This continues until the machine runs out of memory. But if I press Ctrl-C it tries to close all the threads running, but can't close the thread named "Thread"
The virtual machine has 4gb memory.
any ideas on what might be going wrong?
Fanarito (Wed, 31 May 2017 14:36:47 GMT):
it's still trying to close the thread gracefully
Dan (Wed, 31 May 2017 14:43:41 GMT):
I second James's thumbs down on setworks. ;) It's not obvious what that means. Config seems pretty clear.
Fanarito (Wed, 31 May 2017 14:50:14 GMT):
huh, I doubled the ram on the virtual machine and the problem stopped.
Fanarito (Wed, 31 May 2017 14:51:16 GMT):
and it did not even get close to the amount of ram it was using before.
Fanarito (Wed, 31 May 2017 14:51:16 GMT):
and it did not even get close to the amount of ram it was using before, makes no sense
jsmitchell (Wed, 31 May 2017 14:52:17 GMT):
@Fanarito weird
jsmitchell (Wed, 31 May 2017 14:52:38 GMT):
I have seen oddness with memory in the vagrant environment. The lack of a swap configuration is unforgiving.
mwagner (Wed, 31 May 2017 17:21:02 GMT):
hi, we have an intern stating tomorrow on project #6 https://wiki.hyperledger.org/internship/project_ideas Would like Sawtooth to be his first assignment assuming there are no objections. . Who is the build maintainer ?
jsmitchell (Wed, 31 May 2017 18:36:38 GMT):
@mwagner excellent! they can connect with @rbuysse and @amundson
amundson (Wed, 31 May 2017 19:00:20 GMT):
@Dan - config is confusing because of file configuration, so the fallback recommendation would be 'settings'. we would then have 'settings' usually mean on-chain and 'configuration' file-based off-chain.
mwagner (Wed, 31 May 2017 19:03:43 GMT):
cool, thanks!
Dan (Wed, 31 May 2017 20:43:16 GMT):
@amundson I see the issue. Ledger Config/Settings would make sense to us but probably not obvious to a new user that doesn't equate Ledger to the full distributed system. Maybe chain_settings?
amundson (Wed, 31 May 2017 21:14:23 GMT):
@Dan not sure how we would shrink that down to a prefix and CLI. what I liked about "setworks" is that it isn't re-using existing terminology and so it would be possible to create more of an identity for that transaction family and capability than we can do with 'sawtooth settings'. something else unique would work too, it's hard to come up with good ideas. ('janus' is clever, but might not count as good)
Dan (Wed, 31 May 2017 21:27:03 GMT):
Yeah name the baby is a deceptively time consuming game. `setchain` ?
jsmitchell (Wed, 31 May 2017 21:27:58 GMT):
Janus?
jsmitchell (Wed, 31 May 2017 21:28:02 GMT):
the two faced god?
jsmitchell (Wed, 31 May 2017 21:28:24 GMT):
If you are going to name it after a god, pick the god of rules (settings).
jsmitchell (Wed, 31 May 2017 21:28:26 GMT):
Themis
jsmitchell (Wed, 31 May 2017 21:29:17 GMT):
https://en.wikipedia.org/wiki/Themis
amundson (Wed, 31 May 2017 21:36:14 GMT):
I'm fine with themis but think setworks is way better
jsmitchell (Wed, 31 May 2017 21:36:35 GMT):
themis is bad
amundson (Wed, 31 May 2017 21:36:44 GMT):
so is janus
amundson (Wed, 31 May 2017 21:36:50 GMT):
but I'm fine with that too
jsmitchell (Wed, 31 May 2017 21:36:53 GMT):
yeah, but at least one makes sense
amundson (Wed, 31 May 2017 21:37:26 GMT):
janus is the god of transition/change, makes perfect sense
jsmitchell (Wed, 31 May 2017 21:37:49 GMT):
unfortunately, they will all confuse people
amundson (Wed, 31 May 2017 21:38:33 GMT):
sounds like an anarchist reason not to name things
jsmitchell (Wed, 31 May 2017 21:38:44 GMT):
did you mean antichrist?
amundson (Wed, 31 May 2017 21:39:04 GMT):
no one will ever know
Dan (Wed, 31 May 2017 21:39:21 GMT):
let's just call it anarchrist
amundson (Wed, 31 May 2017 21:39:46 GMT):
sounds fine, a bit long, but ok
Dan (Wed, 31 May 2017 21:46:47 GMT):
`chainconf`
jsmitchell (Wed, 31 May 2017 21:47:16 GMT):
`covfefe`
amundson (Wed, 31 May 2017 22:16:51 GMT):
crankset
mwagner (Wed, 31 May 2017 23:54:51 GMT):
hey, I am working to get Red Hat "entitlements" for the CI systems. Who is a good person to talk to about the urrent and planned config ?
jsmitchell (Thu, 01 Jun 2017 00:39:46 GMT):
@rbuysse
jsmitchell (Thu, 01 Jun 2017 00:40:08 GMT):
He is the guy with his head in the clouds
jsmitchell (Thu, 01 Jun 2017 00:44:24 GMT):
He will connect up with you in the AM @mwagner
FlyingTiger (Thu, 01 Jun 2017 12:27:20 GMT):
Hi guys, I can't find any verification that the payload field of a transaction matches the payload_sha512 field of the header. So I opened a PR https://github.com/hyperledger/sawtooth-core/pull/548
FlyingTiger (Thu, 01 Jun 2017 12:37:00 GMT):
Please take a look
FlyingTiger (Thu, 01 Jun 2017 12:37:09 GMT):
Thanks :)
Dan (Thu, 01 Jun 2017 13:43:05 GMT):
Like @cianx said, good catch @FlyingTiger !
SahilKapoor (Thu, 01 Jun 2017 17:46:39 GMT):
How to create sidedb for private data?
Dan (Thu, 01 Jun 2017 18:11:20 GMT):
@SahilKapoor I believe @haridhakshini is working on that. I don't have the link to his jira item handy.
agunde (Thu, 01 Jun 2017 19:50:51 GMT):
The command line options for ./bin/validator have been updated to be the following
agunde (Thu, 01 Jun 2017 19:51:05 GMT):
usage: validator [-h] [--config-dir CONFIG_DIR]
[--network-endpoint NETWORK_ENDPOINT]
[--component-endpoint COMPONENT_ENDPOINT]
[-P {static,dynamic}] [-E ENDPOINT] [-s SEEDS] [-p PEERS]
[-v]
optional arguments:
-h, --help show this help message and exit
--config-dir CONFIG_DIR
Configuration directory
--network-endpoint NETWORK_ENDPOINT
Network endpoint URL
--component-endpoint COMPONENT_ENDPOINT
Validator component service endpoint
-P {static,dynamic}, --peering {static,dynamic}
The type of peering approach the validator should take. Choices are 'static' which only attempts to peer with candidates provided with the --peers option, and 'dynamic' which will do topology buildouts. If 'dynamic' is provided, any static peers will be processed first, prior to the topology buildout starting
-E ENDPOINT, --endpoint ENDPOINT
Advertised network endpoint URL
-s SEEDS, --seeds SEEDS
uri(s) to connect to in order to initially connect to the validator network, in the format tcp://hostname:port. Multiple --seeds arguments can be provided, and a single --seeds argument will accept a comma separated list of tcp://hostname:port,tcp://hostname:port parameters
-p PEERS, --peers PEERS
A list of peers to attempt to connect to in the format tcp://hostname:port. Multiple --peers arguments can be provided, and a single --peers argument will accept a comma separated list of tcp://hostname:port,tcp://hostname:port parameters
-v, --verbose Increase output sent to stderr
agunde (Thu, 01 Jun 2017 19:51:05 GMT):
usage: validator [-h] [--config-dir CONFIG_DIR] [-B BIND]
[-P {static,dynamic}] [-E ENDPOINT] [-s SEEDS] [-p PEERS]
[-v]
optional arguments:
-h, --help show this help message and exit
--config-dir CONFIG_DIR
Configuration directory
-B BIND, --bind BIND Set the endpoint url for the network and the validator component service endpoints. Multiple --bind arguments should be provided in the format network:endpoint and component:endpoint.
-P {static,dynamic}, --peering {static,dynamic}
The type of peering approach the validator should take. Choices are 'static' which only attempts to peer with candidates provided with the --peers option, and 'dynamic' which will do topology buildouts. If 'dynamic' is provided, any static peers will be processed first, prior to the topology buildout starting
-E ENDPOINT, --endpoint ENDPOINT
Advertised network endpoint URL
-s SEEDS, --seeds SEEDS
uri(s) to connect to in order to initially connect to the validator network, in the format tcp://hostname:port. Multiple --seeds arguments can be provided, and a single --seeds argument will accept a comma separated list of tcp://hostname:port,tcp://hostname:port parameters
-p PEERS, --peers PEERS
A list of peers to attempt to connect to in the format tcp://hostname:port. Multiple --peers arguments can be provided, and a single --peers argument will accept a comma separated list of tcp://hostname:port,tcp://hostname:port parameters
-v, --verbose Increase output sent to stderr
agunde (Thu, 01 Jun 2017 19:52:19 GMT):
There is also now an option to use a config file when starting up a validator and an example config file can be found here https://github.com/hyperledger/sawtooth-core/blob/master/validator/packaging/validator.toml.example
jsmitchell (Thu, 01 Jun 2017 20:00:11 GMT):
@agunde is that right? still refers to network-endpoint and component-endpoint
agunde (Thu, 01 Jun 2017 20:02:21 GMT):
There we go, now it is correct.
jsmitchell (Thu, 01 Jun 2017 20:02:54 GMT):
it was a test to see if people were paying attention
agunde (Thu, 01 Jun 2017 20:03:19 GMT):
exactly ;)
IrgendwerAUT (Thu, 01 Jun 2017 21:42:07 GMT):
Has joined the channel.
Dan (Thu, 01 Jun 2017 22:36:01 GMT):
cool. could you send that to the mail list? things tend to fly by on chat and I don't want people to miss if they aren't on chat today
Dan (Fri, 02 Jun 2017 14:47:18 GMT):
I don't see a note to the stl mail list for either this validator CLI change or for the discussion @amundson led on clients etc. probably you guys are just busy which is fine. but thought I'd mention in case I'm not getting that mail list right.
amundson (Fri, 02 Jun 2017 14:48:17 GMT):
Yep, should go out today
PriteshPatel (Fri, 02 Jun 2017 14:55:12 GMT):
Hi All. Learning Sawtooth. Been through the Docs and browsing around the code. Trying to learn how to create a new Transaction Families and Processors. Any guidance on where I should start looking?
toddojala (Fri, 02 Jun 2017 15:29:14 GMT):
@PriteshPatel Check out:
toddojala (Fri, 02 Jun 2017 15:29:41 GMT):
@PriteshPatel http://intelledger.github.io/0.8/app_developers_guide.html
toddojala (Fri, 02 Jun 2017 15:30:15 GMT):
We have tutorials right now for both Python and JavaScript, with more languages soon to come.
jsmitchell (Fri, 02 Jun 2017 15:57:12 GMT):
master is currently not passing tests due to a parallel merge incompatibility
bob346 (Fri, 02 Jun 2017 16:00:21 GMT):
Has joined the channel.
kelly_ (Fri, 02 Jun 2017 16:19:00 GMT):
hey everyone, I want to introduce you to @mahesh_rao
kelly_ (Fri, 02 Jun 2017 16:19:15 GMT):
Mahesh is based in Germany and is interested in contributing to sawtooth
jsmitchell (Fri, 02 Jun 2017 16:19:27 GMT):
hi @mahesh_rao!
mahesh_rao (Fri, 02 Jun 2017 16:19:39 GMT):
Hello everyone, hi @jsmitchell
kelly_ (Fri, 02 Jun 2017 16:19:40 GMT):
@mfford could you send an invite to @mahesh_rao for any open upcoming tech sessions or sprint planning sessions?
mahesh_rao (Fri, 02 Jun 2017 16:19:55 GMT):
thanks @kelly_ for the support
kelly_ (Fri, 02 Jun 2017 16:20:42 GMT):
Message Attachments
kelly_ (Fri, 02 Jun 2017 16:20:46 GMT):
@mahesh_rao ^ there is a high level architecture overview. there is more information in the docs here: http://intelledger.github.io/
kelly_ (Fri, 02 Jun 2017 16:21:24 GMT):
@jsmitchell if you have any ideas of easy ways to start contributing, feel free to send an idea or two to @mahesh_rao
jsmitchell (Fri, 02 Jun 2017 16:22:22 GMT):
@mahesh_rao is there a particular area of the system that you are interested in exploring?
mahesh_rao (Fri, 02 Jun 2017 16:24:49 GMT):
I have a team of 2, who did explore the Sawtooth blockchain few days ago.. Hopefully My team can work on all technical aspects :) to start with
mahesh_rao (Fri, 02 Jun 2017 16:25:07 GMT):
any*
PriteshPatel (Fri, 02 Jun 2017 16:39:34 GMT):
@toddojala Thank you!
toddojala (Fri, 02 Jun 2017 16:39:55 GMT):
@PriteshPatel very welcome
jsmitchell (Fri, 02 Jun 2017 17:44:22 GMT):
master is passing tests again
jriachi (Fri, 02 Jun 2017 18:40:52 GMT):
Has joined the channel.
Dan (Fri, 02 Jun 2017 18:44:32 GMT):
hi @mahesh_rao you and your team can take a look at Jira. Any story that someone isn't actively working on is fair game. You can also come up with things. For example, if the docs were inaccurate when you were experimenting then you might submit corrections as PRs to docs/ or if there's a core feature that you would like to see you can add a jira story and take ownership of it. Another good area is if there's a particular business domain you are coming from, creating an example transaction family for that area is great.
Jira:
https://jira.hyperledger.org/secure/RapidBoard.jspa?rapidView=3&projectKey=STL&view=planning.nodetail&epics=visible
tkuhrt (Fri, 02 Jun 2017 19:01:46 GMT):
FYI: I created a shared calendar for all Hyperledger community meetings. The Sawtooth Tech Forum and Sprint Planning are on the calendar. You can find it here: http://bit.ly/HyperledgerCal. Use the &ctz=_TZ_ option to specify your time zone. See the TZ column for list of options: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
tkuhrt (Fri, 02 Jun 2017 19:05:42 GMT):
If you have any other meetings that are open to the public, I am happy to add them
mahesh_rao (Fri, 02 Jun 2017 19:21:09 GMT):
Will have a look into it @Dan thanks !
mahesh_rao (Fri, 02 Jun 2017 19:22:11 GMT):
Thx @tkuhrt
h4xr (Sat, 03 Jun 2017 05:22:24 GMT):
Has joined the channel.
FlyingTiger (Sat, 03 Jun 2017 06:22:22 GMT):
I also didn't find any verification that the transaction_ids field contains a list of transaction header_signatures and has the same order. So I opened a PR https://github.com/hyperledger/sawtooth-core/pull/571
FlyingTiger (Sat, 03 Jun 2017 06:22:47 GMT):
Guys, please take a look. :)
h4xr (Sat, 03 Jun 2017 06:52:51 GMT):
Hello everyone,
I am Saurabh currently based in India.
I am an open source enthusiast and intrigued by the Blockchain technology and was going through the projects under Hyperledger.
My day to day work involves coding in python, javascript and shell scripting.
Currently I am trying to setup Sawtooth by following the core developers guide and looking forward to contributing to Sawtooth-core :)
jsmitchell (Sat, 03 Jun 2017 15:26:36 GMT):
Welcome Saurabh!
pschwarz (Sat, 03 Jun 2017 18:16:54 GMT):
@FlyingTiger looks like there's a unit test failure in that PR:
```
validator_1 | ERROR: test_invalid_transaction_ids_batch (test_message_validation.tests.TestMessageValidation)
validator_1 | ----------------------------------------------------------------------
validator_1 | Traceback (most recent call last):
validator_1 | File "/project/sawtooth-core/validator/tests/unit3/test_message_validation/tests.py", line 212, in test_invalid_transaction_ids_batch
validator_1 | batch_list = self._create_batches(1, 1, valid_transaction_ids=false)
validator_1 | NameError: name 'false' is not defined
```
h4xr (Sun, 04 Jun 2017 02:27:50 GMT):
Hello,
I recently finished building and setting up Sawtooth.
I was looking for some issues, which I can work on and which can provide me a bit more insight into the project. I found this issue on JIRA: https://jira.hyperledger.org/projects/STL/issues/STL-261 and I am planning to work on it.
I was looking through the code of Sawtooth CLI config proposal and the how the REST endpoints are being built, I want to ask, pertaining to this particular issue, will this REST endpoint for adding public key to the validator, will get a Batch as its payload where the Payload consist of a key => value pair (e.g. PUB_KEY => some_pub_key) or just a value for the PubKey which should be voted for addition to config blockchain?
Will be glad if someone can provide a bit of elaboration on the above question :)
FlyingTiger (Sun, 04 Jun 2017 02:51:41 GMT):
@pschwarz I fixed it. Thanks for reminding me.
FlyingTiger (Mon, 05 Jun 2017 03:21:10 GMT):
HI, everyone, I have a question:
When I submit a batch that includes an invalid Transaction. The processor has the logging out "Invalid Transaction Invalid Action: Space already taken.", and the validator has the logging out "Batch c51fd936940687b24741d96383913192ef6a4a5f9c664324bf9b8ed121999bea342e490243e4871dd054c80ed22c1eea6cc17617a0a36ab0850bf45a9affb97d invalid, not added to block", but when I got the status of the batch, the response is "c51fd936940687b24741d96383913192ef6a4a5f9c664324bf9b8ed121999bea342e490243e4871dd054c80ed22c1eea6cc17617a0a36ab0850bf45a9affb97d PENDING". Why the reponse is PENDING, not INVALID? Could we get the INVALID status?
h4xr (Mon, 05 Jun 2017 03:24:06 GMT):
@FlyingTiger Seems like it is already reported here https://jira.hyperledger.org/projects/STL/issues/STL-321
FlyingTiger (Mon, 05 Jun 2017 08:31:37 GMT):
@h4xr Thanks, that's what I want to ask.
h4xr (Mon, 05 Jun 2017 12:55:54 GMT):
Hi, why does JIRA show an error stating, user
h4xr (Mon, 05 Jun 2017 12:56:28 GMT):
Are there any additional steps that needs to be taken before sending a PR to sawtooth-core github?
h4xr (Mon, 05 Jun 2017 12:57:46 GMT):
Talking with respect to this PR: https://github.com/hyperledger/sawtooth-core/pull/575
jsmitchell (Mon, 05 Jun 2017 13:16:45 GMT):
Hi @h4xr we have a list of committers because PRs automatically get run on our Jenkins system. This is to avoid arbitrary code from being run on that system.
jsmitchell (Mon, 05 Jun 2017 13:18:17 GMT):
One of the maintainers can kick off a build once they peek at the changes.
h4xr (Mon, 05 Jun 2017 13:18:33 GMT):
@jsmitchell Thanks for the info :D
jsmitchell (Mon, 05 Jun 2017 13:20:05 GMT):
I can do it once I'm at my desk
h4xr (Mon, 05 Jun 2017 13:23:59 GMT):
@jsmitchell thanks :)
Dan (Mon, 05 Jun 2017 15:03:09 GMT):
for those on the planning call you need to hit the audio options to hear / talk
zac (Mon, 05 Jun 2017 15:34:31 GMT):
2
zac (Mon, 05 Jun 2017 15:36:32 GMT):
@h4xr Hey there Saurabh! I'm the primary REST API guy, so I'm happy to see you are taking on STL-261, and can hopefully answer some of your questions.
zac (Mon, 05 Jun 2017 15:37:50 GMT):
In regards to your question, the answer is somewhat dependent on the completion of the design work in https://jira.hyperledger.org/browse/STL-260. Really that whole epic is.
zac (Mon, 05 Jun 2017 15:43:12 GMT):
That said, my instinct is that you would _not_ have to submit a Batch for this endpoint. Since this endpoint creates a proposal to be voted on, we don't need to worry about signing the interaction, and the REST API should be able to handle the details of building the Batch.
zac (Mon, 05 Jun 2017 15:43:29 GMT):
Thoughts @pschwarz?
h4xr (Mon, 05 Jun 2017 15:46:06 GMT):
@zac That sounds nice :)
We can figure out something regarding the structure of the Keys and the required endpoints and what model we can use for the REST based authentication.
I will need some help understanding how multiple keys can be added to the config blockchain for voting though :)
pschwarz (Mon, 05 Jun 2017 15:48:34 GMT):
Not quite correct, @zac - the transaction submitted for the proposal needs to be signed. So there's an open question as to what key would be used for the proposal, since there _that_ key needs to be authorized to make config proposals.
zac (Mon, 05 Jun 2017 15:49:29 GMT):
Yeah, I meant the person who submitted it didn't necessarily need to sign it.
pschwarz (Mon, 05 Jun 2017 15:49:39 GMT):
True
zac (Mon, 05 Jun 2017 15:49:46 GMT):
Though, that would mean giving the REST API a key
zac (Mon, 05 Jun 2017 15:49:53 GMT):
Which is a whole new thing
pschwarz (Mon, 05 Jun 2017 15:50:03 GMT):
Right
pschwarz (Mon, 05 Jun 2017 15:50:43 GMT):
And it has to be authorized to create config proposals
zac (Mon, 05 Jun 2017 15:52:32 GMT):
Though if you are submitting a batch in order to add an id, you could just `POST /batches`
zac (Mon, 05 Jun 2017 15:52:43 GMT):
The REST API wouldn't actually need a new endpoint
pschwarz (Mon, 05 Jun 2017 15:56:28 GMT):
Yeah, I'm not sure about that story, and I think there needs to be some architectural discussion on it
pschwarz (Mon, 05 Jun 2017 15:56:52 GMT):
There are also so possible issues with the config family that might make that tough
pschwarz (Mon, 05 Jun 2017 15:57:07 GMT):
(by exposing this that way, I mean)
h4xr (Mon, 05 Jun 2017 15:57:23 GMT):
I am not sure how much this is feasible (still understanding the architecture)
Initially we provide an authorized signing key(A key valid for one time use, if possible) to the user through which they can make a Public key proposal for the addition to config blockchain.
The user then makes a proposal.
Once the key is voted authorized, we provide the user with a endpoint to which they pass their key and get a API token.
This API token(valid for a limited time) can be used to make REST API requests. Once the token expires, the user needs to ask for a new token
jsmitchell (Mon, 05 Jun 2017 15:58:07 GMT):
hmm
jsmitchell (Mon, 05 Jun 2017 15:58:33 GMT):
the authorized keys for voting are a chain of trust
jsmitchell (Mon, 05 Jun 2017 15:59:04 GMT):
the design is that an existing authorized signer is the one introducing the proposal
jsmitchell (Mon, 05 Jun 2017 15:59:40 GMT):
this also allows that individual to perform verification of identity/proof of private key for the new party
pschwarz (Mon, 05 Jun 2017 16:05:14 GMT):
There are two layers of authorized keys here: one for config transactions, the other for API tokens for general REST API usage (queries to submission, etc)
jsmitchell (Mon, 05 Jun 2017 16:05:59 GMT):
ah
h4xr (Mon, 05 Jun 2017 16:11:10 GMT):
So, here is what I understood
An authorized signer makes a request for a public key to be added to the config blockchain
Next, when this key is approved, the user can make API requests using this key
zac (Mon, 05 Jun 2017 16:23:17 GMT):
I am going to start finalizing the design today
zac (Mon, 05 Jun 2017 16:23:30 GMT):
Should be done tomorrow or the next day
zac (Mon, 05 Jun 2017 16:23:51 GMT):
So your way should be a little more clear soon @h4xr
zac (Mon, 05 Jun 2017 16:30:17 GMT):
To clear up confusion the basic idea is this:
• It should be possible to limit interactions with the REST API to certain public keys
• It would be time consuming to do a signature verification on every interaction
• Instead the (likely) solution is to use verify a signature once, and then provide a long-term API-key for further interactions
• Additionally, authorized public keys should be stored on the blockchain with the Config transaction family
• That means it should be possible to submit new public keys to be authorized and have the whole chain be updated (this is STL-261)
agunde (Mon, 05 Jun 2017 16:30:49 GMT):
The command line options for ./bin/rest_api have been updated to be the following:
agunde (Mon, 05 Jun 2017 16:31:03 GMT):
usage: rest_api [-h] [-B BIND] [-C CONNECT] [-t TIMEOUT] [-v]
optional arguments:
-h, --help show this help message and exit
-B BIND, --bind BIND The host and port for the api to run on.
-C CONNECT, --connect CONNECT
The url to connect to a running Validator
-t TIMEOUT, --timeout TIMEOUT
Seconds to wait for a validator response
-v, --verbose Increase level of output sent to stderr
agunde (Mon, 05 Jun 2017 16:31:59 GMT):
There is also now an option to use a config file when starting up a rest_api and an example config file can be found here:
agunde (Mon, 05 Jun 2017 16:32:05 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/rest_api/packaging/rest_api.toml.example
h4xr (Mon, 05 Jun 2017 16:33:27 GMT):
@zac Thanks :D
jsmitchell (Mon, 05 Jun 2017 16:39:35 GMT):
@FlyingTiger https://github.com/hyperledger/sawtooth-core/pull/573 needs a rebase
tkuhrt (Mon, 05 Jun 2017 17:33:53 GMT):
Recording from today's Sawtooth Sprint planning meeting: https://www.uberconference.com/getmp3/AMIfv956n1mDjmNgq7H2ZTOIgTq-hvhwlsA2CTqMTe9dxn9FTJdMxR1ddOdQL3cpYOe391FpwkKJ-4w1M8pX5rbTEBe7wxAyhI6XoRzqBcrV5GqM86ZA6dHY5CDzdi2BgUjErSKCR7pohwQra8HMZOYUbxBwfVVRYg.mp3
amundson (Mon, 05 Jun 2017 17:37:12 GMT):
@tkuhrt thanks! also, thanks for the google calendar you posted earlier, that's great!
tkuhrt (Mon, 05 Jun 2017 21:57:34 GMT):
I am attempting to run through https://intelledger.github.io/app_developers_guide/intro_to_sawtooth.html. I have installed the Sawtooth package on my Ubuntu machine, and I am attempting to run: `sudo validator -vv --public-uri tcp://localhost:8800`. I am getting an error because I do not have a config TOML file in /etc/sawtooth, so the validator is attempting to use default values. Is there a link to how to specify the contents of a config.toml file so that I can pass the `--config-dir` parameter to my validator?
jsmitchell (Mon, 05 Jun 2017 22:08:25 GMT):
@h4xr you are in COMMITTERS now, so your PRs should automatically build
amundson (Mon, 05 Jun 2017 22:11:26 GMT):
@tkuhrt that log message may be more informational than an error message, if it's the one I'm thinking of; you shouldn't really need to specify a config file while going through the app dev guide.
tkuhrt (Mon, 05 Jun 2017 22:12:19 GMT):
Thanks, @amundson. Here is the entire output from my run:
```tkuhrt@sawtooth:~$ sudo validator -vv --public-uri tcp://localhost:8800
[15:00:05.489 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
[15:00:05.490 ERROR cli] No such signing key file: /etc/sawtooth/keys/validator.priv
[15:00:05.491 INFO cli] config [path]: config_dir = "/etc/sawtooth"
[15:00:05.491 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
[15:00:05.492 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
[15:00:05.492 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
[15:00:05.493 ERROR cli] Initialization errors occurred (see previous log ERROR messages), shutting down.
```
amundson (Mon, 05 Jun 2017 22:12:26 GMT):
@tkuhrt tomorrow morning we will do a release which updates the app dev guide. it was going to be this afternoon but there was some github wierdness
tkuhrt (Mon, 05 Jun 2017 22:12:43 GMT):
Yea...I saw github.com went down for a while today.
amundson (Mon, 05 Jun 2017 22:13:00 GMT):
the error there is the "No such signing key file". Do "sudo sawtooth admin keygen"
tkuhrt (Mon, 05 Jun 2017 22:13:05 GMT):
Regarding my error...I created the keys in /home/tkuhrt/sawtooth/keys.
tkuhrt (Mon, 05 Jun 2017 22:13:13 GMT):
How do I specify where it can find my keys?
tkuhrt (Mon, 05 Jun 2017 22:13:45 GMT):
```sawtooth keygen --key-dir /home/tkuhrt/sawtooth/keys validator```
tkuhrt (Mon, 05 Jun 2017 22:14:09 GMT):
Changed it to tkuhrt because the guide I was following was trying to use /home/ubuntu
tkuhrt (Mon, 05 Jun 2017 22:14:21 GMT):
Maybe I should not specify the --key-dir parameter
amundson (Mon, 05 Jun 2017 22:20:42 GMT):
hmm, yeah, that documentation seems incorrect. probably that works in our vagrant environment where we set SAWTOOTH_HOME. The correct command is 'sawtooth admin keygen' which will generate the keys in the validator's directory.
amundson (Mon, 05 Jun 2017 22:20:50 GMT):
@toddojala ^
tkuhrt (Mon, 05 Jun 2017 22:22:04 GMT):
Okay...I had also tried setting SAWTOOTH_HOME, as I saw that documented elsewhere, but that didn't change anything when I ran the validator.
amundson (Mon, 05 Jun 2017 22:22:37 GMT):
well, SAWTOOTH_HOME would get unset when you run sudo
amundson (Mon, 05 Jun 2017 22:23:23 GMT):
if you set SAWTOOTH_HOME, no need to run as root though, so you can just omit sudo
tkuhrt (Mon, 05 Jun 2017 22:23:53 GMT):
It did not seem to pick it up running as non-sudo
tkuhrt (Mon, 05 Jun 2017 22:24:35 GMT):
I did change my `sawtooth keygen` command and re-ran the validator as sudo as suggested, and that works.
tkuhrt (Mon, 05 Jun 2017 22:24:52 GMT):
I have a few issues going through the document so far. Is the right place to report these as a Jira ticket?
amundson (Mon, 05 Jun 2017 22:25:41 GMT):
yes
tkuhrt (Mon, 05 Jun 2017 22:25:54 GMT):
Will do. Thanks for your help...on to the next step.
Dan (Mon, 05 Jun 2017 22:49:51 GMT):
Thanks @tkuhrt. Great to get some feedback on that doc.
tkuhrt (Mon, 05 Jun 2017 23:30:03 GMT):
Created STL-384, STL-385, STL-386, and STL-387. These are related to https://intelledger.github.io/app_developers_guide/environment_setup.html and https://intelledger.github.io/app_developers_guide/intro_to_sawtooth.html all using Ubuntu 16.04.02 with apt package for Sawtooth. Stuck submitting transactions. I will try more later
```
tkuhrt@sawtooth:~$ sudo apt show sawtooth
Package: sawtooth
Version: 0.8.4
Priority: optional
Section: misc
Maintainer: Hyperledger Sawtooth
Dan (Tue, 06 Jun 2017 00:28:16 GMT):
thanks @tkuhrt!
macbookno (Tue, 06 Jun 2017 01:50:06 GMT):
Has joined the channel.
sklymenko (Tue, 06 Jun 2017 05:21:05 GMT):
ebgv
toddojala (Tue, 06 Jun 2017 14:47:58 GMT):
@tkuhrt We are testing our latest doc update right now. We'll let you know when it's ready and available!
zac (Tue, 06 Jun 2017 15:41:59 GMT):
@sklymenko ebgv convefe?
sklymenko (Tue, 06 Jun 2017 16:58:52 GMT):
sorry, my cat taped it accidentally :cat:
benoit.razet (Tue, 06 Jun 2017 17:47:48 GMT):
Has joined the channel.
tkuhrt (Tue, 06 Jun 2017 18:02:19 GMT):
Thanks, @toddojala. Looking forward to the latest. Once you give me the go ahead, I will have another go.
Dan (Tue, 06 Jun 2017 18:27:02 GMT):
I've always relied on :monkey:'s hitting my keyboard when I have to develop. I wonder if :cat2:s would improve my code.
avonpaul (Tue, 06 Jun 2017 21:29:34 GMT):
Has joined the channel.
avonpaul (Tue, 06 Jun 2017 23:13:48 GMT):
Where I can find Bond Family on 0.8? The web gui is open sourced? Thank you
jsmitchell (Tue, 06 Jun 2017 23:24:19 GMT):
Hi @avonpaul - bond hasn't been ported to 0.8
jsmitchell (Tue, 06 Jun 2017 23:24:31 GMT):
You can still find it in the 0.7 branch
avonpaul (Tue, 06 Jun 2017 23:24:37 GMT):
But still on 0.7 right?
jsmitchell (Tue, 06 Jun 2017 23:24:40 GMT):
Yep
avonpaul (Tue, 06 Jun 2017 23:24:46 GMT):
Including GUI?
jsmitchell (Tue, 06 Jun 2017 23:24:55 GMT):
Yep, it should all be there
avonpaul (Tue, 06 Jun 2017 23:25:41 GMT):
Amazing :) Im working on something very interesting for Defence and Intelligence industry, and that sample convince me to keeping exploring Sawtooth
jsmitchell (Tue, 06 Jun 2017 23:26:46 GMT):
Nice!
jsmitchell (Tue, 06 Jun 2017 23:27:01 GMT):
Let us know if you have any questions
avonpaul (Tue, 06 Jun 2017 23:27:26 GMT):
Im not that technical user, but I will contact you regarding additional development or maybe consulting
FlyingTiger (Wed, 07 Jun 2017 01:23:05 GMT):
Hi, everyone. As defined, transactions must be wrapped in a Batch, and must contain the public key of the batch signer in the batcher_pubkey field. So a transaction is only wrapped in a batch, a batch must contain the complete transactions that the transaction_id list in the batch header.
I'll add a new handler that checks the transaction_id list in the batch header against the transaction list in the batch. Batches which don't contain the complete transactions that the transaction_id list in the batch header would be dropped.
What's your point? Looking forward to your reply :)
FlyingTiger (Wed, 07 Jun 2017 01:40:11 GMT):
I posted a new issue, https://jira.hyperledger.org/projects/STL/issues/STL-392
FlyingTiger (Wed, 07 Jun 2017 01:52:40 GMT):
And as documented, there is a strict rule that the transaction_ids field in the batch header contains a list of transaction header_signatures and must be the same order as the transactions field in the batch.
FlyingTiger (Wed, 07 Jun 2017 08:53:26 GMT):
And I tested, transactions in the batch, but not listed by the transaction_ids are accepted and applied. I think this is a serious bug. At least we need to fix it.
mfford (Wed, 07 Jun 2017 13:02:45 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, June 8th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, June 8h
Time: 10-11am CDT
Call-in: 401-283-2000…4807579435#
Conference Link: https://www.uberconference.com/hyperledger-community
International Access Numbers: https://www.uberconference.com/international
Agenda:
1. Introductions-Mark Ford
2. Intro to EVM-Adam Ludvik
3. Overview of Burrow-Benjamin Bollen
4. Burrow & Sawtooth-Adam Ludvik
5. Open Forum
jsmitchell (Wed, 07 Jun 2017 14:01:55 GMT):
@FlyingTiger good find. Absolutely agree we have to fix this. The question is where's the best place to put it? I can see two arguments (there may be others) 1) Expand the scope of Signature Verifier to be a more general gossip message verifier (signature verification, structure, etc.). This minimizes the number of handlers/dispatches that occur. 2) Leave Signature Verifier as is and add a separate handler for structure verification.
agunde (Wed, 07 Jun 2017 14:09:49 GMT):
@FlyingTiger It seems like this check would be very simple to add to your other Validate the transaction_ids field PR https://github.com/hyperledger/sawtooth-core/pull/571 . Both checks should at least be in the same place.
zac (Wed, 07 Jun 2017 14:27:42 GMT):
My instinct would be to make a new handler. Keep everything as modular as possible. There is no overhead with adding new handlers is there?
zac (Wed, 07 Jun 2017 14:28:28 GMT):
Though, I suppose that the argument could be made that the signature verifier _is_ a structure verifier
zac (Wed, 07 Jun 2017 14:29:02 GMT):
It has to know where in the structure the signatures are, so it's not actually particularly compartmentalized.
Dan (Wed, 07 Jun 2017 14:43:18 GMT):
I think some of the original thinking with the signature verifier was that it would contain the compute intensive crypto work and if necessary we could spread that across multiple native threads.
jsmitchell (Wed, 07 Jun 2017 14:46:47 GMT):
@dan yes, indeed
jsmitchell (Wed, 07 Jun 2017 14:46:58 GMT):
strong case for #2
catbus (Wed, 07 Jun 2017 18:45:04 GMT):
Has joined the channel.
zac (Wed, 07 Jun 2017 22:28:07 GMT):
@h4xr A design for On-Chain REST API Authorization has been completed and can be found here:
https://docs.google.com/document/d/1NcHE1ecWAD3FvhftPoiR4w9c8TuUIrNN7MXtFdoYiy4/edit?usp=sharing
zac (Wed, 07 Jun 2017 22:28:44 GMT):
The related JIRA tasks have also been updated to be specific to this design
zac (Wed, 07 Jun 2017 22:29:22 GMT):
Unfortunately the task you were interested in, STL-261 has changed completely
zac (Wed, 07 Jun 2017 22:30:18 GMT):
After further design, it no longer makes sense to have an endpoint dedicated to updating particular Config family data
zac (Wed, 07 Jun 2017 22:31:07 GMT):
That would happen via a normal transaction submission, and the old STL-261 has been replaced with a Config family specific one to make that submission easier
FlyingTiger (Thu, 08 Jun 2017 02:05:16 GMT):
Thanks for your explanation :), I got it. A separate handle is better than expanding the scope of Signature Verifier for the structure verification. @agunde Yes, both checks should at least be in the same place.
shawnm 6 (Thu, 08 Jun 2017 02:37:41 GMT):
Has joined the channel.
h4xr (Thu, 08 Jun 2017 04:21:52 GMT):
@zac Thanks for providing the details. I will take a look today onwards :D
trbs (Thu, 08 Jun 2017 16:10:31 GMT):
Has joined the channel.
tkuhrt (Thu, 08 Jun 2017 16:49:06 GMT):
Recording from today's Tech Forum: https://www.uberconference.com/getmp3/AMIfv94R7VsJm9tYAXIEdJYX5VNuPdFog6ooMbQvYxHSWqW2H0cycfVbWWqtnx9PuQ1BUMtu0GEcAoqeyRxiRv-YIsNppBAa5edU24TxgW-8XDg59CCyrU82U-99v77GosWB__Bnf4Rt4XMVJwLrmb5ebFn5wJB3tQ.mp3
jjason (Thu, 08 Jun 2017 17:10:39 GMT):
I believe that `sawtooth batch-status` is incongruous with the existing `sawtooth batch` commands and is confusing. If we have `sawtooth batch-status`, then why is it not also `sawtooth batch-show`??? @zac has proposed that instead, because what we really want is the status of a batch submission and that is effected by `sawtooth submit`, that it should really be `sawtooth submit status`.
Dan (Thu, 08 Jun 2017 17:12:07 GMT):
what will `sawtooth batch show` return if the batch is not committed?
zac (Thu, 08 Jun 2017 17:12:07 GMT):
My feeling is that the fact that we are checking on batches is somewhat incidental. What we are really interested in is the status of submissions.
zac (Thu, 08 Jun 2017 17:12:31 GMT):
@dan Whatever the 404 response is
zac (Thu, 08 Jun 2017 17:12:31 GMT):
@Dan Whatever the 404 response is
zac (Thu, 08 Jun 2017 17:12:31 GMT):
@Dan an Whatever the 404 response is
zac (Thu, 08 Jun 2017 17:12:55 GMT):
I don't remember off hand what exactly that is
zac (Thu, 08 Jun 2017 17:13:14 GMT):
"The batch does not exist on the blockchain"
Dan (Thu, 08 Jun 2017 17:13:36 GMT):
thanks @zac. That seems consistent at least that all the batch commands work on committed batches.
jjason (Thu, 08 Jun 2017 17:13:49 GMT):
Agreed.
jjason (Thu, 08 Jun 2017 17:14:09 GMT):
If `sawtooth batch` is for committed batches, then it seems more consistent that it be `sawtooth submit status`
amundson (Thu, 08 Jun 2017 17:14:47 GMT):
it should be 'sawtooth batch status'
amundson (Thu, 08 Jun 2017 17:15:05 GMT):
one could argue pretty well that submit should be called 'sawtooth batch submit'
zac (Thu, 08 Jun 2017 17:16:16 GMT):
Unless we rename both, I would not rename either
zac (Thu, 08 Jun 2017 17:16:58 GMT):
(to that)
jjason (Thu, 08 Jun 2017 17:17:02 GMT):
I am perfectly happy with `sawtooth batch submit` and `sawtooth batch status`
Dan (Thu, 08 Jun 2017 17:17:43 GMT):
I feel like we could drag this out way longer.
zac (Thu, 08 Jun 2017 17:18:08 GMT):
I feel like they add an unnecessary implementation detail into the UI
Dan (Thu, 08 Jun 2017 17:18:14 GMT):
Shouldn't argument 1 be a verb?
zac (Thu, 08 Jun 2017 17:18:22 GMT):
And I prefer `sawtooth submit` and `sawtooth submit status`
zac (Thu, 08 Jun 2017 17:18:33 GMT):
But that is the end of my objections
zac (Thu, 08 Jun 2017 17:18:48 GMT):
I could live with `sawtooth batch submit` and `sawtooth batch status`
jjason (Thu, 08 Jun 2017 17:20:27 GMT):
I have a preference for `sawtooth batch ...`, but don't feel strongly enough to fight for that over `sawtooth submit ...`. However, I do feel that `sawtooth batch-status` is confusing and inconsistent.
zac (Thu, 08 Jun 2017 17:21:38 GMT):
Yes, I agree that is misnamed
zac (Thu, 08 Jun 2017 17:21:51 GMT):
At the time I didn't think it through enough to consider alternatives
zac (Thu, 08 Jun 2017 17:21:51 GMT):
When the PR was submitted, I didn't think it through enough to consider alternatives
amundson (Thu, 08 Jun 2017 19:12:03 GMT):
```The current docker compose files use generic names for container used to run
nose2, which can be confusing in output pasted into chat since it lacks
sufficient context to easily determine the specific container and associated
test. Thus, it is desirable to rename the generic container names with more
specific container names.
Recommendation:
- Given a python test module file, remove '.py' to determine the test's
BASENAME. Tests in other languages should define a convention for
determining BASENAME. Examples:
test_battleship_tp.py -> test_battleship_tp
test_xo_tp.py -> test_xo_tp
- Docker Compose YAML filenames should be of the format
BASENAME[_SUFFIX].yaml, where BASENAME is used ans supplemented by a SUFFIX
to make it more specific if necessary (for example, due to different
language implementations). Examples docker compose files:
test_battleship_tp.yaml
test_xo_tp_python.yaml
test_xo_tp_go.yaml
- The container running the test should be derived from the Docker Compose
YAML filename by removing the file extension ".yaml" and prefixing it with
the string "runner_". In this context, "runner" is short for "test runner"
such as nose2-3. The reason for prefixing the container with this string
is to differentate the container name from the test name. (Alternate method
here would be to omit the prefix "runner_" and rely on Docker Compose's
number extension to differentiate.) Example container names:
runner_test_battleship_tp
runner_test_xo_tp_python
runner_test_xo_tp_go
- The container running a transaction processor should match the name of the
transaction processor. For example:
tp_xo_python (in future: xo-tp-python)
tp_xo_go (in future: xo-tp-go)
```
amundson (Thu, 08 Jun 2017 19:12:38 GMT):
the above is an attempt to distill a conversation @drozd and I just had about container names
fz (Thu, 08 Jun 2017 19:13:15 GMT):
Hello everyone. Is there a recording of todays recording of tech forum meeting?
agunde (Thu, 08 Jun 2017 19:13:40 GMT):
@fz Recording from today's Tech Forum: https://www.uberconference.com/getmp3/AMIfv94R7VsJm9tYAXIEdJYX5VNuPdFog6ooMbQvYxHSWqW2H0cycfVbWWqtnx9PuQ1BUMtu0GEcAoqeyRxiRv-YIsNppBAa5edU24TxgW-8XDg59CCyrU82U-99v77GosWB__Bnf4Rt4XMVJwLrmb5ebFn5wJB3tQ.mp3
agunde (Thu, 08 Jun 2017 19:13:53 GMT):
It was posted above
fz (Thu, 08 Jun 2017 19:13:53 GMT):
Thanks @agunde !
adamludvik (Thu, 08 Jun 2017 19:58:51 GMT):
Message Attachments
adamludvik (Thu, 08 Jun 2017 19:59:38 GMT):
Message Attachments
adamludvik (Thu, 08 Jun 2017 20:00:07 GMT):
@fz I uploaded the first and last slide decks from the tech forum for you to follow along with, since the recording is only audio.
fz (Thu, 08 Jun 2017 20:01:10 GMT):
@adamludvik! thank you! this helps a lot
zac (Thu, 08 Jun 2017 21:43:11 GMT):
Why doesn't `tp_xo_python` print stack traces or error types?
zac (Thu, 08 Jun 2017 21:43:54 GMT):
A protobuf error:
```
ubuntu@ubuntu-xenial:/project/sawtooth-core$ tp_xo_python -vv
[20:51:26.498 INFO core] register attempt: OK
[20:51:31.501 DEBUG core] received message of type: TP_PROCESS_REQUEST
[20:51:31.502 WARNING core] Invalid Transaction Name cannot contain "|"
Error: InvalidTransaction('Name cannot contain "|"',) has type
zac (Thu, 08 Jun 2017 21:44:30 GMT):
An assert error:
```
ubuntu@ubuntu-xenial:/project/sawtooth-core$ tp_xo_python -vv
[21:40:06.349 INFO core] register attempt: OK
[21:40:16.784 DEBUG core] received message of type: TP_PROCESS_REQUEST
Error: Error data must be byte encoded
```
zac (Thu, 08 Jun 2017 21:45:09 GMT):
Looks like it just prints "Error: " and then whatever the message is
zac (Thu, 08 Jun 2017 21:45:14 GMT):
Seems unhelpful
adamludvik (Thu, 08 Jun 2017 21:46:57 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/xo_python/sawtooth_xo/processor/main.py#L72
zac (Thu, 08 Jun 2017 21:47:23 GMT):
That'd do it
zac (Thu, 08 Jun 2017 21:48:08 GMT):
What is the reasoning behind that?
adamludvik (Thu, 08 Jun 2017 21:50:56 GMT):
Not sure, there should be an extra line that prints the stack trace probably
zac (Thu, 08 Jun 2017 21:51:18 GMT):
The type of error would be nice too
adamludvik (Thu, 08 Jun 2017 21:52:12 GMT):
This is better: https://github.com/hyperledger/sawtooth-core/blob/master/bin/run_docker_test#L398
zac (Thu, 08 Jun 2017 21:52:39 GMT):
Looks like a lot of the scripts have some version of that:
https://github.com/hyperledger/sawtooth-core/blob/master/rest_api/sawtooth_rest_api/rest_api.py#L192
zac (Thu, 08 Jun 2017 21:53:19 GMT):
I am curious about both the purpose, and the best practice
jsmitchell (Thu, 08 Jun 2017 21:53:38 GMT):
stack traces are pretty cool for developers
jsmitchell (Thu, 08 Jun 2017 21:53:49 GMT):
but they are not a great user experience for others
zac (Thu, 08 Jun 2017 21:54:22 GMT):
Well, in theory any non-develop time errors should be getting caught earlier, yes?
zac (Thu, 08 Jun 2017 21:54:52 GMT):
Or you have not done your job properly as a developer.
jsmitchell (Thu, 08 Jun 2017 21:55:11 GMT):
i don't know what a develop time error is
zac (Thu, 08 Jun 2017 21:55:36 GMT):
Triggered by the developer screwing up
zac (Thu, 08 Jun 2017 21:55:42 GMT):
Should be caught in development
jsmitchell (Thu, 08 Jun 2017 21:55:55 GMT):
aka all errors?
amundson (Thu, 08 Jun 2017 21:56:11 GMT):
says a former sysadmin
zac (Thu, 08 Jun 2017 21:57:49 GMT):
In the specific case I am working on, the transaction processor developer needs to pass `bytes` into a parameter. If they pass in not-bytes, things will break.
zac (Thu, 08 Jun 2017 21:58:20 GMT):
They may not realize this during development, and pass in a string instead.
zac (Thu, 08 Jun 2017 21:58:33 GMT):
But then all they will get is `Error: Error data must be byte encoded`
zac (Thu, 08 Jun 2017 21:59:32 GMT):
At that point I have to do a search for that string in the codebase
zac (Thu, 08 Jun 2017 21:59:40 GMT):
And I am pretty annoyed as a developer
FlowersJeff (Fri, 09 Jun 2017 03:09:25 GMT):
Has joined the channel.
FlowersJeff (Fri, 09 Jun 2017 03:13:51 GMT):
Just checking in, and wondering if there's a better sub for sawtooth related installation questions. Thanks in advance.
jsmitchell (Fri, 09 Jun 2017 03:15:21 GMT):
This is the best place, but it's pretty late for most of the team.
FlyingTiger (Fri, 09 Jun 2017 03:38:48 GMT):
Yes, `sawtooth batch submit` and `sawtooth batch status` are really kind to users. I'll changed the batch-status command to the batch status command.
FlowersJeff (Fri, 09 Jun 2017 05:45:16 GMT):
@jsmitchell awesome and understand about the time - I'm heading in myself. I'm basically looking for recommendations around hardware. I've tried two computers, and a bit gun shy now that they both failed. Sawtooth requires SGX to properly compile/install (I'll start there - fairly sure I know that it does, but might be wrong)? If so, then what box works - or any >2013 intel CPU system would be fine. Would me running down to costco and picking up a generic box/Dell and throwing ubuntu be ok - or is there some cpu/mb combos that the group recommends. One personal note, I actually don't like NUCs as I've had issues with a few of them. Any input is greatly appreciated.
Calvin_Heo (Fri, 09 Jun 2017 09:01:04 GMT):
Has joined the channel.
rezamt (Fri, 09 Jun 2017 10:21:52 GMT):
Has joined the channel.
jsmitchell (Fri, 09 Jun 2017 13:30:37 GMT):
@FlowersJeff We ship with a simulator which does not require SGX, so you can run it on any platform. Once you get to the point where you want to test/deploy real SGX enclaves, you will need a machine with a Skylake or newer CPU and BIOS support for enabling SGX.
jsmitchell (Fri, 09 Jun 2017 13:32:09 GMT):
Our standard recommendation for this is a NUC
jsmitchell (Fri, 09 Jun 2017 13:32:54 GMT):
Specifically the NUC7i7BNH model
Dan (Fri, 09 Jun 2017 13:52:50 GMT):
thanks @jsmitchell. To be really clear for @FlowersJeff I'll reiterate that SGX is NOT required to use sawtooth. We have a consensus mechanism called PoET. That can run with simulated enclaves and offers crash fault tolerance. We will also be releasing an SGX version that will offer Byzantine fault tolerance. In the future we also plan to have other consensus mechanisms like BFT or raft variants.
jsmitchell (Fri, 09 Jun 2017 14:34:35 GMT):
@FlyingTiger are you around?
kelly_ (Fri, 09 Jun 2017 14:45:35 GMT):
@FlowersJeff here is a partial list of sgx hardware - https://github.com/ayeks/SGX-hardware
kelly_ (Fri, 09 Jun 2017 14:45:54 GMT):
we have used HP machines before. the one key thing is that sometimes SGX needs to be enable in the BIOS
kelly_ (Fri, 09 Jun 2017 14:46:21 GMT):
also SGX is only available on 2015+ processors (I think that was 6th generation core)
FlowersJeff (Fri, 09 Jun 2017 15:16:57 GMT):
@kelly I had saw that, and thought maybe it wasn't updated / a bit scared, as that list seemed to indicate only a handful of valid (validated ;-) ) systems that were supported. Do you know which HP machines you're using now and if they are fine. I really just don't want to be caught off guard again. Thanks.
FlowersJeff (Fri, 09 Jun 2017 15:19:41 GMT):
@jsmitchell @Dan I'm heading in a bit later today, I'll dig up the error and post. Perhaps I'm misreading it.
jsmitchell (Fri, 09 Jun 2017 15:44:23 GMT):
@FlowersJeff yep, let us know
TomBarnes (Fri, 09 Jun 2017 16:21:55 GMT):
@amundson regarding naming convention, is it our convention that each transaction processor is to be run in a separate container?
zac (Fri, 09 Jun 2017 16:25:24 GMT):
@FlyingTiger Please change `sawtooth submit` to `sawtooth batch submit` in the same PR, to keep things consistent
zac (Fri, 09 Jun 2017 16:25:24 GMT):
@FlyingTiger I would want to change `sawtooth submit` to `sawtooth batch submit` in the same PR, to keep things consistent
zac (Fri, 09 Jun 2017 16:29:43 GMT):
Looks like these references would also have to change:
• https://github.com/hyperledger/sawtooth-core/blob/master/bin/generate_cli_output#L45
• https://github.com/hyperledger/sawtooth-core/blob/master/core/sawtooth/cli/submit.py#L57
• https://github.com/hyperledger/sawtooth-core/blob/master/docs/source/cli/sawtooth.rst#sawtooth-submit
amundson (Fri, 09 Jun 2017 16:42:01 GMT):
@Tom Barnes yes
amundson (Fri, 09 Jun 2017 17:12:11 GMT):
@FlyingTiger @zac separate PRs should be fine too
zac (Fri, 09 Jun 2017 21:57:54 GMT):
Question for the core developers
zac (Fri, 09 Jun 2017 21:58:18 GMT):
Is there already a cache of invalid batches hanging around somewhere in the validator code?
zac (Fri, 09 Jun 2017 21:58:47 GMT):
I recall talk of something like that to prevent resubmitting batches that had been rejected
jsmitchell (Fri, 09 Jun 2017 21:59:22 GMT):
publisher has a bad_batches
jsmitchell (Fri, 09 Jun 2017 22:00:25 GMT):
those aren't necessarily invalid though
zac (Fri, 09 Jun 2017 22:01:27 GMT):
How else might a batch get `bad`?
jsmitchell (Fri, 09 Jun 2017 22:02:36 GMT):
well, i think it throws any batch after the first failed batch in that list
zac (Fri, 09 Jun 2017 22:03:27 GMT):
```
# - build three lists of batches:
# 1) a lists of all valid transactions that will be included in the
# block, these are added to the BlockBuilder to include in the Block
# 2) all batches that were not executed, these are to be returned
# in the pending_batches list
# 3) all batches that failed processing. These will be discarded.
# This list is needed in some case when the block is abandoned to
# make sure they do not remain in the pending_batches list.
```
zac (Fri, 09 Jun 2017 22:04:07 GMT):
Batches should always be processed if they aren't themselves invalid, right?
zac (Fri, 09 Jun 2017 22:04:35 GMT):
It's the transactions in a batch that are thrown out if one transaction is bad
jsmitchell (Fri, 09 Jun 2017 22:04:56 GMT):
if a transaction is bad then the batch is bad
zac (Fri, 09 Jun 2017 22:05:02 GMT):
yes
zac (Fri, 09 Jun 2017 22:05:31 GMT):
And other transactions in a batch will not get rerun elsewhere (unless resubmitted)
zac (Fri, 09 Jun 2017 22:05:55 GMT):
But you are saying if a batch is bad, other batches that were being considered for a block will be thrown out?
jsmitchell (Fri, 09 Jun 2017 22:06:21 GMT):
anyway, whether or not bad_batches is the right list, that data needs to be put somewhere else because it's currently only scoped to that finalize_block method
zac (Fri, 09 Jun 2017 22:06:32 GMT):
yes, this is true
jsmitchell (Fri, 09 Jun 2017 22:06:33 GMT):
it looks like it is the right list
zac (Fri, 09 Jun 2017 22:07:08 GMT):
if they are the same thing though, might be worthwhile to replace bad_batches with the cache I'm building or otherwise refactor things
zac (Fri, 09 Jun 2017 22:07:42 GMT):
Do people have an instinct as to where a temporary cache of invalid batches should live?
zac (Fri, 09 Jun 2017 22:07:42 GMT):
Do people have an instinct as to where a temporary cache of (the ids and error messages of) invalid batches should live?
zac (Fri, 09 Jun 2017 22:08:13 GMT):
The Completer has a pending batch cache
jsmitchell (Fri, 09 Jun 2017 22:09:24 GMT):
what is this object going to look like?
zac (Fri, 09 Jun 2017 22:09:59 GMT):
I will use a TimedCache, which is basically a purgable dict
zac (Fri, 09 Jun 2017 22:10:09 GMT):
Structure will be something along the lines of:
zac (Fri, 09 Jun 2017 22:11:11 GMT):
```
{
{BATCH ID}: {
message: "This is why I failed",
external_data: b"some bytes maybe"
}
}
```
zac (Fri, 09 Jun 2017 22:11:11 GMT):
```
{
{BATCH ID}: {
message: "This is why I failed",
extended_data: b"some bytes maybe"
}
}
```
zac (Fri, 09 Jun 2017 22:11:11 GMT):
```
{
{BATCH ID}: {
message: 'This is why I failed',
extended_data: b'some bytes maybe'
},
. . .
}
```
jsmitchell (Fri, 09 Jun 2017 22:14:16 GMT):
how is it accessing the data from the block store now?
zac (Fri, 09 Jun 2017 22:14:37 GMT):
What is the "it" in that sentence?
jsmitchell (Fri, 09 Jun 2017 22:14:54 GMT):
the thingy that services the rest_api
jsmitchell (Fri, 09 Jun 2017 22:15:00 GMT):
is it some handler?
zac (Fri, 09 Jun 2017 22:15:22 GMT):
Ah, it access the block store directly, and also gets the batch cache from the completer
jsmitchell (Fri, 09 Jun 2017 22:15:43 GMT):
what is the "it" in that sentence?
zac (Fri, 09 Jun 2017 22:16:02 GMT):
a reference to the block store is passed into the appropriate handlers
zac (Fri, 09 Jun 2017 22:16:19 GMT):
it == any client handler that needs the block store
amundson (Fri, 09 Jun 2017 22:17:28 GMT):
"Block, Batch, Transaction Status Knower"
jsmitchell (Fri, 09 Jun 2017 22:17:48 GMT):
you could create something with an appropriate interface and pass it to both the Journal Publisher and the handlers
zac (Fri, 09 Jun 2017 22:17:52 GMT):
@pschwarz will love the long name
amundson (Fri, 09 Jun 2017 22:18:11 GMT):
that's what it is called in the arch diagram
jsmitchell (Fri, 09 Jun 2017 22:19:20 GMT):
This is more like a "Temporary Bad Batch Knower"
jsmitchell (Fri, 09 Jun 2017 22:19:23 GMT):
it is limited in scope
jsmitchell (Fri, 09 Jun 2017 22:19:36 GMT):
not as powerful as the "Block, Batch, Transaction Status Knower"
zac (Fri, 09 Jun 2017 22:19:52 GMT):
So `journal.temporay_block_batch_transaction_status_knower_tm`
amundson (Fri, 09 Jun 2017 22:19:56 GMT):
not necessarily. it could also be the component that talks to journal to see if it's committed.
amundson (Fri, 09 Jun 2017 22:20:09 GMT):
it shouldn't be in journal
zac (Fri, 09 Jun 2017 22:20:21 GMT):
that would be interesting
zac (Fri, 09 Jun 2017 22:20:28 GMT):
compartmentalize all that querying
zac (Fri, 09 Jun 2017 22:20:39 GMT):
Would simplify the client handlers
zac (Fri, 09 Jun 2017 22:20:56 GMT):
Though I don't think anything else would use that logic would it?
zac (Fri, 09 Jun 2017 22:21:37 GMT):
And to be fair, that logic is just: Is it on the chain? No. Is it invalid? No. Is it still cached? No. Then I have no idea.
jsmitchell (Fri, 09 Jun 2017 22:22:14 GMT):
knowers know they don't not know
jsmitchell (Fri, 09 Jun 2017 22:22:26 GMT):
let me punctuate that
jsmitchell (Fri, 09 Jun 2017 22:22:38 GMT):
knowers know. they don't not know.
zac (Fri, 09 Jun 2017 22:23:14 GMT):
That period helped a lot actually
zac (Fri, 09 Jun 2017 22:27:14 GMT):
So, if not the journal, who tracks what batches have recently been rejected?
zac (Fri, 09 Jun 2017 22:27:19 GMT):
The executor?
zac (Fri, 09 Jun 2017 22:27:46 GMT):
That's the thing that did the rejecting
zac (Fri, 09 Jun 2017 22:28:47 GMT):
Or handled the rejecting rather
amundson (Fri, 09 Jun 2017 22:29:21 GMT):
it's a separate component in the architecture
amundson (Fri, 09 Jun 2017 22:30:12 GMT):
it keeps information around for the sole purpose of responding to clients, and none of the other components care about that information anymore
amundson (Fri, 09 Jun 2017 22:31:01 GMT):
it probably needs to be some sort of notification coming out of the journal to that component to tell it the information so that the journal can then forget about it
zac (Fri, 09 Jun 2017 22:31:24 GMT):
The publisher could conceivably use it
zac (Fri, 09 Jun 2017 22:31:32 GMT):
It keeps track of bad batches internally at the moment
FlyingTiger (Sat, 10 Jun 2017 02:51:31 GMT):
@zac Did you work on changing `sawtooth submit` to `sawtooth batch submit`?
zac (Sat, 10 Jun 2017 13:31:45 GMT):
I did not
hoichong (Sat, 10 Jun 2017 19:00:03 GMT):
Has joined the channel.
hoichong (Sat, 10 Jun 2017 19:09:26 GMT):
Hi,
I have manage to follow this doc : http://intelledger.github.io/0.8/app_developers_guide/ubuntu.html
and got sawtooth-lake installed and validator started and tp_config family processor started and rest_api started
also able to use sawtooth block list to query the blocks in the blockchain
when I run the tp_intkey_python processor to test loading the intKeys in with these commands
$ intkey create_batch
$ intkey load -f batches.intkey
on the validator console output, there are error thrown
indexError: list index out of range
Any ideas what is wrong with my setup ?
jsmitchell (Sat, 10 Jun 2017 19:10:38 GMT):
Hmm @hoichong can you paste the stack trace here?
jsmitchell (Sat, 10 Jun 2017 19:11:11 GMT):
Also, you can try 'intkey workload' which will submit transactions at a constant rate
hoichong (Sat, 10 Jun 2017 19:16:04 GMT):
Thanks for the help... here are some stacktraces
[18:15:39.281 [Thread-6] executor DEBUG] failing transaction 727c6a3c4b547c8ef9fc895523f4d5dd8340a36aa28cdb0a99b38fb6946fd9f942708d29233bf1bbff2fdb802cc1$
[18:15:39.291 [Thread-6] executor DEBUG] failing transaction fe371a0f2331f00ad1300e282ba60dddf6ae273d36eb3ddc51bca33555602e1347d698f261dae686d1246f673c98$
[18:15:39.330 [Thread-6] executor DEBUG] failing transaction c7c410e10ffa4d182ca7ad7304ffcc6167977ee40961368f4b2ec2a8c859cd0163c99e87d2430fd07ce0125e8cd6$
[18:15:39.353 [Thread-17] publisher DEBUG] Batch a2dd7401a1f9514a3972ff3ade9945e827dd87806498f556b828478dce0c216501d6bbcf4b1cc2da4b9014be95329ac5e4822f3d$
[18:15:39.353 [Thread-17] publisher DEBUG] Batch 87a538f56a056b9a5d678477cdb9f196ff1380700922ed39e52a8b584c121a92219cb0ac2de9234aa829ce192ec75817a927049d$
[18:15:39.353 [Thread-17] publisher DEBUG] Batch 7cd473980b7127f993c8ad7f9cac31308d5601c694e888648312fee249cafd6302048259d35e1a99d619d73d19db908640b9e0b6$
[18:15:39.354 [Thread-17] publisher DEBUG] Batch e68e5cef8c5e438d096cf133a2928dd354007373272e7814749ac7354a19bbef3a2c08dd611ee6732429a52e45ec5e7fe6aa28d4$
[18:15:39.354 [Thread-17] publisher DEBUG] Batch fa424778c2f78e38b2692d3b17a6657af9cabf518045fc88b90149b91e7d05791f61a8cc35886481867209f127d37d38c81601c9$
[18:15:39.354 [Thread-17] publisher DEBUG] Batch ea43352558255f369a148d19a2508bf374ce7bb0f7aa20c31e9a1f6282831b993b06169bdac6a619590affccc863a6bd314d3d2d$
[18:15:39.355 [Thread-17] publisher DEBUG] Batch 2999faf7fcee512a900db3531a524b3513bbe366424449379e6923643947a4d606376922e2f1ccac69fd68952efc28fbe9883024$
[18:15:39.363 [Thread-17] publisher DEBUG] Batch d34b5d0ade43bb8cd090a686c4bf19b9d1ba462dc4e1731beb4fb6e29137b88f79be703eec6003607cb603af4eaea6becc02a9a0$
[18:15:39.363 [Thread-17] publisher DEBUG] Batch 705c0becc265b9ba6f7fce9ad99a9dd234165f28202b14a0c5fe9e381fcdd0157c7c04bbe3cc0146eaa6d96514e75ac273d3a5a8$
[18:15:39.364 [Thread-17] publisher DEBUG] Abandoning block (2, S:, P:d83ada39): no batches added
[18:15:39.372 [InterconnectThread-5] interconnect DEBUG] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'6cd080799eae4c74'
[18:15:39.492 [Thread-17] publisher DEBUG] Transaction rejected due missing dependency, transaction 3719d5d94f09f8264834b7d67f702395dcdbaa41ed21d7d482bee$
[18:15:39.493 [Thread-17] publisher DEBUG] Dropping batch due to missing dependencies: 7364a1a06f22cfa31ff5fc6fc5708c2e585cd7188a858a26a6de5a398a827e9c04$
[18:15:39.494 [Thread-17] publisher DEBUG] Transaction rejected due missing dependency, transaction d88d66b1f423a394dbe5f9dbe99d98618400c0767d84b4e4f411b$
[18:15:39.495 [Thread-17] publisher DEBUG] Dropping batch due to missing dependencies: 8430156ed491e3472c1403e8c56552ee0430f404e975d11955abe357861981d559$
[18:15:39.496 [Thread-17] publisher DEBUG] Transaction rejected due missing dependency, transaction 3e0fd31ac4b7efb786747dfea6a51d9ab46d1df9602d307c36208$
[18:15:39.497 [Thread-17] publisher DEBUG] Dropping batch due to missing dependencies: 4fa78c3fd324b0727e8f467bf6c35ea49de6618b7abcd67524d1a01b703625d812$
hoichong (Sat, 10 Jun 2017 19:17:02 GMT):
[18:15:41.478 [Thread-17] publisher DEBUG] Transaction rejected due missing dependency, transaction 3e402f093d3e233c8d9d2d08e5443a59d4c9b07d81799c3e61181$
[18:15:41.480 [Thread-17] publisher DEBUG] Dropping batch due to missing dependencies: 92320eeb6afa903ad933bb15476cd011a74a43ba17968eec209c4295c0c499b35a$
[18:15:41.482 [Thread-17] publisher CRITICAL] on_check_publish_block exception.
[18:15:41.484 [Thread-17] publisher ERROR] list index out of range
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/publisher.py", line 502, in on_check_publish_block
pending_batches)
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/publisher.py", line 202, in finalize_block
self._scheduler.complete(block=True)
File "/usr/lib/python3/dist-packages/sawtooth_validator/execution/scheduler_serial.py", line 217, in complete
self._calculate_state_root_if_not_already_done()
File "/usr/lib/python3/dist-packages/sawtooth_validator/execution/scheduler_serial.py", line 189, in _calculate_state_root_if_not_already_done
last_txn_signature = self._last_in_batch[-1]
IndexError: list index out of range
[18:15:41.514 [Thread-17] publisher DEBUG] Transaction rejected due missing dependency, transaction b3f2633c8caba19e7106028b81b2bf4faedb82817c254914c7cba$
hoichong (Sat, 10 Jun 2017 19:17:26 GMT):
My environment is a Vagrant box - Virtualbox
jsmitchell (Sat, 10 Jun 2017 19:18:01 GMT):
Ok, thanks. There were some changes merged in to the scheduler recently.
jsmitchell (Sat, 10 Jun 2017 19:18:18 GMT):
@adamludvik ^
tuliomonteiro (Sat, 10 Jun 2017 21:27:27 GMT):
Has joined the channel.
FlyingTiger (Mon, 12 Jun 2017 07:47:17 GMT):
@zac OK ,I'll work on changing `sawtooth submit` to `sawtooth batch submit`.
jsmitchell (Mon, 12 Jun 2017 14:00:03 GMT):
@FlyingTiger are you still around?
jsmitchell (Mon, 12 Jun 2017 14:00:59 GMT):
@FlyingTiger did you see the test errors on your signature verifier refactor PR?
Dan (Mon, 12 Jun 2017 14:11:19 GMT):
What's our default sawtooth directory? Is it intended to be "~/sawtooth/" or "~/.sawtooth/" I see different behavior with `sawtooth admin` and `sawtooth config` but I'm also on a hand rolled ubuntu environment and not vagrant so could be my own doing.
Dan (Mon, 12 Jun 2017 14:11:19 GMT):
What's our default sawtooth directory? Is it intended to be ~/sawtooth/ or ~/.sawtooth/ I see different behavior with `sawtooth admin` and `sawtooth config` but I'm also on a hand rolled ubuntu environment and not vagrant so could be my own doing.
jsmitchell (Mon, 12 Jun 2017 14:19:31 GMT):
@FlyingTiger https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-605/7/console
adamludvik (Mon, 12 Jun 2017 14:46:37 GMT):
@jsmitchell @hoichong I was not able to reproduce the issue, but it appears the docs are referencing different versions so I will work on fixing those. @hoichong What vagrant image are you using? Are you using the sawtooth vagrant provisioning tools?
jsmitchell (Mon, 12 Jun 2017 14:55:43 GMT):
@adamludvik seems like we should at least check the length of that list
adamludvik (Mon, 12 Jun 2017 15:50:28 GMT):
will do
adamludvik (Mon, 12 Jun 2017 16:43:45 GMT):
Here is my proposed solution: https://github.com/hyperledger/sawtooth-core/pull/620
GhadiShayban (Mon, 12 Jun 2017 19:02:03 GMT):
Has joined the channel.
hoichong (Mon, 12 Jun 2017 19:02:22 GMT):
@adamludvik I am using Ubuntu Xenial image, not using sawtooth vagrant provisioning tools. I am using sawtooth stable.
I re-did Sawtooth setup again from the beginning and this time I did not run this command "" sawtooth config proposal create --key /tmp/sawtooth.priv sawtooth.validator.transaction_families='[{"family": "intkey", "version": "1.0", "encoding": "application/protobuf"}, {"family":"sawtooth_config", "version":"1.0", "encoding":"application/protobuf"}]' ""
I run the command "tp_config tcp://localhost:40000" first and quit (ctrl-c) and then run this command "tp_intkey_python -v tcp://127.0.0.1:40000"
after that, I am able to get "intkey workload" to work fine.
GhadiShayban (Mon, 12 Jun 2017 19:05:27 GMT):
Can someone point me to the necessary setup that would allow me to secure the gossip layer from some random machine joining?
jsmitchell (Mon, 12 Jun 2017 19:08:16 GMT):
@agunde ^
jsmitchell (Mon, 12 Jun 2017 19:10:54 GMT):
@ghadishayban more coming on that topic soon. Currently you can establish a network wide keypair (`network_public_key` and `network_private_key` in config) that you would share sideband with all the nodes on your network.
jsmitchell (Mon, 12 Jun 2017 19:11:20 GMT):
per node permissioning work is in progress
GhadiShayban (Mon, 12 Jun 2017 19:15:15 GMT):
Thank you @jsmitchell . (Confirming an assumption: securing the REST gateway is done through the pedestrian ways you'd normally secure it, e.g. authenticating proxy)
jsmitchell (Mon, 12 Jun 2017 19:15:23 GMT):
yep
GhadiShayban (Mon, 12 Jun 2017 19:15:32 GMT):
:ok_hand_tone3:
jsmitchell (Mon, 12 Jun 2017 19:15:38 GMT):
@zac ^
jsmitchell (Mon, 12 Jun 2017 19:16:49 GMT):
@GhadiShayban http://intelledger.github.io/sysadmin_guide/rest_auth_proxy.html
GhadiShayban (Mon, 12 Jun 2017 19:18:39 GMT):
Anything else besides gossip layer and http that merits security considerations?
jsmitchell (Mon, 12 Jun 2017 19:18:58 GMT):
you can use zmq.auth.create_certificates() in the pyzmq package to create key material for curve ZMQ
jsmitchell (Mon, 12 Jun 2017 19:19:54 GMT):
@GhadiShayban there is the 'component' service, runs on port 4004 by default and allows the components to talk to one another. Assuming you are running that all on one machine, you can bind that port locally only.
Dan (Mon, 12 Jun 2017 20:01:06 GMT):
Fyi, @GhadiShayban That port setting (4004) is a recent change on master.
GhadiShayban (Mon, 12 Jun 2017 20:01:28 GMT):
yeah a coworker just ran into that
GhadiShayban (Mon, 12 Jun 2017 20:01:36 GMT):
40000 => 4004 right?
GhadiShayban (Mon, 12 Jun 2017 20:01:56 GMT):
Also, 'component' is synonymous with 'gossip/zmq' right?
Dan (Mon, 12 Jun 2017 20:04:25 GMT):
that's right we were defaulting to port 40000 but changed due to some odd bugs
GhadiShayban (Mon, 12 Jun 2017 20:04:48 GMT):
that sounds fun to debug
GhadiShayban (Mon, 12 Jun 2017 20:06:53 GMT):
https://github.com/hyperledger/sawtooth-core/commit/3db584200f5bafe8c193daefc69ea237a6563f7f <-- totally curious, but what kind of bugs manifested on one port but not another?
jsmitchell (Mon, 12 Jun 2017 20:18:31 GMT):
@GhadiShayban ugh. We were getting intermittent collisions with outgoing ephemeral TCP ports!
boydjohnson (Mon, 12 Jun 2017 22:14:08 GMT):
@GhadiShayban Something you said that didn't get addressed. "Also, 'component' is synonymous with 'gossip/zmq' right?": component in the cli for validator refers to the interface for transaction processors and the rest api, which also uses zmq. The external validator-to-validator interface is referred to as 'network' in the validator cli.
lm_nop (Mon, 12 Jun 2017 23:17:29 GMT):
Has joined the channel.
Dan (Tue, 13 Jun 2017 02:09:05 GMT):
Good catch @boydjohnson ! I skipped over that part by accident.
zgalvin111 (Tue, 13 Jun 2017 11:37:04 GMT):
Has joined the channel.
zgalvin111 (Tue, 13 Jun 2017 11:39:19 GMT):
Hey everyone, I am new to Sawtooth and I have a question about transaction families. Are transaction families a group of people that all agree on the same functionality of the blockchain? So they all agree on the same type of consensus and etc
zac (Tue, 13 Jun 2017 13:29:07 GMT):
@GhadiShayban @jsmitchell Can confirm, the authentication is pedestrian.
zac (Tue, 13 Jun 2017 13:29:23 GMT):
The only real
zac (Tue, 13 Jun 2017 13:29:23 GMT):
The only real gotcha should be making sure the forward headers are set properly so the REST API can build the correct response link.
zac (Tue, 13 Jun 2017 13:30:54 GMT):
The document @jsmitchell linked to should go over that. Let me know if you run into any issues though, we haven't done a ton of testing yet.
jsmitchell (Tue, 13 Jun 2017 13:39:10 GMT):
@zgalvin111 heh, no. Transaction Families refer to the implementation of a set of related transaction types. It's a handy umbrella term. For example, if you were going to implement some kind of supply chain system, you would probably have transactions for 'CreateAsset', 'CreateAgent', 'TransferOwnership', etc. We could describe this set of things as a supply chain transaction family.
zac (Tue, 13 Jun 2017 13:55:28 GMT):
@zgalvin111 I love that interpretation though
drozd (Tue, 13 Jun 2017 14:40:57 GMT):
```
def else_after_return(arg):
if arg > 5:
return arg
else:
return arg ** 2
```
drozd (Tue, 13 Jun 2017 14:41:35 GMT):
pylint doesn't like that because the `else` is unnecessary after the `return` in the `if` clause
drozd (Tue, 13 Jun 2017 14:42:03 GMT):
`Unnecessary "else" after "return" (no-else-return)`
amundson (Tue, 13 Jun 2017 14:43:02 GMT):
no-else-return seems very picky, but also okay unless someone feels strongly against it
amundson (Tue, 13 Jun 2017 14:43:24 GMT):
do you know how many violations there are in the code currently?
drozd (Tue, 13 Jun 2017 14:43:28 GMT):
@FlyingTiger removed most of the instances (https://github.com/hyperledger/sawtooth-core/commit/12805f95851959373440517adeff56b16129d5fe) but there are a few remaining
jjason (Tue, 13 Jun 2017 14:43:33 GMT):
I personally prefer the no-else approach.
drozd (Tue, 13 Jun 2017 14:43:34 GMT):
half a dozen or so
jjason (Tue, 13 Jun 2017 14:44:20 GMT):
Something about the last statement of a function being a return is re-assuring to me ;) That way I don't have to look at the code and verify that all code paths return a value.
jjason (Tue, 13 Jun 2017 14:44:20 GMT):
Something about the last statement of a function being a return is reassuring to me ;) That way I don't have to look at the code and verify that all code paths return a value.
amundson (Tue, 13 Jun 2017 14:45:21 GMT):
I also prefer it, but many pylint things seem like better ideas when you are linting in an editor and not as great as reasons to break the build.
jjason (Tue, 13 Jun 2017 14:45:32 GMT):
Agreed.
jjason (Tue, 13 Jun 2017 14:46:07 GMT):
I also used to have a mild aversion to there being more than one return statement in a function, but my therapist is helping me work through that ;)
amundson (Tue, 13 Jun 2017 14:47:03 GMT):
@jjason yesterday we were talking about changing exceptions to always use the 'pass' syntax and giving up on the idea of enforcing msg on the very few exceptions that still take the non-pass approach
jjason (Tue, 13 Jun 2017 14:47:27 GMT):
I would have no problem with that
amundson (Tue, 13 Jun 2017 14:47:46 GMT):
@jjason I feel like the pylint folks rendered an opinion on a discussion we had for a year ago :)
zac (Tue, 13 Jun 2017 14:48:03 GMT):
@GhadiShayban Also worth mentioning that the CLI's are only setup to support Basic Auth at the moment. So they would have to be updated (or just not used) if you were using a different authorization scheme.
jjason (Tue, 13 Jun 2017 14:48:04 GMT):
Yeah. I do vaguely recall that.
amundson (Tue, 13 Jun 2017 14:48:49 GMT):
I came to the same conclusion, that it's probably ok to just always use pass and let pylint enforce it's anti-worthless-super rule
zgalvin111 (Tue, 13 Jun 2017 17:54:01 GMT):
@jsmitchell Ohhh ok that makes sense. That was a great example thank you. And @zac I do my best!
zgalvin111 (Tue, 13 Jun 2017 17:56:03 GMT):
What about Proof of Elapsed Time? Is it just an algorithm that randomly picks a different peer every time?
zac (Tue, 13 Jun 2017 17:59:17 GMT):
More or less, each validator picks a random wait time, and if their wait time happens to be the shortest, they'll end up winning the block
zac (Tue, 13 Jun 2017 17:59:58 GMT):
The SGX secure enclave provides hardware based assurances that the time waited was legitimate
zac (Tue, 13 Jun 2017 18:00:30 GMT):
That is about as deep as my understanding goes, but I'm sure others can give you more details if you're curious
GhadiShayban (Tue, 13 Jun 2017 18:40:18 GMT):
Is there something I don't see in the sawtooth java sdk for secp256k1 transaction signing? or should I just use BouncyCastle?
Jakey3 (Tue, 13 Jun 2017 18:59:56 GMT):
Has joined the channel.
Jakey3 (Tue, 13 Jun 2017 19:00:29 GMT):
im following the hyperledger tutorial http://intelledger.github.io/app_developers_guide/docker.html
Jakey3 (Tue, 13 Jun 2017 19:00:36 GMT):
but when i curl http://rest_api:8080/blocks
Jakey3 (Tue, 13 Jun 2017 19:00:44 GMT):
To confirm that a validator is up and running
Jakey3 (Tue, 13 Jun 2017 19:00:53 GMT):
curl: (7) Failed to connect to 172.18.0.7 port 8080: Connection refused
zgalvin111 (Tue, 13 Jun 2017 19:02:32 GMT):
Ok, thanks @zac What are the implications of that compared to Proof of Work? Because that could mean that the validator chosen has no investment in the network and so could play with the system in that block. Does the design of Proof of Elasped Time somehow cover that issue?
boydjohnson (Tue, 13 Jun 2017 19:18:08 GMT):
@zgalvin111 The poet consensus algorithm uses several tests about how long the validator that claimed a block has been with the network, how many times it claimed a block within a certain block depth, and other tests of good behavior. http://intelledger.github.io/transaction_family_specifications/validator_registry_transaction_family.html The validator registry transaction family, used by poet consensus, makes mention of these rules, called the K, C, and Z tests.
zgalvin111 (Tue, 13 Jun 2017 19:25:54 GMT):
Ohhhhhh @boydjohnson that is brilliant! What a way to get the same effect of Proof of Work without all the wasted electricity. Thank you for the explanation.
boydjohnson (Tue, 13 Jun 2017 19:26:29 GMT):
No problem, @zgalvin111
jsmitchell (Tue, 13 Jun 2017 20:47:20 GMT):
@zac or @adamludvik any clues for @Jakey3
adamludvik (Tue, 13 Jun 2017 20:51:15 GMT):
@Jakey3 Are you running curl from your host machine, or within the `sawtooth-client-default` docker container?
pschwarz (Tue, 13 Jun 2017 20:55:03 GMT):
@GhadiShayban Currently, you'll probably need to use Bouncy Castle, or the like
pschwarz (Tue, 13 Jun 2017 20:55:49 GMT):
We haven't yet implemented a friendlier transaction client API in the Java SDK, like there is in the JS or Go SDK's
pschwarz (Tue, 13 Jun 2017 20:57:32 GMT):
This App Developer's Guide section (https://intelledger.github.io/_autogen/txn_submit_tutorial_python.html) gives you some idea of what you need to do, from an operational standpoint, if not the exact code in the Java case
pschwarz (Tue, 13 Jun 2017 20:58:04 GMT):
It should be relatively similar to the example in python or the example in Javascript
kelly_ (Tue, 13 Jun 2017 20:58:57 GMT):
@GhadiShayban @dan may be able to give you some tips as well
kelly_ (Tue, 13 Jun 2017 20:59:06 GMT):
@Dan
kelly_ (Tue, 13 Jun 2017 20:59:21 GMT):
bitcoinJ may be a good method, which I believe has bouncy castle behind it
kelly_ (Tue, 13 Jun 2017 21:00:02 GMT):
@dan can confirm if we are 100% using the bitcoin style, in which case bitcoinj may be a good java option for signing
Dan (Tue, 13 Jun 2017 21:09:55 GMT):
The link pschwarz gave is good. We are using compact signatures. That's just the r,s fields of the signature if that means anything to you. It's not DER encoded for example as that will have some extra bytes.
zac (Tue, 13 Jun 2017 22:02:14 GMT):
@jsmitchell @Jakey3 @adamludvik We may need more experienced docker people. I tried following those instructions and got:
```
root@4c2f15ae26ae:/# curl http://rest_api:8080/blocks
curl: (6) Could not resolve host: rest_api
```
zac (Tue, 13 Jun 2017 22:09:15 GMT):
:rocket: makes bizarre syntax highlighting choices
MaximeLandon (Wed, 14 Jun 2017 00:53:14 GMT):
Has joined the channel.
casualuser (Wed, 14 Jun 2017 07:37:35 GMT):
Has joined the channel.
casualuser (Wed, 14 Jun 2017 07:40:39 GMT):
greetings everyone! please give me a tip where to look for sources and docs for UI part of Sawtooth tools ?
alain2sf (Wed, 14 Jun 2017 07:47:40 GMT):
Has joined the channel.
MaximeLandon (Wed, 14 Jun 2017 09:33:42 GMT):
Hello everyone;
MaximeLandon (Wed, 14 Jun 2017 09:37:57 GMT):
Hello Everyone,
I just started playing with Sawtooth framework a few days ago, and I face some issues, of which I can't find any topic on the Internet. I could not find anything related to them here as well.
My problem is I can't set up the validator, processor, etc... I'm using the Ubuntu 16.04 procedure for setting my blockchain.
After following the instructions on key generation and genesis block config (admin rights), I try to start the validator:
- The first time, everything went well.
MaximeLandon (Wed, 14 Jun 2017 09:37:57 GMT):
Hello Everyone,
I just started playing with Sawtooth framework a few days ago, and I face some issues, of which I can't find any topic on the Internet. I could not find anything related to them here as well.
My problem is I can't set up the validator, processor, etc... I'm using the Ubuntu 16.04 procedure for setting my blockchain.
After following the instructions on key generation and genesis block config (admin rights), I try to start the validator with validator -vv --endpoint tcp://localhost:8800:
- The first time, everything went well.
- The second time, the validator stops and says ERROR: no batch and chain found.
After sudo apt-get purge sawtooth, reinstalling everything, redoing key generation (tried to set it in different directories):
- I try again starting validator, and I get a new error: Address already in use.
MaximeLandon (Wed, 14 Jun 2017 09:37:57 GMT):
Hello Everyone,
I just started playing with Sawtooth framework a few days ago, and I face some issues, of which I can't find any topic on the Internet. I could not find anything related to them here as well.
My problem is I can't set up the validator, processor, etc... I'm using the Ubuntu 16.04 procedure for setting my blockchain.
After following the instructions on key generation and genesis block config (admin rights), I try to start the validator with validator -vv --endpoint tcp://localhost:8800:
- The first time, everything went well.
- The second time, the validator stops and says ERROR: no batch and chain found.
After sudo apt-get purge sawtooth, reinstalling everything, redoing key generation (tried to set it in different directories):
- I try again starting validator, and I get a new error: Address already in use.
I tried also to start the validator with systemctl start sawtooth-validator, but console outputs the validator exited with failure.
I did everything again (purging, resinstalling, regenerating keys, etc) and it still doesn't work.
The doc didn't help me much on this, as there is 3 different docs for Ubuntu 16.04, and they all give different instructions (sometimes need to do genesis config, sometimes not).
I'm sorry for not having a simple, precise issue but that is why I got to post it here.
Many thanks in advance for the help that may be given !
Max
MaximeLandon (Wed, 14 Jun 2017 10:04:51 GMT):
My broader problem, from my perspective at least, is how to start and stop validators without doing the whole process each time. I think about this because the first time I tried, I succeeded to start validator, processor and tp_config. It was when I got back the next day for redoing it, that my problems explained in the message above appeared.
Thanks
lulw (Wed, 14 Jun 2017 13:00:55 GMT):
Has joined the channel.
lulw (Wed, 14 Jun 2017 13:05:11 GMT):
@zac I faced today with the same problem, you need just change -bind to --bind rest_api:8080 in your sawtooth-default.yaml file
jsmitchell (Wed, 14 Jun 2017 13:49:58 GMT):
@MaximeLandon there is an issue with tcp sockets and TIME_WAIT which causes the address in use error. Unfortunately, you will need to stop all processes including the transaction processors and rest api which may have connections open. You can check the status of open connections with `netstat -tp`
jsmitchell (Wed, 14 Jun 2017 13:50:40 GMT):
if you see any in TIME_WAIT, you will need to shutdown the associated process and then wait for a few minutes for the tcp stack to timeout the TIME_WAIT states
jsmitchell (Wed, 14 Jun 2017 13:51:31 GMT):
I then recommend you delete your sawtooth data directory and follow the steps to create a genesis block and start the validator
jsmitchell (Wed, 14 Jun 2017 13:52:15 GMT):
@MaxineLandon we also provide docker containers which should make this process easier depending on your use case
GhadiShayban (Wed, 14 Jun 2017 13:52:58 GMT):
Good morning -- what are the principles / limits around transaction family performance? Specifically what's the SLA on `apply(transaction, state)`
GhadiShayban (Wed, 14 Jun 2017 13:52:58 GMT):
Good morning -- what are the principles / limits around transaction family performance? Specifically what's the SLA on `apply(transaction, state)`?
jsmitchell (Wed, 14 Jun 2017 13:54:36 GMT):
@GhadiShayban we are spinning up some benchmarking efforts to begin quantifying and tuning the system
jsmitchell (Wed, 14 Jun 2017 13:55:01 GMT):
@GhadiShayban and a big feature of sawtooth is parallel execution of transactions, which is currently in progress
GhadiShayban (Wed, 14 Jun 2017 13:55:12 GMT):
...can I make a 1-second HTTP call?
jsmitchell (Wed, 14 Jun 2017 13:55:24 GMT):
from a transaction processor?
jsmitchell (Wed, 14 Jun 2017 13:55:43 GMT):
how will you ensure the result is deterministic?
GhadiShayban (Wed, 14 Jun 2017 13:56:05 GMT):
idempotent call?
jsmitchell (Wed, 14 Jun 2017 13:56:27 GMT):
what if the http service goes away in the near future?
jsmitchell (Wed, 14 Jun 2017 13:56:39 GMT):
how will validators catching up on the block chain validate transactions?
GhadiShayban (Wed, 14 Jun 2017 13:57:14 GMT):
ok so that's a no go. Poll on the state instead?
GhadiShayban (Wed, 14 Jun 2017 13:57:22 GMT):
(Thanks, this is helpful)
jsmitchell (Wed, 14 Jun 2017 13:57:44 GMT):
can you give me a sense of the problem you are trying to solve?
GhadiShayban (Wed, 14 Jun 2017 14:00:11 GMT):
reading URLs from transactions and caching them off-chain.
GhadiShayban (Wed, 14 Jun 2017 14:01:04 GMT):
I thought that maybe I could notify externally in the TP rather than polling from the outside in
jsmitchell (Wed, 14 Jun 2017 14:01:14 GMT):
Ok, so the transaction contains a url in a payload, and you are storing the url in global state?
GhadiShayban (Wed, 14 Jun 2017 14:01:18 GMT):
yes
jsmitchell (Wed, 14 Jun 2017 14:01:39 GMT):
ok, what's your namespace addressing scheme?
jsmitchell (Wed, 14 Jun 2017 14:02:31 GMT):
so, you want to take some action when new urls arrive in state to snarf that content and store it somewhere off-chain?
adamludvik (Wed, 14 Jun 2017 14:02:35 GMT):
@zac @Jakey3, @lulw is correct, that docker-compose file is bad and needs updating.
Dan (Wed, 14 Jun 2017 14:03:25 GMT):
@toddojala maybe you can DM with @MaximeLandon and make sure the 3 docs he mentions are consistent. Please also make sure we have clear directions for restarting a validator and using an existing data directory.
jsmitchell (Wed, 14 Jun 2017 14:03:52 GMT):
@pschwarz is the state delta processing stuff in a usable condition for @GhadiShayban's needs?
jsmitchell (Wed, 14 Jun 2017 14:04:24 GMT):
@GhadiShayban we have a mechanism that might be usable for this
jsmitchell (Wed, 14 Jun 2017 14:04:30 GMT):
instead of polling
pschwarz (Wed, 14 Jun 2017 14:05:05 GMT):
I would say yes
jsmitchell (Wed, 14 Jun 2017 14:05:11 GMT):
essentially you would write a little client that would subscribe to state changes under your namespace and then you could snarf content down
jsmitchell (Wed, 14 Jun 2017 14:05:17 GMT):
it would be slick
pschwarz (Wed, 14 Jun 2017 14:05:23 GMT):
Though, we don't have an example, yet, of how to use it.
pschwarz (Wed, 14 Jun 2017 14:06:04 GMT):
We should perhaps prioritize getting the architecture docs for that out there soon, with, at least, the client-side suggestions on what to do with the data
jsmitchell (Wed, 14 Jun 2017 14:06:38 GMT):
@GhadiShayban are you interested in helping prove this out?
GhadiShayban (Wed, 14 Jun 2017 14:11:27 GMT):
Absolutely
GhadiShayban (Wed, 14 Jun 2017 14:12:01 GMT):
so it's a scoped subscription?
jsmitchell (Wed, 14 Jun 2017 14:12:12 GMT):
yeah, basically
jsmitchell (Wed, 14 Jun 2017 14:12:29 GMT):
@pschwarz designed/implemented it, so he can explain :)
GhadiShayban (Wed, 14 Jun 2017 14:13:22 GMT):
That sounds like a useful / necessary piece to this
pschwarz (Wed, 14 Jun 2017 14:18:15 GMT):
The subscriptions are scoped by global state address prefixes
pschwarz (Wed, 14 Jun 2017 14:19:06 GMT):
This can be the namespace, or if you have some clever addressing scheme to differentiate between objects, you can use the large prefixes to subscribe to specific objects
pschwarz (Wed, 14 Jun 2017 14:20:14 GMT):
The one area that is a little difficult to work with on this is that we don't have easy sdk support for it yet
GhadiShayban (Wed, 14 Jun 2017 14:20:17 GMT):
can a subscribing client request a start transaction? (_a la_ kafka cursor)
pschwarz (Wed, 14 Jun 2017 14:20:30 GMT):
Not sure what you mean by that
GhadiShayban (Wed, 14 Jun 2017 14:20:58 GMT):
can a client say "start publishing me state deltas but starting at this point in time"
GhadiShayban (Wed, 14 Jun 2017 14:21:18 GMT):
and what happens when the client walks away and comes back
GhadiShayban (Wed, 14 Jun 2017 14:21:37 GMT):
can you guarantee that all deltas will be seen at least once?
pschwarz (Wed, 14 Jun 2017 14:21:46 GMT):
It can do that
GhadiShayban (Wed, 14 Jun 2017 14:21:59 GMT):
awesome
pschwarz (Wed, 14 Jun 2017 14:22:42 GMT):
You basically tell the validator what the last block's delta (by block signature) the client saw, and it will provide you with the deltas that have happened in the interim
pschwarz (Wed, 14 Jun 2017 14:23:11 GMT):
To trigger a start and stop of a specific subscription, you'd have to do something clever with subscriptions, though
pschwarz (Wed, 14 Jun 2017 14:23:31 GMT):
It's not aware of any changes other than block changes, and the associated deltas
pschwarz (Wed, 14 Jun 2017 14:24:12 GMT):
All of the subscriptions are currently handled over the ZMQ interconnect
pschwarz (Wed, 14 Jun 2017 14:24:31 GMT):
We have an open task to provide them over a websocket that is in the backlog
Dan (Wed, 14 Jun 2017 14:32:16 GMT):
So today you run a validator locally, and the sub service runs as a separate process on that same machine?
pschwarz (Wed, 14 Jun 2017 14:33:16 GMT):
Right
GhadiShayban (Wed, 14 Jun 2017 14:39:31 GMT):
http?
GhadiShayban (Wed, 14 Jun 2017 14:40:10 GMT):
or zmq @pschwarz
pschwarz (Wed, 14 Jun 2017 14:40:31 GMT):
ZMQ
pschwarz (Wed, 14 Jun 2017 14:40:58 GMT):
I have a sample application in clojure that I will open up on github
GhadiShayban (Wed, 14 Jun 2017 14:41:08 GMT):
oh snap!
pschwarz (Wed, 14 Jun 2017 14:41:28 GMT):
I need to tidy it up a bit, but I can get that opened up later today
toddojala (Wed, 14 Jun 2017 14:41:33 GMT):
@Dan Yes!
GhadiShayban (Wed, 14 Jun 2017 14:41:34 GMT):
i'm a longtime clojure contributor (helped develop core.async)
pschwarz (Wed, 14 Jun 2017 14:41:45 GMT):
Nice!
GhadiShayban (Wed, 14 Jun 2017 14:43:05 GMT):
so you must be responsible for that om.next app in 0.7
jsmitchell (Wed, 14 Jun 2017 14:43:28 GMT):
yes, he is the "responsible party"
toddojala (Wed, 14 Jun 2017 14:43:35 GMT):
@MaximeLandon I'm going to read your message a few times and get back to you with some helpful info. Our docs are being added to and improved all the time, but I think I can give you some help today to smooth out your issues.
jsmitchell (Wed, 14 Jun 2017 14:43:54 GMT):
he and @zac
GhadiShayban (Wed, 14 Jun 2017 14:46:29 GMT):
Btw, thanks for the pointer on bitcoin4j. I'm trying to sign and submit transactions from Clojure in my copious free time. The sig formats (bitcoin's, not sawtooth's) are soooo baroque
pschwarz (Wed, 14 Jun 2017 14:57:21 GMT):
Not om.next, just om - I haven't yet had a chance to wrap my brain around om.next
pschwarz (Wed, 14 Jun 2017 14:57:28 GMT):
But yes, that was me :)
jsmitchell (Wed, 14 Jun 2017 15:04:20 GMT):
@casualuser which tools are you referring to?
kelly_ (Wed, 14 Jun 2017 15:50:55 GMT):
@casualuser if you are looking for some of the UIs associated with content on 01.org/sawtooth (e.g. the bond demo), it is on the 0.7 branch of sawtooth
toddojala (Wed, 14 Jun 2017 15:54:05 GMT):
@MaximeLandon I am going to do some testing to try to reproduce your issues, but here's some quick things to try: (1) If you stop your validator, you should delete the data directory before trying to start another validator. The data directory should be located here, although in some types of environments it is elsewhere: /var/lib/sawtooth/
toddojala (Wed, 14 Jun 2017 15:54:05 GMT):
@MaximeLandon I am going to do some testing to try to reproduce your issues, but here's some quick things to try: (1) If you stop your validator, you should delete the files in the data directory before trying to start another validator. The data directory should be located here, although in some types of environments it is elsewhere: /var/lib/sawtooth/
toddojala (Wed, 14 Jun 2017 15:55:47 GMT):
@MaximeLandon Regarding the problem you ran into, where the "address was already in use," make sure that none of the components were still running. Try the command "ps -ef | grep python", and look for any Sawtooth components that might be running.
toddojala (Wed, 14 Jun 2017 15:58:56 GMT):
@MaximeLandon Regarding versions of the docs, there are three versions available: (1) Latest release (2) Master (3) Version 0.7 . You can choose the version you want from the drop-down that is available when you go to the docs. Version 0.7 is not really applicable to you. I would suggest trying Master, as it has the very latest changes to the docs (but it might not be compatible with the latest docker images, etc.)
MaximeLandon (Wed, 14 Jun 2017 16:23:03 GMT):
@toddojala A million of thanks for your answer !!! I will try that tonight and come back to tell if success or failure !! Thanks
toddojala (Wed, 14 Jun 2017 16:35:23 GMT):
@MaximeLandon Great. And I may have more info or tips soon.
JonathanLevi (Wed, 14 Jun 2017 16:58:34 GMT):
Dear Sawtooth people, do you mind giving the below a quick try (and let me know if there are issues). It was done very quickly, and not really intended to be the next chess.com ;-)
This runs on top of Sawtooth 0.8, and we have exposed a REST API that is used to generate an image for each game id that is stored as Sawtooth's "global state":
http://dutchess.hacera.com/
JonathanLevi (Wed, 14 Jun 2017 16:59:28 GMT):
Of course we need to beef it up with all the legal stuff, terms & conditions, privacy, etc... it was uploaded very quickly, just for a quick "sanity check" / moves validation.
JonathanLevi (Wed, 14 Jun 2017 17:00:23 GMT):
Thanks in advance!
boydjohnson (Wed, 14 Jun 2017 17:01:26 GMT):
Wow! @JonathanLevi This looks great.
JonathanLevi (Wed, 14 Jun 2017 17:01:32 GMT):
This is the original code we used to win to Coindesk hackathon at Consensus 2017. Thanks in advance
boydjohnson (Wed, 14 Jun 2017 17:02:11 GMT):
My understanding is that it isn't just sawtooth, but integrates other blockchains. Is that right?
JonathanLevi (Wed, 14 Jun 2017 17:02:27 GMT):
Easier to try it with two browsers/identities (as we generate the (signing) keys that we use to sign the ST transactions)
JonathanLevi (Wed, 14 Jun 2017 17:03:25 GMT):
Yes, the full demo includes/included the smart contract with the funds... this is just the Chess component that the plays are using to play the game
JonathanLevi (Wed, 14 Jun 2017 17:03:53 GMT):
And later on, the "Rating Agent" is querying, in order to issue a "winning certificate" for releasing the funds (in ETH)
JonathanLevi (Wed, 14 Jun 2017 17:03:53 GMT):
And later on, the "Rating/Ranking Agent" is querying, in order to issue a "winning certificate" for releasing the funds (in ETH)
zac (Wed, 14 Jun 2017 17:06:55 GMT):
Thanks for the tip @lulw! Looks like that was fixed by Kapil Sachdeva four days ago in this commit: https://github.com/hyperledger/sawtooth-core/commit/9c983ee725d03b4efe90334f45230fb850356ec
That fix didn't make it into the official build a week ago, but we just pushed a patch so, anyone following the Docker tutorial from now on should get a docker compose file without the typo.
zac (Wed, 14 Jun 2017 17:07:51 GMT):
@Jakey3 Can you try the tutorial again with a new Docker, and let me know if you are still having issues?
zac (Wed, 14 Jun 2017 17:20:54 GMT):
@GhadiShayban My first day on Sawtooth:
@pschwarz: _"What do you do?"_
Me: "Mostly Angular, Node, a bit of React, etc."
@pschwarz: _"Great. Forget all that. You're using ClojureScript."_
zac (Wed, 14 Jun 2017 17:20:54 GMT):
@GhadiShayban My first day on Sawtooth:
@pschwarz: _"What do you do?"_
*Me:* "Mostly Angular, Node, a bit of React, etc."
@pschwarz: _"Great. Forget all that. You're using ClojureScript."_
zac (Wed, 14 Jun 2017 17:33:09 GMT):
@JonathanLevi Whoa! Very cool.
zac (Wed, 14 Jun 2017 17:33:22 GMT):
Does move validation happen in the Transaction Processor?
JonathanLevi (Wed, 14 Jun 2017 17:33:28 GMT):
Yes
JonathanLevi (Wed, 14 Jun 2017 17:33:33 GMT):
(thank you)
zac (Wed, 14 Jun 2017 17:33:36 GMT):
Nice
JonathanLevi (Wed, 14 Jun 2017 17:33:46 GMT):
So for example, I can look at a game... and try to make a move.
JonathanLevi (Wed, 14 Jun 2017 17:34:41 GMT):
But if I'm not one of the players.... the TP should not accept it, as it is signed with MY key.. and not with the key of one of the two players.
JonathanLevi (Wed, 14 Jun 2017 17:34:55 GMT):
Same goes for an illegal move by a "legal" player.
JonathanLevi (Wed, 14 Jun 2017 17:35:25 GMT):
We plugged in a Python library that simply checks every move "attempt" given the current "state" of the "board"
JonathanLevi (Wed, 14 Jun 2017 17:35:40 GMT):
Again, done pretty hastily... but really followed the xo example.
zac (Wed, 14 Jun 2017 17:36:08 GMT):
Yeah, it's very neat
zac (Wed, 14 Jun 2017 17:36:49 GMT):
A good demo of what you can whip up with Sawtooth pretty quickly
jsmitchell (Wed, 14 Jun 2017 17:38:05 GMT):
@JonathanLevi I'm having trouble making a move
zac (Wed, 14 Jun 2017 17:38:26 GMT):
Did you input a move?
zac (Wed, 14 Jun 2017 17:38:31 GMT):
I ran into this problem
jsmitchell (Wed, 14 Jun 2017 17:38:35 GMT):
yeah, i did "e2e4"
JonathanLevi (Wed, 14 Jun 2017 17:38:36 GMT):
Try *e2e4*
JonathanLevi (Wed, 14 Jun 2017 17:38:45 GMT):
In text. Sorry, the image is really static.
jsmitchell (Wed, 14 Jun 2017 17:39:04 GMT):
the Make move button lit up, but nothing seemed to happen when I clicked on it
zac (Wed, 14 Jun 2017 17:39:41 GMT):
There is no popup if a move is illegal and/or the transaction is bad
jsmitchell (Wed, 14 Jun 2017 17:39:48 GMT):
it's a valid move
zac (Wed, 14 Jun 2017 17:39:49 GMT):
Might be you are submitting with the wrong key
jsmitchell (Wed, 14 Jun 2017 17:40:08 GMT):
I am listed as the player I am trying to move for
zac (Wed, 14 Jun 2017 17:40:29 GMT):
I did it with one player in Chrome and one player in Safari and it worked
zac (Wed, 14 Jun 2017 17:40:39 GMT):
Not sure how the keys are being stored
jsmitchell (Wed, 14 Jun 2017 17:41:25 GMT):
I used the same username in safari, and it gave me a different token in the upper left. Is that bad @JonathanLevi ?
JonathanLevi (Wed, 14 Jun 2017 17:42:50 GMT):
Nope, that's fine. I have disabled the token at this point
JonathanLevi (Wed, 14 Jun 2017 17:43:03 GMT):
The token is an ID token (that was registered elsewhere)
JonathanLevi (Wed, 14 Jun 2017 17:43:15 GMT):
Some crazy identity "sci-fi" trick ;-)
JonathanLevi (Wed, 14 Jun 2017 17:43:45 GMT):
You may ignore it. We may end up hiding it.
JonathanLevi (Wed, 14 Jun 2017 17:43:53 GMT):
(Thanks for checking)
jsmitchell (Wed, 14 Jun 2017 17:44:01 GMT):
I still can't 'make move' in either browser
JonathanLevi (Wed, 14 Jun 2017 17:44:14 GMT):
Screenshot? (privately, if you prefer)
jsmitchell (Wed, 14 Jun 2017 17:44:59 GMT):
Message Attachments
jsmitchell (Wed, 14 Jun 2017 17:45:19 GMT):
so, "Make move" is highlighted, but clicking on it has no effect
JonathanLevi (Wed, 14 Jun 2017 17:46:08 GMT):
Message Attachments
jsmitchell (Wed, 14 Jun 2017 17:46:21 GMT):
yeah, that's what i did
JonathanLevi (Wed, 14 Jun 2017 17:46:31 GMT):
Are you sure that browser is the White?
jsmitchell (Wed, 14 Jun 2017 17:46:36 GMT):
yeah
jsmitchell (Wed, 14 Jun 2017 17:46:50 GMT):
i created the game best_game_ever
jsmitchell (Wed, 14 Jun 2017 17:46:55 GMT):
made myself the white player
jsmitchell (Wed, 14 Jun 2017 17:47:02 GMT):
and then tried to move e2e4
JonathanLevi (Wed, 14 Jun 2017 17:47:15 GMT):
OK, I joined. Try now?
JonathanLevi (Wed, 14 Jun 2017 17:47:21 GMT):
Before, there was only one player.
jsmitchell (Wed, 14 Jun 2017 17:47:25 GMT):
ahhhhh
jsmitchell (Wed, 14 Jun 2017 17:47:29 GMT):
that is non obvious
jsmitchell (Wed, 14 Jun 2017 17:47:37 GMT):
SUPER COOL
JonathanLevi (Wed, 14 Jun 2017 17:47:43 GMT):
Ha ha ;-)
JonathanLevi (Wed, 14 Jun 2017 17:47:59 GMT):
You can't place a transaction without 2 players joining.
jsmitchell (Wed, 14 Jun 2017 17:48:25 GMT):
You should add some kind of note to that effect
JonathanLevi (Wed, 14 Jun 2017 17:48:36 GMT):
Are you sure you wanted to move that Queen?
JonathanLevi (Wed, 14 Jun 2017 17:48:45 GMT):
You know this chain is immutable ;-))))
jsmitchell (Wed, 14 Jun 2017 17:48:47 GMT):
heh
jsmitchell (Wed, 14 Jun 2017 17:49:21 GMT):
the commits are nice and fast
jsmitchell (Wed, 14 Jun 2017 17:49:25 GMT):
what consensus are you using?
amundson (Wed, 14 Jun 2017 18:08:22 GMT):
I'm not sure I like that my bad moves are on-chain now
amundson (Wed, 14 Jun 2017 18:09:11 GMT):
@JonathanLevi super cool
JonathanLevi (Wed, 14 Jun 2017 18:09:26 GMT):
Ha ha ;-)
JonathanLevi (Wed, 14 Jun 2017 18:09:47 GMT):
Sorry, I was on a call (and do not have the hardware for multitasking)
JonathanLevi (Wed, 14 Jun 2017 18:10:10 GMT):
@jsmitchell It's running in dev mode, so we "trust" the TP
JonathanLevi (Wed, 14 Jun 2017 18:10:23 GMT):
I know, I know - but hey, it's a hack-athon ;-)
JonathanLevi (Wed, 14 Jun 2017 18:10:49 GMT):
Once fabric 1.0 is out, I will be happy to extend it and have a proper consensus there.
JonathanLevi (Wed, 14 Jun 2017 18:12:00 GMT):
Maybe a POeT like, (waiting) time penalty, or something that's more like a "Blitz" game with rate limit...
JonathanLevi (Wed, 14 Jun 2017 18:12:12 GMT):
Not sure, open to ideas.
JonathanLevi (Wed, 14 Jun 2017 18:12:56 GMT):
Should open source the entire thing, with all the legal disclaimers, etc.
JonathanLevi (Wed, 14 Jun 2017 18:13:10 GMT):
That night, it was mostly "hacking" the apply method.
JonathanLevi (Wed, 14 Jun 2017 18:14:14 GMT):
@amundson - Yes, I hear you. I can try to create a user on your behalf, and replay a Kasparov game... if need be.
Jakey3 (Wed, 14 Jun 2017 18:18:19 GMT):
I beleive I found a typo on the docker implementation of sawtooth
Jakey3 (Wed, 14 Jun 2017 18:18:19 GMT):
I believe I found a typo on the docker implementation of sawtooth
Jakey3 (Wed, 14 Jun 2017 18:18:28 GMT):
*believe
Jakey3 (Wed, 14 Jun 2017 18:19:22 GMT):
how do you get changes in the documentation?
Jakey3 (Wed, 14 Jun 2017 18:20:31 GMT):
docker compose file
Jakey3 (Wed, 14 Jun 2017 18:20:47 GMT):
https://intelledger.github.io/app_developers_guide/sawtooth-default.yaml
jsmitchell (Wed, 14 Jun 2017 18:21:01 GMT):
@zac ^
Jakey3 (Wed, 14 Jun 2017 18:21:53 GMT):
line 76: should read entrypoint: rest_api --connect tcp://validator:40000 --bind rest_api:8080
Jakey3 (Wed, 14 Jun 2017 18:22:09 GMT):
with --bind rather than -bind
Jakey3 (Wed, 14 Jun 2017 18:24:54 GMT):
looks like it has been solved
jsmitchell (Wed, 14 Jun 2017 18:27:27 GMT):
yep, just this morning i think
zac (Wed, 14 Jun 2017 18:32:16 GMT):
@Jakey3 Yes, fixed this morning. Hopefully that solves your issue, but let me know if not.
Jakey3 (Wed, 14 Jun 2017 18:55:34 GMT):
cool
pschwarz (Wed, 14 Jun 2017 18:57:59 GMT):
Big change going in, with PR 630 (https://github.com/hyperledger/sawtooth-core/pull/630):
The sawtooth config transaction family is being renamed to "sawtooth settings". This effects some external facing components like:
- `tp_config` is now `tp_settings`
- on-chain settings keys for the family have changed from `sawtooth.config.*` to `sawtooth.settings.*`
- systemd service is `sawtooth-tp_settings`
Settings are still changed via the `config` cli subcommand (e.g. `sawtooth config proposal create`). This command may move in the future.
Jakey3 (Wed, 14 Jun 2017 19:24:16 GMT):
other than the sawtooth docs https://intelledger.github.io/contents.html is there an explanation of the sawtooth architecture?
zac (Wed, 14 Jun 2017 19:30:08 GMT):
A document covering a high-level overview of the architecture is planned, but not yet written. I would expect it fairly soon. Probably some number of weeks.
zac (Wed, 14 Jun 2017 19:30:54 GMT):
In terms of what is written now, the architecture section currently covers some specific components, and the introduction gets at all of the big ideas.
jsmitchell (Wed, 14 Jun 2017 19:58:13 GMT):
@Jakey3 do you have any questions we can help answer?
kelly_ (Wed, 14 Jun 2017 20:11:11 GMT):
Message Attachments
kelly_ (Wed, 14 Jun 2017 20:15:17 GMT):
@Jakey3 also some info here ^
Jakey3 (Wed, 14 Jun 2017 20:55:00 GMT):
@kelly_ thanks
MaximeLandon (Wed, 14 Jun 2017 23:23:29 GMT):
Hello again everyone, @pschwarz I just reinstalled sawtooth and when I type tp_settings the console outputs tp_settings: command not found.
If you have any clue why I will be glad to hear it ! ;)
j3ffyang (Thu, 15 Jun 2017 03:27:57 GMT):
Has joined the channel.
boydjohnson (Thu, 15 Jun 2017 12:44:01 GMT):
@MaximeLandon I would guess that the latest release doesn't include the changes from tp_config -> tp_settings; only the master branch of the repo does.
LoubnaBaroudi (Thu, 15 Jun 2017 12:45:01 GMT):
Has joined the channel.
LoubnaBaroudi (Thu, 15 Jun 2017 12:47:41 GMT):
Hello everyone, I've tried to build and submit a transaction with the pyhton3 tutorial but I keep getting the same error message : Batch invalid, not added to block. If anyone have an idea, I'm really stuck!! Thank you
boydjohnson (Thu, 15 Jun 2017 12:48:45 GMT):
Hi @LoubnaBaroudi can you provide more of the logging?
boydjohnson (Thu, 15 Jun 2017 12:50:56 GMT):
@LoubnaBaroudi Was it with the XO client?
LoubnaBaroudi (Thu, 15 Jun 2017 12:51:12 GMT):
No it's just an inkey transaction
boydjohnson (Thu, 15 Jun 2017 12:51:25 GMT):
Ok, thanks.
boydjohnson (Thu, 15 Jun 2017 12:52:31 GMT):
Ah, it was where you build the transaction yourself.
LoubnaBaroudi (Thu, 15 Jun 2017 12:52:46 GMT):
Yes
boydjohnson (Thu, 15 Jun 2017 12:54:28 GMT):
What level of logging did you have on the validator?
LoubnaBaroudi (Thu, 15 Jun 2017 12:56:39 GMT):
[14:50:54.558 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1826 bytes
[14:50:54.562 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'20c14f6de666464f'
[14:50:54.678 DEBUG interconnect] ServerThread sending TP_PROCESS_REQUEST to b'd5e9ac40a3fb4749'
[14:50:54.684 DEBUG interconnect] ServerThread receiving TP_STATE_GET_REQUEST message: 177 bytes
[14:50:54.692 DEBUG tp_state_handlers] GET: [('1cf1262a6de389a4325cc3cb0cda7202d6620d8d770501c10ecaab2ffbfabdc1af55ef', None)]
[14:50:54.693 DEBUG interconnect] ServerThread sending TP_STATE_GET_RESPONSE to b'd5e9ac40a3fb4749'
[14:50:54.695 DEBUG interconnect] ServerThread receiving TP_PROCESS_RESPONSE message: 73 bytes
[14:50:54.695 DEBUG publisher] Batch 3176b4b257790b19e63cd9210d60b26bce25277003f492265f97659c4392497548c5bd000fc813335dc2810a5b96404a7fe5290f88075ca9ef05e28e3ce737a6 invalid, not added to block.
[14:50:54.695 DEBUG publisher] Abandoning block (8, S:, P:9725739c): no batches added
[14:50:54.696 DEBUG interconnect] message round trip: TP_PROCESS_RESPONSE 0.01717996597290039
LoubnaBaroudi (Thu, 15 Jun 2017 12:56:54 GMT):
here is what I get when I launch the program
boydjohnson (Thu, 15 Jun 2017 12:57:38 GMT):
Did you have an intkey transaction processor attached to the validator? Like tp_intkey_python?
LoubnaBaroudi (Thu, 15 Jun 2017 12:57:49 GMT):
yes
boydjohnson (Thu, 15 Jun 2017 12:57:57 GMT):
Did that log?
LoubnaBaroudi (Thu, 15 Jun 2017 13:00:54 GMT):
ok I repared the mistake it was just a simple mistake : I've written a dec transaction instead of a set
LoubnaBaroudi (Thu, 15 Jun 2017 13:01:11 GMT):
Thank you though!!!
boydjohnson (Thu, 15 Jun 2017 13:01:57 GMT):
Yay! No problem.
LoubnaBaroudi (Thu, 15 Jun 2017 13:19:28 GMT):
@boydjohnson When I launch my program, a block is created and validated but I just wanted to create a state. Do you know how can I do to submit my batch to the validator without having it put in a block?
boydjohnson (Thu, 15 Jun 2017 13:20:07 GMT):
Ah, My understanding is that they are one and the same. The only thing that is is state is what is in the block.
LoubnaBaroudi (Thu, 15 Jun 2017 13:20:50 GMT):
But how can I increment or decrement the value I've juste setted if it's not in the state list?
boydjohnson (Thu, 15 Jun 2017 13:21:12 GMT):
If it is in the block it should be in the state.
boydjohnson (Thu, 15 Jun 2017 13:21:29 GMT):
Does the inc or dec transaction fail?
LoubnaBaroudi (Thu, 15 Jun 2017 13:21:58 GMT):
yes
LoubnaBaroudi (Thu, 15 Jun 2017 13:23:51 GMT):
The Error is : Invalid Transaction Verb is "dec" but name "Transaction" not in state
boydjohnson (Thu, 15 Jun 2017 13:24:35 GMT):
What does 'sawtooth state list' get you?
LoubnaBaroudi (Thu, 15 Jun 2017 13:25:13 GMT):
the samples provided by sawtooth but not the state of my transaction
LoubnaBaroudi (Thu, 15 Jun 2017 13:25:23 GMT):
I've searched for it already
boydjohnson (Thu, 15 Jun 2017 13:26:45 GMT):
Hmmm. What happens if you submit the set transaction again?
LoubnaBaroudi (Thu, 15 Jun 2017 13:27:45 GMT):
it works again, creating a new block
LoubnaBaroudi (Thu, 15 Jun 2017 13:28:10 GMT):
no the same block as before sorry
jsmitchell (Thu, 15 Jun 2017 13:28:30 GMT):
Name "Transaction" not in state is a clue
jsmitchell (Thu, 15 Jun 2017 13:29:31 GMT):
An intkey transaction has three elements, the variable name, the action verb, and an integer value.
jsmitchell (Thu, 15 Jun 2017 13:29:54 GMT):
If you are doing the action verb "set", you can use a new variable name
jsmitchell (Thu, 15 Jun 2017 13:30:18 GMT):
If you are doing either inc or dec, you must use an existing name that is in state
jsmitchell (Thu, 15 Jun 2017 13:30:50 GMT):
@boydjohnson isn't there an intkey show command?
jsmitchell (Thu, 15 Jun 2017 13:31:07 GMT):
Or list
LoubnaBaroudi (Thu, 15 Jun 2017 13:31:08 GMT):
yes I know, I use the same name for inc
boydjohnson (Thu, 15 Jun 2017 13:31:30 GMT):
@jsmitchell There isn't an intkey show or list, but only the 'sawtooth state list'.
jsmitchell (Thu, 15 Jun 2017 13:31:31 GMT):
But the error is; name "Transaction" not in state.
boydjohnson (Thu, 15 Jun 2017 13:32:29 GMT):
https://jira.hyperledger.org/browse/STL-277 This is the jira for intkey show and list.
LoubnaBaroudi (Thu, 15 Jun 2017 13:32:50 GMT):
@jsmitchell yes this is what I don't understand
jsmitchell (Thu, 15 Jun 2017 13:32:51 GMT):
Did you call your variable Transaction in the set?
jsmitchell (Thu, 15 Jun 2017 13:33:05 GMT):
Copy and paste the commands that you are executing
LoubnaBaroudi (Thu, 15 Jun 2017 13:35:44 GMT):
key_handler = secp256k1.PrivateKey()
private_key_bytes = key_handler.private_key
public_key_bytes = key_handler.pubkey.serialize()
public_key_hex = public_key_bytes.hex()
payload = {
'Verb' : 'set',
'Name' : 'Transaction',
'Value' : 1}
#encoding
payload_bytes = cbor.dumps(payload)
#Creating a SHA-512 Payload Hash
payload_sha512 = sha512(payload_bytes).hexdigest()
#TransactionHeader
txn_header = TransactionHeader(
batcher_pubkey=public_key_hex,
#dependencies
# dependencies=['34b90dc789d0ccb48b7a9f04bef191e9e7216d6cea6ccf21442dba1f3bb8d2147aeb24a46581e9091030cf7fae63536353578b65b723a4c836c8180a55daa463'],
family_name='intkey',
family_version='1.0',
inputs="1cf126"+hashlib.sha512("GCertificate".encode('utf-8')).hexdigest(), #state addresses that this Transaction is alloawed to read from
nonce=str(randint(0,1000000000)),
outputs="1cf126"+hashlib.sha512("Gcertificate".encode('utf-8')).hexdigest(), ##state addresses that this Transaction is alloawed to write from
payload_encoding='application/cbor',
payload_sha512=payload_sha512,
signer_pubkey=public_key_hex)
txn_header_bytes=txn_header.SerializeToString()
#sign the header in order to generate a signature the Sawtooth validator will accept : ECDSA signature
key_handler=secp256k1.PrivateKey(private_key_bytes)
txn_signature = key_handler.ecdsa_sign(txn_header_bytes)
txn_signature_bytes=key_handler.ecdsa_serialize_compact(txn_signature)
txn_signature_hex = txn_signature_bytes.hex()
#print(txn_signature_hex)
#Create the Transaction
txn= Transaction(
header=txn_header_bytes,
header_signature=txn_signature_hex,
payload=payload_bytes)
#You can encode the transaction but it's optional
txnList=TransactionList(transactions=[txn])
txnBytes=txnList.SerializeToString()
#print(txnBytes)
#The Batch
#decode the transaction(if encode)
txnList=TransactionList()
txnList.ParseFromString(txnBytes)
txn = txnList.transactions[0]
#create the BatchHeader
batch_header = BatchHeader(
signer_pubkey=public_key_hex,
transaction_ids=[txn.header_signature])
batch_header_bytes = batch_header.SerializeToString()
#sign the Header
batch_signature = key_handler.ecdsa_sign(batch_header_bytes)
batch_signature_bytes = key_handler.ecdsa_serialize_compact(batch_signature)
batch_signature_hex = batch_signature_bytes.hex()
#create the batch
batch=Batch(
header=batch_header_bytes,
header_signature=batch_signature_hex,
transactions=[txn])
#encode the batch
batch_list = BatchList(batches=[batch])
batch_bytes = batch_list.SerializeToString()
#Submit to the validator
try:
request = urllib.request.Request(
'http://127.0.0.1:8080/batches',
batch_bytes,
method='POST',
headers={'Content-Type':'application/octet-stream'})
response = urllib.request.urlopen(request)
except HTTPError as e:
response = e.file
boydjohnson (Thu, 15 Jun 2017 13:35:47 GMT):
@LoubnaBaroudi @jsmitchell I have to go, but I'll be back on later.
LoubnaBaroudi (Thu, 15 Jun 2017 13:36:05 GMT):
ok thank you @boydjohnson
LoubnaBaroudi (Thu, 15 Jun 2017 13:36:16 GMT):
I've not pasted all the import commands
jsmitchell (Thu, 15 Jun 2017 13:37:34 GMT):
Those aren't commands. That's python code.
LoubnaBaroudi (Thu, 15 Jun 2017 13:38:06 GMT):
That's what I execute
jsmitchell (Thu, 15 Jun 2017 13:38:13 GMT):
Are you following a tutorial and executing intkey commands on the command line?
LoubnaBaroudi (Thu, 15 Jun 2017 13:38:46 GMT):
Yes but the error I get with the inc etc are for this python program
LoubnaBaroudi (Thu, 15 Jun 2017 13:38:59 GMT):
I've already done the tutorial
jsmitchell (Thu, 15 Jun 2017 13:39:15 GMT):
Is this code that you wrote?
LoubnaBaroudi (Thu, 15 Jun 2017 13:40:16 GMT):
yes but it's quit the same as the one in the "Writing Clients with the REST API" part
LoubnaBaroudi (Thu, 15 Jun 2017 13:41:06 GMT):
https://intelledger.github.io/_autogen/txn_submit_tutorial_python.html
jsmitchell (Thu, 15 Jun 2017 13:42:43 GMT):
In inputs and outputs you are using a name of GCCertificate
jsmitchell (Thu, 15 Jun 2017 13:43:46 GMT):
Or GCertificate in one and Gcertificate in the other
LoubnaBaroudi (Thu, 15 Jun 2017 13:44:04 GMT):
with both just 'x' it doesn't work either
jsmitchell (Thu, 15 Jun 2017 13:44:12 GMT):
And in the transaction payload you are using the name "Transaction"
jsmitchell (Thu, 15 Jun 2017 13:44:19 GMT):
All three must match
jsmitchell (Thu, 15 Jun 2017 13:44:53 GMT):
I have to drop off for a bit. Be back soon.
LoubnaBaroudi (Thu, 15 Jun 2017 13:45:02 GMT):
ok
LoubnaBaroudi (Thu, 15 Jun 2017 13:45:15 GMT):
the error is still there :)
agunde (Thu, 15 Jun 2017 13:47:56 GMT):
How are you sending the inc transaction?
LoubnaBaroudi (Thu, 15 Jun 2017 13:48:38 GMT):
just when I run my program there is a rest api command to send the transaction to the validator
LoubnaBaroudi (Thu, 15 Jun 2017 13:48:54 GMT):
at the en of the python script
pschwarz (Thu, 15 Jun 2017 13:56:33 GMT):
@MaximeLandon `tp_settings` would be in the unstable builds - It's not in the stable release as of yet (next one).
jsmitchell (Thu, 15 Jun 2017 14:22:28 GMT):
@LoubnaBaroudi ok, I'm back
jsmitchell (Thu, 15 Jun 2017 14:23:10 GMT):
what is the error from the validator and the intkey transaction processor when you run that code with a 'set' payload with name matching the input and output encoded value?
LoubnaBaroudi (Thu, 15 Jun 2017 14:23:48 GMT):
there is no error, there is one only for 'inc' and 'dec'
jsmitchell (Thu, 15 Jun 2017 14:24:24 GMT):
once you submit the set transaction, do you see a block get produced?
LoubnaBaroudi (Thu, 15 Jun 2017 14:24:31 GMT):
yes
jsmitchell (Thu, 15 Jun 2017 14:24:51 GMT):
when you run `sawtooth state list` do you see the data at that address?
LoubnaBaroudi (Thu, 15 Jun 2017 14:25:17 GMT):
yes
jsmitchell (Thu, 15 Jun 2017 14:25:35 GMT):
ok, so what are you changing to submit the 'inc' transaction?
LoubnaBaroudi (Thu, 15 Jun 2017 14:26:08 GMT):
just the Verb
LoubnaBaroudi (Thu, 15 Jun 2017 14:26:35 GMT):
with the same address or a different one the problem stays the same
jsmitchell (Thu, 15 Jun 2017 14:26:55 GMT):
what is the error you get?
LoubnaBaroudi (Thu, 15 Jun 2017 14:27:35 GMT):
[15:44:53.196 WARNING core] Invalid Transaction Verb is "inc" but name "Transaction" not in state
jsmitchell (Thu, 15 Jun 2017 14:27:49 GMT):
can you cut and paste the _exact_ code you ran to get that error?
LoubnaBaroudi (Thu, 15 Jun 2017 14:28:06 GMT):
it's the python one
jsmitchell (Thu, 15 Jun 2017 14:28:15 GMT):
the python code is wrong, as I said
LoubnaBaroudi (Thu, 15 Jun 2017 14:28:49 GMT):
I've changed what you said
jsmitchell (Thu, 15 Jun 2017 14:29:04 GMT):
can you cut and paste that _exact_ code?
LoubnaBaroudi (Thu, 15 Jun 2017 14:29:31 GMT):
key_handler = secp256k1.PrivateKey()
private_key_bytes = key_handler.private_key
public_key_bytes = key_handler.pubkey.serialize()
public_key_hex = public_key_bytes.hex()
payload = {
'Verb' : 'inc',
'Name' : 'Transaction',
'Value' : 42}
#encoding
payload_bytes = cbor.dumps(payload)
#Creating a SHA-512 Payload Hash
payload_sha512 = sha512(payload_bytes).hexdigest()
#TransactionHeader
txn_header = TransactionHeader(
batcher_pubkey=public_key_hex,
#dependencies
dependencies=['34b90dc789d0ccb48b7a9f04bef191e9e7216d6cea6ccf21442dba1f3bb8d2147aeb24a46581e9091030cf7fae63536353578b65b723a4c836c8180a55daa463'],
family_name='intkey',
family_version='1.0',
inputs="1cf126"+hashlib.sha512("Transaction".encode('utf-8')).hexdigest(),
#state addresses that this Transaction is alloawed to read from
nonce=str(randint(0,1000000000)),
outputs="1cf126"+hashlib.sha512("Transaction".encode('utf-8')).hexdigest(), ##state addresses that this Transaction is alloawed to write from
payload_encoding='application/cbor',
payload_sha512=payload_sha512,
signer_pubkey=public_key_hex)
txn_header_bytes=txn_header.SerializeToString()
#sign the header in order to generate a signature the Sawtooth validator will accept : ECDSA signature
key_handler=secp256k1.PrivateKey(private_key_bytes)
txn_signature = key_handler.ecdsa_sign(txn_header_bytes)
txn_signature_bytes=key_handler.ecdsa_serialize_compact(txn_signature)
txn_signature_hex = txn_signature_bytes.hex()
#Create the Transaction
txn= Transaction(
header=txn_header_bytes,
header_signature=txn_signature_hex,
payload=payload_bytes)
#You can encode the transaction but it's optional
txnList=TransactionList(transactions=[txn])
txnBytes=txnList.SerializeToString()
#The Batch
#decode the transaction(if encode)
txnList=TransactionList()
txnList.ParseFromString(txnBytes)
txn = txnList.transactions[0]
#create the BatchHeader
batch_header = BatchHeader(
signer_pubkey=public_key_hex,
transaction_ids=[txn.header_signature])
batch_header_bytes = batch_header.SerializeToString()
#sign the Header
batch_signature = key_handler.ecdsa_sign(batch_header_bytes)
batch_signature_bytes = key_handler.ecdsa_serialize_compact(batch_signature)
batch_signature_hex = batch_signature_bytes.hex()
#create the batch
batch=Batch(
header=batch_header_bytes,
header_signature=batch_signature_hex,
transactions=[txn])
#encode the batch
batch_list = BatchList(batches=[batch])
batch_bytes = batch_list.SerializeToString()
#Submit to the validator
try:
request = urllib.request.Request(
'http://127.0.0.1:8080/batches',
batch_bytes,
method='POST',
headers={'Content-Type':'application/octet-stream'})
response = urllib.request.urlopen(request)
except HTTPError as e:
response = e.file
jsmitchell (Thu, 15 Jun 2017 14:32:09 GMT):
Those input/output address formats are wrong
jsmitchell (Thu, 15 Jun 2017 14:34:03 GMT):
they should be `hashlib.sha512('intkey'.encode('utf-8')).hexdigest()[0:6] + hashlib.sha512(name.encode('utf-8')).hexdigest()[-64:]`
jsmitchell (Thu, 15 Jun 2017 14:34:37 GMT):
set name = "Transaction" prior to that
jsmitchell (Thu, 15 Jun 2017 14:34:56 GMT):
I am not convinced that your set transaction ever succeeded
LoubnaBaroudi (Thu, 15 Jun 2017 14:36:15 GMT):
same thing
agunde (Thu, 15 Jun 2017 14:36:23 GMT):
@jsmitchell It looks like we have a bug. It was able to set using his code (i changed it slightly but was seeing the same behavior.)
LoubnaBaroudi (Thu, 15 Jun 2017 14:36:28 GMT):
The set is working but not the inc
jsmitchell (Thu, 15 Jun 2017 14:36:45 GMT):
hmm
agunde (Thu, 15 Jun 2017 14:36:46 GMT):
@LoubnaBaroudi they also need to be in a list
agunde (Thu, 15 Jun 2017 14:36:59 GMT):
[hashlib.sha512('intkey'.encode('utf-8')).hexdigest()[0:6] + hashlib.sha512(name.encode('utf-8')).hexdigest()[-64:]]
LoubnaBaroudi (Thu, 15 Jun 2017 14:38:08 GMT):
I noticed that but whenever I put [ ], even the 'set' transaction fail
jsmitchell (Thu, 15 Jun 2017 14:39:24 GMT):
a string is a list
jsmitchell (Thu, 15 Jun 2017 14:39:27 GMT):
of characters
jsmitchell (Thu, 15 Jun 2017 14:40:03 GMT):
probably being treated as wildcard addresses
agunde (Thu, 15 Jun 2017 14:40:07 GMT):
inputs=["1cf126"+hashlib.sha512("Transaction".encode('utf-8')).hexdigest()[-64:]], #state addresses that this Transaction is alloawed to read from
outputs=["1cf126"+hashlib.sha512("Transaction".encode('utf-8')).hexdigest()[-64:]], ##state addresses that this Transaction is alloawed to write from
jsmitchell (Thu, 15 Jun 2017 14:40:21 GMT):
which is why the set worked
agunde (Thu, 15 Jun 2017 14:40:22 GMT):
@LoubnaBaroudi This fixed it in my version of your code
agunde (Thu, 15 Jun 2017 14:40:31 GMT):
@jsmitchell yep
jsmitchell (Thu, 15 Jun 2017 14:41:39 GMT):
coercing strings to lists is one of my pet peeves with python
LoubnaBaroudi (Thu, 15 Jun 2017 14:42:48 GMT):
it doesn't work for me..
jsmitchell (Thu, 15 Jun 2017 14:43:28 GMT):
Did you redo the set?
LoubnaBaroudi (Thu, 15 Jun 2017 14:45:04 GMT):
ok it works now
jsmitchell (Thu, 15 Jun 2017 14:45:09 GMT):
yay!
LoubnaBaroudi (Thu, 15 Jun 2017 14:45:13 GMT):
Thank you!!!!!
agunde (Thu, 15 Jun 2017 14:45:17 GMT):
:thumbsup:
LoubnaBaroudi (Thu, 15 Jun 2017 14:46:22 GMT):
I was correcting the list mistake but there was still the problem of the name which didn't match the address so I was going in circles
casualuser (Thu, 15 Jun 2017 15:37:55 GMT):
greetings everyone! looking for some help with setting up "Sawtooth Bond UI Client"
there is good notice about pre-seeding data for server with ./bin/btp load
but it reply like this:
[15:36:55 DEBUG client] waiting for transaction abbf0ed715791f92 to commit (not_found:404)
any help please?
tkuhrt (Thu, 15 Jun 2017 15:56:50 GMT):
Hi, Sawtooth Community. The Linux Foundation is working on putting together an introductory training course on Hyperledger. One of the chapters in the course will be on Sawtooth. Specifically, providing an overview of Sawtooth, setting up an environment, developing and running a first application. The team is looking for some members of the community who would be willing to lend a hand with putting together some of the material and providing some expertise on the subject of Hyperledger Sawtooth. Please let me know here or DM me if you are interested and I can connect you with the right folks.
GhadiShayban (Thu, 15 Jun 2017 17:22:49 GMT):
Does there need to be a corresponding Transaction Process for every validator?
GhadiShayban (Thu, 15 Jun 2017 17:22:49 GMT):
Does there need to be a corresponding Transaction Processor for every validator?
GhadiShayban (Thu, 15 Jun 2017 17:23:45 GMT):
As in, does a three node validation network have to have 3 transaction processors for a given transaction family? (In order for all the validators to have the same global state)
amundson (Thu, 15 Jun 2017 17:34:17 GMT):
@GhadiShayban yes, that's correct. you can think of transaction processors as a component of a validator node.
tkuhrt (Thu, 15 Jun 2017 17:36:10 GMT):
I am working my way through the Application Developer's Guide again (https://intelledger.github.io/app_developers_guide/ubuntu.html). I have made it to the Start Validator section and I have two questions before proceeding. In the previous section, I needed to run the commands as root. Do I need to do the same thing for the "Start Validator" section?
tkuhrt (Thu, 15 Jun 2017 17:38:50 GMT):
Okay...my second question was going to be about the keygen step for the validator. I was wondering about the path for the keys generated, but it appears that these are different keys than the ones created for the genesis block. Thus the different directory.
GhadiShayban (Thu, 15 Jun 2017 17:39:04 GMT):
thanks @amundson
toddojala (Thu, 15 Jun 2017 17:39:10 GMT):
@tkuhrt It should not be necessary to run the validator as root, as long as the files & keys produced are readable by the user you are running the validator as.
toddojala (Thu, 15 Jun 2017 17:39:22 GMT):
We'll clarify that detail, though!
tkuhrt (Thu, 15 Jun 2017 17:40:41 GMT):
Okay. It looks like the /etc/sawtooth/keys/ directory is owned by the `sawtooth` user. And my user only has access to read from that directory.
tkuhrt (Thu, 15 Jun 2017 17:40:58 GMT):
So I either have to switch to `sawtooth` user or run as root.
toddojala (Thu, 15 Jun 2017 17:41:33 GMT):
@tkuhrt that sounds right. Again, we'll make this section more clear. So it's working for you?
tkuhrt (Thu, 15 Jun 2017 17:41:55 GMT):
So far...I will definitely post here any other problems I run across.
tkuhrt (Thu, 15 Jun 2017 17:43:20 GMT):
Okay...next error:
```
tkuhrt@sawtooth:~$ sudo validator -vv --endpoint tcp://localhost:8800
usage: validator [-h] [--config-dir CONFIG_DIR]
[--network-endpoint NETWORK_ENDPOINT]
[--component-endpoint COMPONENT_ENDPOINT]
[--peering {static,dynamic}] --public-uri PUBLIC_URI
[--join JOIN] [--peers PEERS] [-v]
validator: error: the following arguments are required: --public-uri
```
tkuhrt (Thu, 15 Jun 2017 17:43:42 GMT):
maybe I need to update my package...let me try that first
toddojala (Thu, 15 Jun 2017 17:44:50 GMT):
@tkuhrt When was the last time you fetched or got the latest code? --public-uri is no longer a parameter used by validator.
toddojala (Thu, 15 Jun 2017 17:45:20 GMT):
usage: validator [-h] [--config-dir CONFIG_DIR] [-B BIND]
[-P {static,dynamic}] [-E ENDPOINT] [-s SEEDS] [-p PEERS]
[-v]
tkuhrt (Thu, 15 Jun 2017 17:45:57 GMT):
That is what I figured...early last week. Having trouble getting latest package because of public key issues with http://repo.sawtooth.me/ubuntu/0.8/stable. Going to dig into that.
toddojala (Thu, 15 Jun 2017 17:46:48 GMT):
@tkuhrt Are you getting the code with apt-get, or git?
tkuhrt (Thu, 15 Jun 2017 17:46:59 GMT):
apt-get
tkuhrt (Thu, 15 Jun 2017 17:51:33 GMT):
had to do the apt-key command again for some reason. Doing the apt-get update now
tkuhrt (Thu, 15 Jun 2017 17:54:49 GMT):
Is there any way to find out what version of tools I have installed (e.g., what version of validator)?
tkuhrt (Thu, 15 Jun 2017 17:56:32 GMT):
Never mind...I did a dpkg -s sawtooth and I had an older version. Got the new one now
GhadiShayban (Thu, 15 Jun 2017 17:56:52 GMT):
Just to labor the my original question the 1:1 validation:transaction processor applies all the time, right? As in, is it possible to have 10 validator nodes but only three of them contain TPs for a _particular_ family?
GhadiShayban (Thu, 15 Jun 2017 17:56:52 GMT):
Just to labor the my original question: the 1:1 validation:transaction processor applies all the time, right? As in, is it possible to have 10 validator nodes but only three of them contain TPs for a _particular_ family?
amundson (Thu, 15 Jun 2017 18:01:15 GMT):
all validators need to have the same TPs. it is 1-to-many, in that you are likely to have multiple transaction families running. really, all validators must have the transaction processor's for transaction families configured in the on-chain settings. using the settings family to control it allows for rolling upgrades across the network.
tkuhrt (Thu, 15 Jun 2017 18:01:36 GMT):
@toddojala : Looks like rest_api command in the getting started needs to be modified for the latest release
```
tkuhrt@sawtooth:~$ sudo rest_api --stream-url tcp://127.0.0.1:40000
[sudo] password for tkuhrt:
usage: rest_api [-h] [-B BIND] [-C CONNECT] [-t TIMEOUT] [-v]
rest_api: error: unrecognized arguments: --stream-url tcp://127.0.0.1:40000
tkuhrt@sawtooth:~$ sudo rest_api -v
[10:58:41.942 INFO rest_api] Creating handlers for validator at tcp://localhost:40000
[10:58:41.943 INFO rest_api] Starting REST API on 127.0.0.1:8080
======== Running on http://127.0.0.1:8080 ========
(Press CTRL+C to quit)
```
amundson (Thu, 15 Jun 2017 18:02:17 GMT):
@tkuhrt we recently revised our key management practices, thus the new key
tkuhrt (Thu, 15 Jun 2017 18:02:43 GMT):
Cool..thanks, @amundson
amundson (Thu, 15 Jun 2017 18:02:59 GMT):
we now have separate release key and nightly key
GhadiShayban (Thu, 15 Jun 2017 18:09:23 GMT):
( @amundson the TP for the settings family is _intrinsic_ in the validator process, right?)
jsmitchell (Thu, 15 Jun 2017 18:09:32 GMT):
no
jsmitchell (Thu, 15 Jun 2017 18:09:41 GMT):
you need to start up tp_settings
GhadiShayban (Thu, 15 Jun 2017 18:10:02 GMT):
oh right -- tp_config == tp_settings now
amundson (Thu, 15 Jun 2017 18:12:09 GMT):
validator internals know about the on-chain settings state, but not the implementation for changing/updating it. one could replace the mechanism of change (reference implementation tp_settings) by another transaction processor if that transaction processor adheres to how state is stored
tkuhrt (Thu, 15 Jun 2017 18:12:34 GMT):
Working on https://intelledger.github.io/app_developers_guide/ubuntu.html#config-transaction-family-usage section. Still have validator, tp_intkey, and rest_api running from previous steps. I am getting a warning from tp_config and an error in the validator.
```
tkuhrt@sawtooth:~$ sudo tp_config tcp://localhost:40000
[sudo] password for tkuhrt:
[11:08:25 WARNING core] Invalid Transaction ('Tried to get unauthorized address: %s', ['000000a87cb5eafdcca6a8b79606fb3afea5bdab274474a6aa82c12840f169a04216b7'])
```
and in the validator:
```
[11:08:25.191 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 123 bytes
[11:08:25.192 INFO processor_handlers] registered transaction processor: connection_id=2186fcf2f4e541037fc64b96dddc0353922574f27080e8345879584682d9a923bf8ba85560edf45738176ba2ee7912210d3b1201b1a393d6c262ade1005cd36c, family=sawtooth_config, version=1.0, encoding=application/protobuf, namespaces=['000000']
[11:08:25.193 DEBUG interconnect] ServerThread sending TP_REGISTER_RESPONSE to b'e118b9b444b545c4'
[11:08:25.194 DEBUG interconnect] ServerThread sending TP_PROCESS_REQUEST to b'e118b9b444b545c4'
[11:08:25.196 DEBUG interconnect] ServerThread receiving TP_STATE_GET_REQUEST message: 177 bytes
[11:08:25.198 DEBUG interconnect] ServerThread sending TP_STATE_GET_RESPONSE to b'e118b9b444b545c4'
[11:08:25.200 DEBUG interconnect] ServerThread receiving TP_PROCESS_RESPONSE message: 73 bytes
[11:08:25.201 DEBUG interconnect] message round trip: TP_PROCESS_RESPONSE 0.007776498794555664
[11:08:25.201 ERROR cli] Unable to create genesis block, due to batch fc3d6741eaa95b6052e2c83c92297b77bd8f9796faaddd49848cb27bc6f52bce2fa8cc87b75c09ff439f465772c4dd31253ea287c391266b4db45d1b727fb37b
[11:08:25.202 DEBUG dispatch] Attempted to remove send_message function for connection ServerThread, but no send_message function was registered
[11:08:25.203 DEBUG dispatch] Removed send_message function for connection ServerThread
[11:08:25.613 INFO core] remaining threads: Thread-1 (_ContextReader), Thread-2 (_ContextWriter)
[11:08:26.616 INFO core] All threads have been stopped and joined
```
And the validator is no longer running.
jsmitchell (Thu, 15 Jun 2017 18:13:33 GMT):
@rbuysse @pschwarz ^^
jsmitchell (Thu, 15 Jun 2017 18:13:49 GMT):
I think that's something that Ryan and Peter were talking about yesterday
rbuysse (Thu, 15 Jun 2017 18:14:06 GMT):
yup.
jsmitchell (Thu, 15 Jun 2017 18:14:16 GMT):
any details?
rbuysse (Thu, 15 Jun 2017 18:15:10 GMT):
hm maybe it's different, let me take a look.
jsmitchell (Thu, 15 Jun 2017 18:23:46 GMT):
@boydjohnson @agunde per an earlier discussion here, if someone passes in a string address into inputs or outputs in the python sdk it will be interpreted as a list of single character address wildcards. This seems bad.
rbuysse (Thu, 15 Jun 2017 18:35:12 GMT):
ok it looks like a different thing, I'll have to check with @pschwarz
jsmitchell (Thu, 15 Jun 2017 18:36:22 GMT):
to me it looks like a transaction was built without an appropriate input specified
jsmitchell (Thu, 15 Jun 2017 18:37:32 GMT):
@pschwarz and it looks like that transaction probably came from the config/settings client
pschwarz (Thu, 15 Jun 2017 18:57:23 GMT):
Hmm
pschwarz (Thu, 15 Jun 2017 18:58:59 GMT):
@tkuhrt what steps do you do to create your `genesis.batch` file?
toddojala (Thu, 15 Jun 2017 19:00:58 GMT):
@tkuhrt Could you show us the Validator's output from the time you started it?
tkuhrt (Thu, 15 Jun 2017 19:19:16 GMT):
@pschwarz : I am following the steps here. https://intelledger.github.io/app_developers_guide/ubuntu.html.
tkuhrt (Thu, 15 Jun 2017 19:19:47 GMT):
Now that you ask that, I think that the genesis.batch may have been created with 0.8.4 and the validator ran with 0.8.5
tkuhrt (Thu, 15 Jun 2017 19:19:55 GMT):
That may be what's causing this.
pschwarz (Thu, 15 Jun 2017 19:20:36 GMT):
Ah, the address format for settings changed between those two, I think
pschwarz (Thu, 15 Jun 2017 19:20:42 GMT):
That would explain it
toddojala (Thu, 15 Jun 2017 19:20:58 GMT):
@tkuhrt Just delete the data files and try starting over...
tkuhrt (Thu, 15 Jun 2017 19:21:25 GMT):
Okay...assuming you don't need my validator output anymore, right?
toddojala (Thu, 15 Jun 2017 19:21:40 GMT):
@tkuhrt right!
tkuhrt (Thu, 15 Jun 2017 19:22:22 GMT):
Alright...let me start over again and see if the problem goes away. Just need to remove `/var/lib/sawtooth`, right?
jsmitchell (Thu, 15 Jun 2017 19:23:33 GMT):
probably just /var/lib/sawtooth/data/*
toddojala (Thu, 15 Jun 2017 19:23:57 GMT):
@tkuhrt ^^
tkuhrt (Thu, 15 Jun 2017 19:28:40 GMT):
No data directory
```
tkuhrt@sawtooth:~$ ls /var/lib/sawtooth/
block-00.lmdb block-00.lmdb-lock genesis.batch merkle-00.lmdb merkle-00.lmdb-lock state-deltas-00.lmdb state-deltas-00.lmdb-lock
```
jsmitchell (Thu, 15 Jun 2017 19:29:26 GMT):
yeah /var/lib/sawtooth/*
tkuhrt (Thu, 15 Jun 2017 19:29:34 GMT):
Okay...thnaks
tkuhrt (Thu, 15 Jun 2017 19:29:34 GMT):
Okay...thanks
jsmitchell (Thu, 15 Jun 2017 19:30:04 GMT):
stuff is in different places for the production install
toddojala (Thu, 15 Jun 2017 19:30:15 GMT):
@tkuhrt Aha. We do have that as a note in the Ubuntu guide: If you need to delete previously existing block-chain data before running a validator, simply run the following command: rm /var/lib/sawtooth/*
tkuhrt (Thu, 15 Jun 2017 19:30:47 GMT):
Cool.
boydjohnson (Thu, 15 Jun 2017 19:32:04 GMT):
@jsmitchell After PR #634 if someone puts in a string for the inputs or outputs, the txn is failed, before it on master there is odd behavior.
jsmitchell (Thu, 15 Jun 2017 19:32:56 GMT):
@boydjohnson I was thinking we could also check for it in the client sdk
jsmitchell (Thu, 15 Jun 2017 19:33:03 GMT):
specifically if the list is a string
boydjohnson (Thu, 15 Jun 2017 19:34:04 GMT):
Yeah, it would be nice as we are forming the txns to make sure that it is an actual list.
pschwarz (Thu, 15 Jun 2017 19:44:06 GMT):
:point_up: Make a story/stories for this
boydjohnson (Thu, 15 Jun 2017 19:49:02 GMT):
I will. It would apply to the Python client sdk, at least.
tkuhrt (Thu, 15 Jun 2017 19:54:31 GMT):
@toddojala: Made it through https://intelledger.github.io/app_developers_guide/ubuntu.html. Only issue is the one place in https://intelledger.github.io/app_developers_guide/ubuntu.html#starting-the-rest-api that has `--stream_url` instead of `--connect` as the argument.
boydjohnson (Thu, 15 Jun 2017 19:56:06 GMT):
So apparently there isn't a generic Python transaction formation client like there is in the javascript. This error came out of the someone going through the Building and Submitting Transactions (Python 3) http://intelledger.github.io/_autogen/txn_submit_tutorial_python.html?highlight=python#building-and-submitting-transactions-python-3 tutorial. @zac With this tutorial, are we moving towards writing clients that form arbitrary transactions and then having tutorials for those, instead of tutorials about how to form your own transactions?
boydjohnson (Thu, 15 Jun 2017 19:57:06 GMT):
@pschwarz Not entirely sure now what Jira story to make for this issue.
zac (Thu, 15 Jun 2017 19:57:34 GMT):
The idea behind that tutorial is to provide a backstop for when the SDK functionality doesn't exist, or someone is working in a language without an SDK.
zac (Thu, 15 Jun 2017 19:57:40 GMT):
So it is full manual.
jsmitchell (Thu, 15 Jun 2017 19:57:52 GMT):
wouldn't it be in the TransactionHeader._init_?
zac (Thu, 15 Jun 2017 19:57:54 GMT):
There is a story to reorganize it a bit and make that more clear.
jsmitchell (Thu, 15 Jun 2017 19:57:57 GMT):
oh, that's protobuf generated...
boydjohnson (Thu, 15 Jun 2017 19:58:05 GMT):
yep.
zac (Thu, 15 Jun 2017 19:58:06 GMT):
There is also a story to add that functionality to the Python SDK
jsmitchell (Thu, 15 Jun 2017 19:58:27 GMT):
that's a shame
zac (Thu, 15 Jun 2017 20:04:36 GMT):
At the very least, shouldn't a Protobuf error already be getting thrown if you try to `TransactionHeader(inputs='abcde')`, which you should `TransactionHeader(inputs=['abcde'])`?
zac (Thu, 15 Jun 2017 20:04:36 GMT):
At the very least, shouldn't a Protobuf error already be getting thrown if you try to `TransactionHeader(inputs='abcde')`, when you should `TransactionHeader(inputs=['abcde'])`?
jsmitchell (Thu, 15 Jun 2017 20:29:27 GMT):
@zac: 'abcde' is a list in python
boydjohnson (Thu, 15 Jun 2017 20:29:30 GMT):
No apparently whatever coersion that the protobuf does works on a list the same as a string.
jsmitchell (Thu, 15 Jun 2017 20:29:43 GMT):
that's python
zac (Thu, 15 Jun 2017 20:31:21 GMT):
Oh, so it accepts any iterable, not just lists
zac (Thu, 15 Jun 2017 20:31:27 GMT):
I suppose that makes sense
zac (Thu, 15 Jun 2017 20:32:52 GMT):
Well, I'll probably be adding that functionality to the Python SDK next sprint, I can add a check
jsmitchell (Thu, 15 Jun 2017 20:33:17 GMT):
how? we are using the generated protobuf TransactionHeader object directly
zac (Thu, 15 Jun 2017 20:33:39 GMT):
It gets used within another method
zac (Thu, 15 Jun 2017 20:34:08 GMT):
You could just say "if inputs is a string, don't TransactionHeader"
zac (Thu, 15 Jun 2017 20:34:23 GMT):
Or alternatively "if inputs is not a list"
jsmitchell (Thu, 15 Jun 2017 20:34:38 GMT):
I am curious to see where you plan to put that code
zac (Thu, 15 Jun 2017 20:39:24 GMT):
In the JavaScript SDK it would go here:
```
class TransactionEncoder {
. . .
create (payload, settings = {}) {
inputs = settings.inputs || this.inputs
if (typeof inputs === 'string') throw Exception('Inputs must be an array of strings')
const header = TransactionHeader.encode({
inputs,
. . .
}).finish()
. . .
}
}
```
jsmitchell (Thu, 15 Jun 2017 20:39:43 GMT):
well, yeah, if you _wrap_ TransactionHeader, it's easy
jsmitchell (Thu, 15 Jun 2017 20:39:55 GMT):
the python sdk doesn't do that
zac (Thu, 15 Jun 2017 20:40:01 GMT):
well, that's what the client functionality in the SDKs does
jsmitchell (Thu, 15 Jun 2017 20:40:55 GMT):
that's what the client functionality in the Javascript SDK does
jsmitchell (Thu, 15 Jun 2017 20:41:01 GMT):
not the python one, currently
zac (Thu, 15 Jun 2017 20:41:16 GMT):
It doesn't exist in the python one currently
jsmitchell (Thu, 15 Jun 2017 20:41:19 GMT):
but, i think it's a good topic for discussion
zac (Thu, 15 Jun 2017 20:41:20 GMT):
You have to do it manually
zac (Thu, 15 Jun 2017 20:41:36 GMT):
There is a JIRA task to add it though
jsmitchell (Thu, 15 Jun 2017 20:41:50 GMT):
which story?
zac (Thu, 15 Jun 2017 20:42:02 GMT):
https://jira.hyperledger.org/browse/STL-460
zac (Thu, 15 Jun 2017 20:43:21 GMT):
The Go and JavaScript SDKs currently have this functionality
zac (Thu, 15 Jun 2017 20:43:29 GMT):
There is a story for adding it to each of the others
zac (Thu, 15 Jun 2017 20:46:15 GMT):
We should probably do some research into languages might need extra data validation and build that in
zac (Thu, 15 Jun 2017 20:46:15 GMT):
We should probably do some research into which languages need extra data validation where and build that in
toddojala (Thu, 15 Jun 2017 21:30:19 GMT):
@tkuhrt Thanks! I'm taking a look... aha. It's fixed in the version of the docs based on Master: http://intelledger.github.io/0.8/app_developers_guide/ubuntu.html#starting-the-rest-api
toddojala (Thu, 15 Jun 2017 21:30:44 GMT):
@tkuhrt I'll try to get the version of the docs in the Latest release fixed, though,before the next release.
mohitsharma18893 (Fri, 16 Jun 2017 05:55:14 GMT):
Has joined the channel.
mohitsharma18893 (Fri, 16 Jun 2017 05:55:24 GMT):
Hi
mohitsharma18893 (Fri, 16 Jun 2017 05:55:39 GMT):
can somebody help me to install sawtooth in my ubuntu system??
casualuser (Fri, 16 Jun 2017 06:50:06 GMT):
@mohitsharma18893 checked this guide it may be helpfull - http://intelledger.github.io/0.7/sysadmin_guide/installation_ubuntu.html
casualuser (Fri, 16 Jun 2017 06:50:43 GMT):
and here is how to create packages - http://intelledger.github.io/0.7/sysadmin_guide/packaging_ubuntu.html
casualuser (Fri, 16 Jun 2017 06:51:42 GMT):
and if you do not need any customs then just use this - http://intelledger.github.io/app_developers_guide/ubuntu.html?highlight=installation%20ubuntu
casualuser (Fri, 16 Jun 2017 09:11:46 GMT):
greetings one! can someone help me make clear question with Creator in terms of btp? it looks like it's not the user with .wif key but some kind of another record
SahilKapoor (Fri, 16 Jun 2017 10:39:12 GMT):
How do we build db and manage transactions accordingly for privacy?
SahilKapoor (Fri, 16 Jun 2017 10:39:12 GMT):
How do we build side db and manage transactions accordingly for privacy?
SahilKapoor (Fri, 16 Jun 2017 10:39:37 GMT):
Like we do in Quourum
LoubnaBaroudi (Fri, 16 Jun 2017 12:54:07 GMT):
Does the marketplace transaction family still exists in the lastest sawtooth version?
LoubnaBaroudi (Fri, 16 Jun 2017 13:10:16 GMT):
or the bond family
casualuser (Fri, 16 Jun 2017 13:12:35 GMT):
bond family exists only in 0.7
agunde (Fri, 16 Jun 2017 13:12:58 GMT):
@LoubnaBaroudi bond and market place have not been ported to 0.8 yet.
LoubnaBaroudi (Fri, 16 Jun 2017 13:14:14 GMT):
is it in progress or not even started?
LoubnaBaroudi (Fri, 16 Jun 2017 13:18:01 GMT):
And can we still use sawtooth 0.7 with a CLI or not anymore?
jaredcorduan (Fri, 16 Jun 2017 13:51:56 GMT):
is there a way to see the peer list for a given validator?
jsmitchell (Fri, 16 Jun 2017 13:52:36 GMT):
@jaredcorduan no, that info is not exposed at the moment
jaredcorduan (Fri, 16 Jun 2017 13:52:42 GMT):
ok, thanks
jsmitchell (Fri, 16 Jun 2017 13:52:49 GMT):
@jaredcorduan you could parse the logs
jaredcorduan (Fri, 16 Jun 2017 13:52:58 GMT):
gotcha
jsmitchell (Fri, 16 Jun 2017 13:53:17 GMT):
sounds like a good jira story :)
GhadiShayban (Fri, 16 Jun 2017 13:53:28 GMT):
Could we issue some protobuf request to introspects?
GhadiShayban (Fri, 16 Jun 2017 13:53:57 GMT):
What we're actually trying to do is expose metrics to prometheus
GhadiShayban (Fri, 16 Jun 2017 13:54:34 GMT):
Prometheus metrics would be a good jira story =)
jsmitchell (Fri, 16 Jun 2017 13:54:36 GMT):
@GhadiShayban ludvik and ryan are working on getting some stuff out to grafana
jsmitchell (Fri, 16 Jun 2017 13:54:50 GMT):
@adamludvik @rbuysse ^
GhadiShayban (Fri, 16 Jun 2017 13:55:04 GMT):
Through what backend mechanism? grafana is a front-end
jsmitchell (Fri, 16 Jun 2017 13:55:13 GMT):
adam has some thoughts on an integration
jsmitchell (Fri, 16 Jun 2017 13:55:17 GMT):
i think via statsd
rbuysse (Fri, 16 Jun 2017 13:55:20 GMT):
telegraf an an influx db
rbuysse (Fri, 16 Jun 2017 13:55:20 GMT):
telegraf and an influx db
zac (Fri, 16 Jun 2017 13:56:18 GMT):
@LoubnaBaroudi There are some plans to do marketplace or something similar to marketplace in 0.8, but they aren't finalized no work has been started. No plans for bond.
jaredcorduan (Fri, 16 Jun 2017 13:56:28 GMT):
there aren't any timestamps on the rest api `/blocks/` endpoint. is there a best way to get those? I guess logs would work. :)
jaredcorduan (Fri, 16 Jun 2017 13:56:28 GMT):
there aren't any timestamps on the rest api `/blocks` endpoint. is there a best way to get those? I guess logs would work. :)
zac (Fri, 16 Jun 2017 13:56:50 GMT):
There was a contributor who talked about doing a straight port of marketplace, but I'm not sure what the status of his work is.
GhadiShayban (Fri, 16 Jun 2017 13:57:16 GMT):
(I would recommend against statsd or any UDP based metrics
GhadiShayban (Fri, 16 Jun 2017 13:57:16 GMT):
(I would recommend against statsd or any UDP based metrics)
jsmitchell (Fri, 16 Jun 2017 13:57:21 GMT):
@jaredcorduan what timestamp are you looking for? the publishing validator's local clock at the time the block was published? when the block was received and added to the blockstore?
jaredcorduan (Fri, 16 Jun 2017 13:57:53 GMT):
any of those would be nice
jsmitchell (Fri, 16 Jun 2017 13:58:00 GMT):
there are none of those
jsmitchell (Fri, 16 Jun 2017 13:58:01 GMT):
:)
GhadiShayban (Fri, 16 Jun 2017 13:58:07 GMT):
haha
jaredcorduan (Fri, 16 Jun 2017 13:58:16 GMT):
:)
LoubnaBaroudi (Fri, 16 Jun 2017 13:58:23 GMT):
thank you @zac
jsmitchell (Fri, 16 Jun 2017 13:58:45 GMT):
@jaredcorduan we are wary of timestamps
jsmitchell (Fri, 16 Jun 2017 13:58:49 GMT):
what's the use case?
jaredcorduan (Fri, 16 Jun 2017 13:58:59 GMT):
just for a basic dashboard
jsmitchell (Fri, 16 Jun 2017 13:59:17 GMT):
oh, for stats
GhadiShayban (Fri, 16 Jun 2017 13:59:20 GMT):
along the line of more metrics for block progress
jaredcorduan (Fri, 16 Jun 2017 13:59:21 GMT):
yep
jsmitchell (Fri, 16 Jun 2017 13:59:39 GMT):
yeah, that makes things easier
jsmitchell (Fri, 16 Jun 2017 14:00:06 GMT):
i assume that whatever @adamludvik and @rbuysse decide to do is going to support timeseries events
jaredcorduan (Fri, 16 Jun 2017 14:00:13 GMT):
it definitely does not have to be precise
jaredcorduan (Fri, 16 Jun 2017 14:00:43 GMT):
we've got a linear history, life is pretty good :)
zac (Fri, 16 Jun 2017 14:02:11 GMT):
@SahilKapoor I don't think there are any examples of private side db's with Sawtooth for you to reference. There certainly aren't any guides at this point. That said, the short version is:
- Write a Transaction Processor that stores hashes of data on the blockchain
- Store the private data in whatever way makes sense
- Hash that data and store the hash on the blockchain anytime it is modified
- Use the hashes on the blockchain to confirm data validity as needed
jaredcorduan (Fri, 16 Jun 2017 14:03:43 GMT):
thanks for the swift answers @jsmitchell !
GhadiShayban (Fri, 16 Jun 2017 14:04:07 GMT):
and thanks for not including timestamps on the transaction protos!
jsmitchell (Fri, 16 Jun 2017 14:04:13 GMT):
yeah, sorry they are not more immediately satisfying
GhadiShayban (Fri, 16 Jun 2017 14:04:15 GMT):
saving thousands of future bugs
jsmitchell (Fri, 16 Jun 2017 14:04:25 GMT):
heh, yeah
jsmitchell (Fri, 16 Jun 2017 14:05:07 GMT):
@rbuysse @pschwarz looks like darian has some stats stories in the next sprint?
GhadiShayban (Fri, 16 Jun 2017 14:05:13 GMT):
@jaredcorduan we should collect a list of desirable operational metrics
jsmitchell (Fri, 16 Jun 2017 14:05:22 GMT):
that would be super useful
rbuysse (Fri, 16 Jun 2017 14:05:52 GMT):
yeah @jsmitchell at least to start defining what we want to be collecting
LoubnaBaroudi (Fri, 16 Jun 2017 14:57:26 GMT):
To create a new transaction family, we have to write all the processor and client_cli programs?
toddojala (Fri, 16 Jun 2017 14:59:34 GMT):
@LoubnaBaroudi You would have to create a handler for your new transaction processor, and can use one of our SDKs: http://intelledger.github.io/0.8/_autogen/sdk_TP_tutorial_python.html
toddojala (Fri, 16 Jun 2017 15:02:30 GMT):
@LoubnaBaroudi You'd have to create your own client to do anything that is user-facing (although you can submit a transaction/batch using this included command) http://intelledger.github.io/0.8/cli/sawtooth.html#sawtooth-batch-submit
toddojala (Fri, 16 Jun 2017 15:02:52 GMT):
@LoubnaBaroudi See the XO CLI for a good example of a user-facing CLI.
LoubnaBaroudi (Fri, 16 Jun 2017 15:17:19 GMT):
ok thank you
pschwarz (Fri, 16 Jun 2017 17:36:22 GMT):
Put together a small demo app using the state delta subscription feature: https://github.com/peterschwarz/state-export-prototype
jsmitchell (Fri, 16 Jun 2017 17:36:36 GMT):
404
pschwarz (Fri, 16 Jun 2017 17:37:19 GMT):
Whoops for got to make it public
pschwarz (Fri, 16 Jun 2017 17:37:19 GMT):
Whoops forgot to make it public
pschwarz (Fri, 16 Jun 2017 17:37:58 GMT):
I should add a little bit more in the readme for setting up a db
pschwarz (Fri, 16 Jun 2017 17:38:50 GMT):
Message Attachments
kellyo (Fri, 16 Jun 2017 17:38:55 GMT):
@mohitsharma18893 hello
jsmitchell (Fri, 16 Jun 2017 17:42:40 GMT):
@GhadiShayban ^ clj
GhadiShayban (Fri, 16 Jun 2017 18:04:21 GMT):
beautiful
GhadiShayban (Fri, 16 Jun 2017 18:06:34 GMT):
That's very well factored clojure code...
pschwarz (Fri, 16 Jun 2017 18:07:01 GMT):
@GhadiShayban Added a little more info to the readme re: database setup
pschwarz (Fri, 16 Jun 2017 18:08:36 GMT):
Also, thanks
pschwarz (Fri, 16 Jun 2017 18:08:38 GMT):
:)
jsmitchell (Fri, 16 Jun 2017 18:09:13 GMT):
to be honest
jsmitchell (Fri, 16 Jun 2017 18:09:30 GMT):
@pschwarz is more parentheses than man now
pschwarz (Fri, 16 Jun 2017 18:09:36 GMT):
lol
mattalhonte (Fri, 16 Jun 2017 18:26:20 GMT):
Has joined the channel.
mattalhonte (Fri, 16 Jun 2017 18:33:43 GMT):
@pschwarz Love the Clojure interop!
mattalhonte (Fri, 16 Jun 2017 18:35:08 GMT):
@pschwarz Not sure if it still works (not actively maintained), but this is similar (for Ethereum though) and might have some useful things to look at: https://medium.com/@matus.lestan/how-to-create-decentralised-apps-with-clojurescript-re-frame-and-ethereum-81de24d72ff5
GhadiShayban (Fri, 16 Jun 2017 18:37:34 GMT):
so much similarity between the sawtooth merkle state and datomic's storage trees
GhadiShayban (Fri, 16 Jun 2017 18:38:13 GMT):
in fact we're exploring some lightweight relational / EAV models superimposed in the merklestate
GhadiShayban (Fri, 16 Jun 2017 18:39:17 GMT):
CBOR seems like a nice middle ground between json and schema'ed formats because it can do value tagging, like Clojure's EDN
GhadiShayban (Fri, 16 Jun 2017 18:39:39 GMT):
that way you can represent links to other merkle addrs without having to have a context/schema
pschwarz (Fri, 16 Jun 2017 18:39:50 GMT):
Yeah, it's a bit of an immutable database, with history
GhadiShayban (Fri, 16 Jun 2017 18:39:55 GMT):
however CBORs tags are integers, not symbolic
GhadiShayban (Fri, 16 Jun 2017 18:40:38 GMT):
probably lots of CBOR libs don't focus on/support the tagged values well
pschwarz (Fri, 16 Jun 2017 18:40:54 GMT):
Yeah, it's not the best, though - implementations vary widely across languanges, so you can run into issues with parsing and deterministic encodings
pschwarz (Fri, 16 Jun 2017 18:41:14 GMT):
We've had issues with the latter
pschwarz (Fri, 16 Jun 2017 18:41:37 GMT):
Particularly problematic with maps
GhadiShayban (Fri, 16 Jun 2017 18:42:25 GMT):
the sawtooth merkle address prefixing scheme is _exactly_ how datomic partitions Entity IDs -- this gives entities locality in the B-tree indexes (similar address "types" sort nearby)
pschwarz (Fri, 16 Jun 2017 18:43:30 GMT):
Interesting - I'm only conceptually familiar with Datomic
GhadiShayban (Fri, 16 Jun 2017 18:43:31 GMT):
take an opaque `long`, reserve some highorder bits and you're done
jsmitchell (Fri, 16 Jun 2017 18:43:33 GMT):
that is weird
jsmitchell (Fri, 16 Jun 2017 18:43:44 GMT):
that we came to the same design
jsmitchell (Fri, 16 Jun 2017 18:43:55 GMT):
i did not look at datomic as a reference
GhadiShayban (Fri, 16 Jun 2017 18:44:33 GMT):
heh, weird. it makes total sense given your constraints: flat address space + desire for loose grouping
jsmitchell (Fri, 16 Jun 2017 18:44:44 GMT):
yeah, i guess it's the natural choice
GhadiShayban (Fri, 16 Jun 2017 18:46:35 GMT):
@pschwarz do you really need deterministic encoding on the cbor maps?
GhadiShayban (Fri, 16 Jun 2017 18:47:03 GMT):
Ostensibly the same library is going to be creating the CBOR blob --
pschwarz (Fri, 16 Jun 2017 18:47:18 GMT):
For values in the global state, yes
pschwarz (Fri, 16 Jun 2017 18:47:33 GMT):
deterministic encodings is a requirement
pschwarz (Fri, 16 Jun 2017 18:47:33 GMT):
Choosing deterministic encodings is a requirement
GhadiShayban (Fri, 16 Jun 2017 18:47:58 GMT):
and the same libraries would be "updating" it (though those could be different than the blob creator)
GhadiShayban (Fri, 16 Jun 2017 18:48:41 GMT):
You'd have to take care using golang because each map has a different hash function seed
GhadiShayban (Fri, 16 Jun 2017 18:49:33 GMT):
I see - but as long as the bytes are always consistent, you might not need "canonical CBOR"
GhadiShayban (Fri, 16 Jun 2017 18:50:16 GMT):
ok i need to re-parse your wording -- Deterministic.
pschwarz (Fri, 16 Jun 2017 18:50:18 GMT):
It's possible that across a network, only a transaction family specification is agreed on, but not the implementation language. In these cases, you'd need to have a very deterministic encoding.
GhadiShayban (Fri, 16 Jun 2017 18:50:33 GMT):
gotcha.
jsmitchell (Fri, 16 Jun 2017 18:50:56 GMT):
that is admittedly a weird case, but we've had it come up in implementations
pschwarz (Fri, 16 Jun 2017 18:50:57 GMT):
We run some tests using the intkey family, but implemented in several languages
pschwarz (Fri, 16 Jun 2017 18:51:24 GMT):
(the transaction processors, I mean)
jsmitchell (Fri, 16 Jun 2017 18:51:29 GMT):
seems like erring on the side of determinism even if you aren't planning on multiple language implementations is the safe bet though
mattalhonte (Fri, 16 Jun 2017 20:29:00 GMT):
Is there source code available for the Demos? Like this one? https://www.hyperledger.org/projects/sawtooth/seafood-case-study
kellyo (Fri, 16 Jun 2017 20:30:57 GMT):
@mattalhonte I don't believe the exact code, but the supply chain transaction processor is very similar
kellyo (Fri, 16 Jun 2017 20:33:58 GMT):
https://github.com/hyperledger/sawtooth-core/tree/master/families
kellyo (Fri, 16 Jun 2017 20:34:11 GMT):
REST API spec is pending merge here
kellyo (Fri, 16 Jun 2017 20:34:15 GMT):
https://github.com/hyperledger/sawtooth-core/pull/635
boydjohnson (Fri, 16 Jun 2017 20:34:26 GMT):
@mattalhonte There is source code for the bond and marketplace demos in the 0.7 branch: https://github.com/hyperledger/sawtooth-core/tree/0-7/extensions All new development is happening with the 0-8 branch where there is a supply chain transaction processor: https://github.com/hyperledger/sawtooth-core/tree/master/families/supplychain
mattalhonte (Fri, 16 Jun 2017 20:37:08 GMT):
Awesome, thanks! :) :) :)
boydjohnson (Fri, 16 Jun 2017 20:46:01 GMT):
Your welcome. :)
boydjohnson (Fri, 16 Jun 2017 20:46:01 GMT):
You're welcome. :)
casualuser (Fri, 16 Jun 2017 20:48:27 GMT):
@boydjohnson can you give me a tip how to preseed data for bond family in 0.7 ?
it keep say like 'Error: Creator was not found : 16Qf3LnuvYLbCpC395aF2iDGV1AMgQkGWo' with ./bin/load_bond_data script
casualuser (Fri, 16 Jun 2017 20:49:48 GMT):
checking sources lead to something like this:
```
try:
store.lookup('participant:key-id', txn.OriginatorID)
```
but it seems it's not the same as in .wif file
casualuser (Fri, 16 Jun 2017 20:49:48 GMT):
checking sources lead to something like this:
```
try:
store.lookup('participant:key-id', txn.OriginatorID)
```
but it seems it's not the same key as in .wif file
boydjohnson (Fri, 16 Jun 2017 20:54:28 GMT):
So does ./bin/load_all not successfully return?
boydjohnson (Fri, 16 Jun 2017 20:54:28 GMT):
So does ./bin/load_bond_data not successfully return?
boydjohnson (Fri, 16 Jun 2017 20:57:02 GMT):
Just guessing, I remember 'btp init' being required before running ./bin/load_bond_data.
casualuser (Fri, 16 Jun 2017 20:59:15 GMT):
tried `btp init` before that
and also `./bin/load_bond_data` conatin `btp init` before loading data from .yaml files
casualuser (Fri, 16 Jun 2017 21:05:47 GMT):
feeling like there is something simple missed in configuration or so
@boydjohnson can you please give me few tips where to look for debugging this?
casualuser (Fri, 16 Jun 2017 21:16:16 GMT):
can anybody explain why ./bin/load_bond_data display a such a messages?
```
[21:13:18 DEBUG client] get content from url
boydjohnson (Fri, 16 Jun 2017 21:18:48 GMT):
@casualuser Do you have the validator logs during loading?
casualuser (Fri, 16 Jun 2017 21:18:53 GMT):
sure
boydjohnson (Fri, 16 Jun 2017 21:19:04 GMT):
What do they say?
casualuser (Fri, 16 Jun 2017 21:22:58 GMT):
https://gist.github.com/casualuser/440a4a8e9201d5e4cab08fef1de3cd42
boydjohnson (Fri, 16 Jun 2017 21:26:31 GMT):
I can't tell from that.
boydjohnson (Fri, 16 Jun 2017 21:27:15 GMT):
To debug this I would grep the logs for WARNING and ERROR messages, even though there are some spurious WARNINGs.
casualuser (Fri, 16 Jun 2017 21:32:34 GMT):
hmm, no any ERROR messages and just two WARNINGS
```
[21:30:22 [MainThread] txnserver.web_pages.root_page WARNING] /Bond/Transaction - NoResource
[21:30:22 [MainThread] txnserver.web_pages.root_page WARNING] ['Bond', 'Transaction'] - 2
```
boydjohnson (Fri, 16 Jun 2017 21:33:14 GMT):
That is strange.
casualuser (Fri, 16 Jun 2017 21:42:49 GMT):
that's really strange
it was build and installed from sources so may be there is some kind of config tweaks required
can you say if there is any other install guides except this one - http://intelledger.github.io/0.7/bond_family_guide.html ?
boydjohnson (Fri, 16 Jun 2017 21:55:21 GMT):
I think that is all there is for bond install documentation.
casualuser (Fri, 16 Jun 2017 22:01:43 GMT):
@boydjohnson thx for tips, will check this on fresh head at the morning
boydjohnson (Fri, 16 Jun 2017 22:02:11 GMT):
You're welcome, @casualuser Good luck.
carbonx1 (Sat, 17 Jun 2017 00:55:22 GMT):
Has joined the channel.
xzib (Sat, 17 Jun 2017 11:02:43 GMT):
Has joined the channel.
bill.cawthra (Sat, 17 Jun 2017 13:29:22 GMT):
Has joined the channel.
MaximeLandon (Sat, 17 Jun 2017 23:31:24 GMT):
Hello Everyone,
MaximeLandon (Sat, 17 Jun 2017 23:34:45 GMT):
I am testing the first example of transaction in Sawtooth Documentation, and I face this problem:
In the input/output lines of the TransactionHeader, I've put
inputs = ['1cf126' + hashlib.sha512('address'.encode('utf-8')).hexdigest()[-64:]]
When compiling for submission, I'm told that at this place, 'undefined name: hashlib'.
Even with vim syntax checker the error is raised, so I don't really know what to do.
Thanks for any help !
jsmitchell (Sat, 17 Jun 2017 23:35:48 GMT):
You will need 'import hashlib' at the top of your python file
jsmitchell (Sat, 17 Jun 2017 23:37:26 GMT):
Also that 'address' value in your example needs to match whatever name you setting in your intkey payload
MaximeLandon (Sat, 17 Jun 2017 23:38:40 GMT):
Exactly I just found that 2 secs ago
MaximeLandon (Sat, 17 Jun 2017 23:38:48 GMT):
anyway thanks very much for help
MaximeLandon (Sat, 17 Jun 2017 23:39:18 GMT):
Ah ok thanks for the match need, I had not understood that
MaximeLandon (Sat, 17 Jun 2017 23:39:35 GMT):
by the way, you might be able to explain something to me:
MaximeLandon (Sat, 17 Jun 2017 23:41:01 GMT):
Actually, what do you mean by 'address' ?
The sole string part ? Or the whole formula ?
jsmitchell (Sat, 17 Jun 2017 23:41:51 GMT):
In sawtooth, data is stored at an address location in a merkle tree
jsmitchell (Sat, 17 Jun 2017 23:42:11 GMT):
The address is 70 hex characters
jsmitchell (Sat, 17 Jun 2017 23:42:49 GMT):
By convention, the first 6 characters are the 'namespace' for the type of data stored there
MaximeLandon (Sat, 17 Jun 2017 23:42:53 GMT):
so what should I put exactly in the name field of the payload ?
jsmitchell (Sat, 17 Jun 2017 23:43:17 GMT):
So, that '1cf...' is the namespace for intkey
MaximeLandon (Sat, 17 Jun 2017 23:43:25 GMT):
sorry for being assisted like that but there a few things I have to understand yet
jsmitchell (Sat, 17 Jun 2017 23:44:10 GMT):
The remaining portion of the address for intkey is defined as the last 64 characters of the hexdigest of a sha512 hash of the name of the intkey variable
jsmitchell (Sat, 17 Jun 2017 23:44:34 GMT):
No problem at all, this stuff is a bit unusual
jsmitchell (Sat, 17 Jun 2017 23:45:31 GMT):
So, when you are creating your payload for an intkey transaction, you might decide you want to set the value "x" to 100.
jsmitchell (Sat, 17 Jun 2017 23:46:10 GMT):
The payload would have name = "x", verb = "set", and value = 100
jsmitchell (Sat, 17 Jun 2017 23:46:48 GMT):
When you create a transaction, you also need to tell the system the input and output addresses that will be read from and written to
jsmitchell (Sat, 17 Jun 2017 23:47:44 GMT):
Because intkey works by trying to read the location of "x" and then writes to the location of "x", you need to specify that address as an input and an output
jsmitchell (Sat, 17 Jun 2017 23:48:49 GMT):
So, in this example, you would need sha512('x'.encode... instead of sha512('address'.encode... in the code you pasted above
MaximeLandon (Sat, 17 Jun 2017 23:49:29 GMT):
ok so:
payload = {
'Verb': 'set',
jsmitchell (Sat, 17 Jun 2017 23:50:05 GMT):
You need a name and value in that payload as well
MaximeLandon (Sat, 17 Jun 2017 23:50:49 GMT):
'Name': ['1cf126' + hashlib.sha512('Address'.encode('utf-8')).hexdigest()[-64:]]
MaximeLandon (Sat, 17 Jun 2017 23:50:57 GMT):
'Value': 100
jsmitchell (Sat, 17 Jun 2017 23:51:32 GMT):
No, the name is the natural variable name in the intkey 'domain'
MaximeLandon (Sat, 17 Jun 2017 23:52:01 GMT):
Well I'm sorry but I do not get it
jsmitchell (Sat, 17 Jun 2017 23:52:04 GMT):
So 'Name': 'maximes_cookies',
MaximeLandon (Sat, 17 Jun 2017 23:52:11 GMT):
okayyyyyyy
MaximeLandon (Sat, 17 Jun 2017 23:52:19 GMT):
that name is just going to be created
MaximeLandon (Sat, 17 Jun 2017 23:52:25 GMT):
when submitting the transaction right ?
jsmitchell (Sat, 17 Jun 2017 23:52:44 GMT):
And then when you calculate an address later, you do sha512("maximes_cookies".encode...
MaximeLandon (Sat, 17 Jun 2017 23:52:52 GMT):
okayyyyyyryy
MaximeLandon (Sat, 17 Jun 2017 23:52:57 GMT):
I get it
jsmitchell (Sat, 17 Jun 2017 23:53:09 GMT):
Do you want to know why it is weird?
jsmitchell (Sat, 17 Jun 2017 23:53:12 GMT):
:)
MaximeLandon (Sat, 17 Jun 2017 23:53:23 GMT):
yes absolutely
MaximeLandon (Sat, 17 Jun 2017 23:53:25 GMT):
:)
jsmitchell (Sat, 17 Jun 2017 23:54:11 GMT):
It is because both the payload and the way addresses are generated in the transaction family are defined by the creator of the transaction family
jsmitchell (Sat, 17 Jun 2017 23:54:25 GMT):
The person who designed intkey chose to do it this way
jsmitchell (Sat, 17 Jun 2017 23:54:43 GMT):
But, you could do it in lots of different ways
jsmitchell (Sat, 17 Jun 2017 23:55:35 GMT):
For example, maybe the unique location (address) of a piece of data in your transaction family is based on the composite key of two fields in your payload
jsmitchell (Sat, 17 Jun 2017 23:56:25 GMT):
What the core system needs to know is where you are going to be reading from and writing to, so that it can enforce some isolation rules for parallel execution
MaximeLandon (Sat, 17 Jun 2017 23:56:28 GMT):
Ok I think I know what is my problem: I don't really see what they mean by transaction family.
I have just understood that it is a broad name for creating different sorts of transactions, but would you have concrete examples ?
jsmitchell (Sat, 17 Jun 2017 23:57:13 GMT):
Think of it as a collection of different transaction types and data schemas that all solve one problem
jsmitchell (Sat, 17 Jun 2017 23:57:39 GMT):
For example, let's say we are trying to store information about songs and songwriters
jsmitchell (Sat, 17 Jun 2017 23:58:11 GMT):
We might need data schemas for personal identity, music compositions, and music recordings
jsmitchell (Sat, 17 Jun 2017 23:58:47 GMT):
Then we might need transaction types like CreateIdentity, CreateComposition, CreateRecording, etc...
MaximeLandon (Sat, 17 Jun 2017 23:59:03 GMT):
ok until there I get it ;)
jsmitchell (Sat, 17 Jun 2017 23:59:18 GMT):
Because these are all related to solving the same problem, we call them a transaction family
MaximeLandon (Sun, 18 Jun 2017 00:00:59 GMT):
Okay so let's say I want to use CreateIdentity, which Identity would be 'Bob Miller', to be put at a 'randomly generated' address, who should we do ?
MaximeLandon (Sun, 18 Jun 2017 00:01:16 GMT):
In other words, what will be the payload ?
jsmitchell (Sun, 18 Jun 2017 00:01:21 GMT):
No randomly generated addresses are allowed
MaximeLandon (Sun, 18 Jun 2017 00:01:47 GMT):
yes pardon I just expressed it in a wrong way
jsmitchell (Sun, 18 Jun 2017 00:01:47 GMT):
This is a blockchain, which means that all calculations must be determinisic
jsmitchell (Sun, 18 Jun 2017 00:02:07 GMT):
So, you would have to decide how you wanted to represent identity
jsmitchell (Sun, 18 Jun 2017 00:02:41 GMT):
Maybe you have a domain specific unique identifier already. Something like this exists in the music space called IPI.
MaximeLandon (Sun, 18 Jun 2017 00:03:48 GMT):
Ok so if you don't mind, let's get back to the intkey family, and this first example:
from what I understood, if I use Verb 'set', I am going to put some value into an address
jsmitchell (Sun, 18 Jun 2017 00:03:50 GMT):
Otherwise, using something like a public key generated by the user might have nice qualities
jsmitchell (Sun, 18 Jun 2017 00:04:41 GMT):
If you went that route, you might have public_key and first_name and last_name in your payload
jsmitchell (Sun, 18 Jun 2017 00:05:43 GMT):
And then the rules of the transaction processor might check that the transaction was signed by the private key that matches that public key so you know the registration came from someone with control of that key
MaximeLandon (Sun, 18 Jun 2017 00:06:05 GMT):
where is the address (by that I mean one place in which the value 100 is goind to be stored) ?
MaximeLandon (Sun, 18 Jun 2017 00:06:51 GMT):
I'm sorry I'm tired at this time so as a result I may be completely dumb
MaximeLandon (Sun, 18 Jun 2017 00:07:22 GMT):
but I just want to understand how to basically create 'a bank account' in which I'm going to put the number 100
jsmitchell (Sun, 18 Jun 2017 00:07:31 GMT):
Yes, on intkey set maximes_cookies 100 results in a set of bytes in the intkey defined storage format being placed at an address in the merkle tree based on the intkey namespace prefix and the last 64 characters of the hexdigest of a sha512 hash of the string "maximes_cookies"
jsmitchell (Sun, 18 Jun 2017 00:08:13 GMT):
If you do the payload and address stuff as described above, your transaction should work
MaximeLandon (Sun, 18 Jun 2017 00:09:27 GMT):
So that mean the payload doesn't need to know the prefix of the maxime_cookies address, because it set by the intkey family
MaximeLandon (Sun, 18 Jun 2017 00:09:36 GMT):
right ?
jsmitchell (Sun, 18 Jun 2017 00:09:56 GMT):
The payload doesn't know _anything_ about addresses
jsmitchell (Sun, 18 Jun 2017 00:10:23 GMT):
All the payload knows is you want to set 100 to the name: "maxime_cookies"
jsmitchell (Sun, 18 Jun 2017 00:10:48 GMT):
The address is _calculated_ using the name
jsmitchell (Sun, 18 Jun 2017 00:10:55 GMT):
Outside of the payload
jsmitchell (Sun, 18 Jun 2017 00:11:18 GMT):
Your client code needs to calculate the address to set the inputs and outputs properly
jsmitchell (Sun, 18 Jun 2017 00:11:41 GMT):
And the transaction processor code calculates the same address by reading the contents of the payload
MaximeLandon (Sun, 18 Jun 2017 00:12:53 GMT):
Okay so maxime_cookies is going to appear both in the name field of the payload and in part of the input/output field
jsmitchell (Sun, 18 Jun 2017 00:13:04 GMT):
Yes
jsmitchell (Sun, 18 Jun 2017 00:13:51 GMT):
And the reason for that is that the designer of intkey decided that addresses are calculated from the unique "name" value of the payload
MaximeLandon (Sun, 18 Jun 2017 00:14:27 GMT):
Ok I got, but it is pretty stupid though,
MaximeLandon (Sun, 18 Jun 2017 00:14:56 GMT):
Now may I ask you might one avoid this 'problem' ?
jsmitchell (Sun, 18 Jun 2017 00:15:25 GMT):
It is not stupid
jsmitchell (Sun, 18 Jun 2017 00:15:35 GMT):
It is very much on purpose
MaximeLandon (Sun, 18 Jun 2017 00:15:51 GMT):
what is the purpose here ?
jsmitchell (Sun, 18 Jun 2017 00:16:28 GMT):
To define an abstraction between the concerns of the core validator and the concerns of the transaction processor
MaximeLandon (Sun, 18 Jun 2017 00:17:08 GMT):
wow I'm not sure to understand that alone :/
jsmitchell (Sun, 18 Jun 2017 00:17:58 GMT):
There is a domain specific representation (the transaction processor) which has ultimate flexibility, and the way the validator stores data which is based on a system of addresses in a radix tree
jsmitchell (Sun, 18 Jun 2017 00:18:19 GMT):
There are situations where those two representations must touch
MaximeLandon (Sun, 18 Jun 2017 00:18:46 GMT):
which kind of situations ?
MaximeLandon (Sun, 18 Jun 2017 00:19:19 GMT):
By the way I need to thank you a thousand times for helping me, sorry for that being hard :/
jsmitchell (Sun, 18 Jun 2017 00:21:17 GMT):
The validator must be able to know where to put things, so it needs to define what an address is. The validator also needs to be able to enforce that a transaction only reads and writes to addresses that it _said_ it was going to read and write to. This is important because it is how we calculate the isolation of portions of the tree for parallel execution.
jsmitchell (Sun, 18 Jun 2017 00:21:56 GMT):
So, we now you know why it's important that the validator sets the ground rules for addressing
jsmitchell (Sun, 18 Jun 2017 00:22:22 GMT):
We also want lots of flexibility in how transaction families store data
jsmitchell (Sun, 18 Jun 2017 00:22:50 GMT):
So, we leave the definition of how to build an address up to the transaction family designer
jsmitchell (Sun, 18 Jun 2017 00:23:31 GMT):
We also leave the definition of the format of data which gets stored at an address location up to the transaction family designer
MaximeLandon (Sun, 18 Jun 2017 00:24:02 GMT):
I am too biased by Bitcoin system, in which an address is just some place where bitcoins are going to be stored, that's why I don't fully understand all these concepts
jsmitchell (Sun, 18 Jun 2017 00:24:31 GMT):
We could implement bitcoin UTXO as a transaction family in sawtooth
jsmitchell (Sun, 18 Jun 2017 00:24:39 GMT):
It is one set of possible rules
jsmitchell (Sun, 18 Jun 2017 00:24:49 GMT):
There are many other possible rules
jsmitchell (Sun, 18 Jun 2017 00:26:55 GMT):
This is a platform for the design and development of those rules
MaximeLandon (Sun, 18 Jun 2017 00:27:02 GMT):
Is there any way to reformulate this whole conversation using a Bitcoin analogy ?
I have a bitcoin wallet interface, and I want to create a new address in which we will store coins (here the value 100)
How can this example be linked to our conversation, and how to implement it?
jsmitchell (Sun, 18 Jun 2017 00:27:41 GMT):
Go back to the intkey example
jsmitchell (Sun, 18 Jun 2017 00:28:08 GMT):
Instead of name: maxime_cookies, do name: wallet address
MaximeLandon (Sun, 18 Jun 2017 00:28:50 GMT):
okayyyyy
jsmitchell (Sun, 18 Jun 2017 00:28:55 GMT):
Note that wallet address is _not the same as_ the address on the sawtooth merkle tree
jsmitchell (Sun, 18 Jun 2017 00:29:06 GMT):
Two different types of address
MaximeLandon (Sun, 18 Jun 2017 00:29:14 GMT):
So do you think doing the 'Transaction Processor Tutorial Python' will help me understand my issues ?
MaximeLandon (Sun, 18 Jun 2017 00:29:49 GMT):
okkayy pleeeeeeaaase explain me how these two types of addresses are different
jsmitchell (Sun, 18 Jun 2017 00:29:59 GMT):
I think you should read all the documentation we have out on http://intelledger.github.io
MaximeLandon (Sun, 18 Jun 2017 00:30:11 GMT):
I think this in an important part of my difficulties
jsmitchell (Sun, 18 Jun 2017 00:30:19 GMT):
I can't explain it more clearly than I already have, unfortunately
MaximeLandon (Sun, 18 Jun 2017 00:30:37 GMT):
well I've read very carefully the Architecture part
MaximeLandon (Sun, 18 Jun 2017 00:30:55 GMT):
Okay any way thanks a lot, I'm going to read it again
MaximeLandon (Sun, 18 Jun 2017 00:31:15 GMT):
Sorry for making it harder than it is
MaximeLandon (Sun, 18 Jun 2017 00:31:18 GMT):
:/
jsmitchell (Sun, 18 Jun 2017 00:31:19 GMT):
Good luck!
jsmitchell (Sun, 18 Jun 2017 00:31:26 GMT):
It is hard because it is hard
MaximeLandon (Sun, 18 Jun 2017 00:31:31 GMT):
thanks :)
jsmitchell (Sun, 18 Jun 2017 00:32:11 GMT):
Not many people actually understand this stuff
MaximeLandon (Sun, 18 Jun 2017 00:33:01 GMT):
well I strongly hope I will leave this category of persons asap
MaximeLandon (Sun, 18 Jun 2017 00:33:24 GMT):
I mean the category of people that don't understand this
jsmitchell (Sun, 18 Jun 2017 00:34:14 GMT):
:thumbsup:
MaximeLandon (Sun, 18 Jun 2017 01:04:42 GMT):
Message Attachments
MaximeLandon (Sun, 18 Jun 2017 01:04:46 GMT):
well actually my transaction is not admitted, here is the output:
MaximeLandon (Sun, 18 Jun 2017 01:04:53 GMT):
just above
MaximeLandon (Sun, 18 Jun 2017 01:05:15 GMT):
seems that the api interaction got wrong
MaximeLandon (Sun, 18 Jun 2017 01:06:03 GMT):
the address I've put in the Submission part is 'http://rest.api.domain/batches' as in the Doc
MaximeLandon (Sun, 18 Jun 2017 01:06:16 GMT):
so I'm not sure
jsmitchell (Sun, 18 Jun 2017 01:07:59 GMT):
That's just an example
jsmitchell (Sun, 18 Jun 2017 01:08:22 GMT):
You will need to be running a copy of the sawtooth rest api
MaximeLandon (Sun, 18 Jun 2017 01:08:25 GMT):
I'm so stupid wtf
MaximeLandon (Sun, 18 Jun 2017 01:08:34 GMT):
yes I'm doing so
MaximeLandon (Sun, 18 Jun 2017 01:09:05 GMT):
so I guess i need to put tcp://rest_api.domain/batches' ?
MaximeLandon (Sun, 18 Jun 2017 01:09:30 GMT):
no that doesn't make sense actually
MaximeLandon (Sun, 18 Jun 2017 01:10:08 GMT):
no ok got it
jsmitchell (Sun, 18 Jun 2017 01:11:19 GMT):
Well I don't know how you have it setup, but probably something like http://localhost:8080/batches
jsmitchell (Sun, 18 Jun 2017 01:11:42 GMT):
Gotta run. Good luck!
MaximeLandon (Sun, 18 Jun 2017 01:11:55 GMT):
my API console is saying "Running on http://127.........:8080
MaximeLandon (Sun, 18 Jun 2017 01:12:02 GMT):
so that is what I put
MaximeLandon (Sun, 18 Jun 2017 01:12:08 GMT):
it passes to it,
MaximeLandon (Sun, 18 Jun 2017 01:12:16 GMT):
but I have a 404 status
MaximeLandon (Sun, 18 Jun 2017 01:12:21 GMT):
and nothing on validator
MaximeLandon (Sun, 18 Jun 2017 01:12:31 GMT):
I'm looking at the status code
MaximeLandon (Sun, 18 Jun 2017 01:14:06 GMT):
well ned to send it to the tp_intkey python right ?
MaximeLandon (Sun, 18 Jun 2017 01:18:07 GMT):
okay got it through I understand my mistake but now I have an invalid signature for a txn
MaximeLandon (Sun, 18 Jun 2017 01:30:35 GMT):
Also solved
MaximeLandon (Sun, 18 Jun 2017 01:53:38 GMT):
Well another issue (night-mare):
MaximeLandon (Sun, 18 Jun 2017 01:53:42 GMT):
Message Attachments
MaximeLandon (Sun, 18 Jun 2017 02:05:13 GMT):
_lol_
MaximeLandon (Sun, 18 Jun 2017 02:07:16 GMT):
I tried with both payload_encoding andAPI request header as application/cbor or application/octet-stream, but at submission validator outputs the same reject
zac (Sun, 18 Jun 2017 02:42:20 GMT):
Would it be possible for you to print to Transaction you are trying to send?
zac (Sun, 18 Jun 2017 02:42:39 GMT):
(Including the TransactionHeader)
MaximeLandon (Sun, 18 Jun 2017 11:35:42 GMT):
yes
MaximeLandon (Sun, 18 Jun 2017 12:09:52 GMT):
Message Attachments
MaximeLandon (Sun, 18 Jun 2017 12:11:00 GMT):
Message Attachments
jsmitchell (Sun, 18 Jun 2017 14:45:49 GMT):
@MaximeLandon it looks like you forgot to issue the command during genesis block creation to add the intkey family
MaximeLandon (Sun, 18 Jun 2017 15:16:22 GMT):
I guess it is this one ? sawtooth config proposal create --key /tmp/sawtooth.priv sawtooth.validator.transaction_families='[{"family": "intkey", "version": "1.0", "encoding": "application/protobuf"}, {"family":"sawtooth_config", "version":"1.0", "encoding":"application/protobuf"}]'
MaximeLandon (Sun, 18 Jun 2017 15:16:41 GMT):
Otherwise I don't see which one you are talking about
jsmitchell (Sun, 18 Jun 2017 15:34:43 GMT):
That is the one
MaximeLandon (Sun, 18 Jun 2017 15:38:45 GMT):
it gives me the same error response
MaximeLandon (Sun, 18 Jun 2017 15:38:45 GMT):
I'm not sure if I need to change the encoding...
MaximeLandon (Sun, 18 Jun 2017 15:41:34 GMT):
Because I gives the the same error response
jsmitchell (Sun, 18 Jun 2017 15:41:40 GMT):
Did you delete the data directory and start over with a new genesis block?
MaximeLandon (Sun, 18 Jun 2017 15:41:45 GMT):
yes
MaximeLandon (Sun, 18 Jun 2017 15:42:04 GMT):
I removed everything in /var/lib/sawtooth
MaximeLandon (Sun, 18 Jun 2017 15:42:12 GMT):
and then launched a new genesis
MaximeLandon (Sun, 18 Jun 2017 15:42:16 GMT):
everything worked well
jsmitchell (Sun, 18 Jun 2017 15:42:30 GMT):
The encoding in the command needs to match the encoding in the transaction processor
MaximeLandon (Sun, 18 Jun 2017 15:42:54 GMT):
which is the encoding specified in the transaction file right ?
jsmitchell (Sun, 18 Jun 2017 15:43:35 GMT):
The encoding in the transaction processor is application/cbor
MaximeLandon (Sun, 18 Jun 2017 15:43:50 GMT):
yesss it's goood
jsmitchell (Sun, 18 Jun 2017 15:43:50 GMT):
Where did you get application/protobuf for intkey?
MaximeLandon (Sun, 18 Jun 2017 15:44:21 GMT):
It passed through, in my transaction file I have 'application/cbor in the TransactionHeader
MaximeLandon (Sun, 18 Jun 2017 15:44:31 GMT):
so I put the same in my config proposal command
MaximeLandon (Sun, 18 Jun 2017 15:44:35 GMT):
at it passed through
jsmitchell (Sun, 18 Jun 2017 15:44:40 GMT):
Yes, good
jsmitchell (Sun, 18 Jun 2017 15:44:57 GMT):
Where did the faulty config proposal command come from? Our docs?
MaximeLandon (Sun, 18 Jun 2017 15:45:08 GMT):
Yes I guess so
jsmitchell (Sun, 18 Jun 2017 15:45:16 GMT):
Ugh
jsmitchell (Sun, 18 Jun 2017 15:45:37 GMT):
@toddojala ^^
MaximeLandon (Sun, 18 Jun 2017 15:45:44 GMT):
the line :
sawtooth config proposal create --key /tmp/sawtooth.priv sawtooth.validator.transaction_families='[{"family": "intkey", "version": "1.0", "encoding": "application/protobuf"}, {"family":"sawtooth_config", "version":"1.0", "encoding":"application/protobuf"}]'
in the Step Three: Create And Submit Batch
MaximeLandon (Sun, 18 Jun 2017 15:45:57 GMT):
However, I have a new question :)
jsmitchell (Sun, 18 Jun 2017 15:46:04 GMT):
I apologize for that
MaximeLandon (Sun, 18 Jun 2017 15:46:20 GMT):
No don't worry I bothered you with my questions yesterday night
jsmitchell (Sun, 18 Jun 2017 15:46:59 GMT):
@MaximeLandon are you French?
MaximeLandon (Sun, 18 Jun 2017 15:47:06 GMT):
When I do sawtooth bock list, there isn't a new block following this transaction submission
MaximeLandon (Sun, 18 Jun 2017 15:47:07 GMT):
yes
jsmitchell (Sun, 18 Jun 2017 15:47:21 GMT):
What is some good current French music I should listen to?
MaximeLandon (Sun, 18 Jun 2017 15:47:28 GMT):
ahahaha
MaximeLandon (Sun, 18 Jun 2017 15:47:33 GMT):
what style do you like
jsmitchell (Sun, 18 Jun 2017 15:47:43 GMT):
Everything, basically
MaximeLandon (Sun, 18 Jun 2017 15:48:40 GMT):
Well I have never been a huge listener of french music actually, but let me think about it and I will give some titles that worth listening !
MaximeLandon (Sun, 18 Jun 2017 15:49:04 GMT):
I won't want to throw shitty songs without thinking a bit :)
jsmitchell (Sun, 18 Jun 2017 15:49:23 GMT):
I don't know why you aren't seeing a block. What do the validator logs say?
MaximeLandon (Sun, 18 Jun 2017 15:51:42 GMT):
well it is weird
MaximeLandon (Sun, 18 Jun 2017 15:51:50 GMT):
let me look at it a second
MaximeLandon (Sun, 18 Jun 2017 15:54:36 GMT):
Message Attachments
jsmitchell (Sun, 18 Jun 2017 15:55:03 GMT):
That looks perfect
MaximeLandon (Sun, 18 Jun 2017 15:55:57 GMT):
yes indeed
MaximeLandon (Sun, 18 Jun 2017 15:56:20 GMT):
that is why I don't understand why there isn't a new block in the block list
jsmitchell (Sun, 18 Jun 2017 15:56:46 GMT):
What is the output of block list?
MaximeLandon (Sun, 18 Jun 2017 15:57:18 GMT):
Message Attachments
MaximeLandon (Sun, 18 Jun 2017 15:59:01 GMT):
here is also the output of the last block
MaximeLandon (Sun, 18 Jun 2017 15:59:47 GMT):
Message Attachments
jsmitchell (Sun, 18 Jun 2017 16:00:54 GMT):
Looks like it's there to me...
MaximeLandon (Sun, 18 Jun 2017 16:01:39 GMT):
Ok then I would have a question: Can I compare the payload_sha512 of the above output with the one I wrote in my Transaction file ?
jsmitchell (Sun, 18 Jun 2017 16:02:05 GMT):
If you want to see state, you need to look at state
MaximeLandon (Sun, 18 Jun 2017 16:02:14 GMT):
actually I'm gonna try another transaction at a new address, to check that
jsmitchell (Sun, 18 Jun 2017 16:02:19 GMT):
sawtooth state show or somesuch
MaximeLandon (Sun, 18 Jun 2017 16:02:51 GMT):
OKKKAAYYY GOT IT
MaximeLandon (Sun, 18 Jun 2017 16:03:08 GMT):
Message Attachments
MaximeLandon (Sun, 18 Jun 2017 16:04:08 GMT):
well now heading to a table tennis session, I'm back in about an hour, thanks for your help and I'm going to think of your French songs :)
jsmitchell (Sun, 18 Jun 2017 16:04:17 GMT):
👍🏻
MaximeLandon (Sun, 18 Jun 2017 19:14:52 GMT):
@jsmitchell "La Groupie du Pianiste" from Michel Berger
MaximeLandon (Sun, 18 Jun 2017 19:15:04 GMT):
let's start by that and see where you tastes lead us
zac (Mon, 19 Jun 2017 04:01:41 GMT):
Looks like both the ubuntu and docker app developer guides reference `{"family": "intkey", "version": "1.0", "encoding": "application/protobuf"}`
zac (Mon, 19 Jun 2017 04:01:41 GMT):
@toddojala Looks like both the ubuntu and docker app developer guides reference `{"family": "intkey", "version": "1.0", "encoding": "application/protobuf"}`
LoubnaBaroudi (Mon, 19 Jun 2017 12:26:16 GMT):
Hello everyone! Does somebody here know the role of the main.py program in the processor?
boydjohnson (Mon, 19 Jun 2017 12:28:30 GMT):
Hi @LoubnaBaroudi it is just the entrypoint into the program where argparse is and logging is setup.
LoubnaBaroudi (Mon, 19 Jun 2017 12:32:51 GMT):
Ok Thank you!
LoubnaBaroudi (Mon, 19 Jun 2017 14:00:17 GMT):
Has anyone of you already created his own transaction family but not a game?
kelly_ (Mon, 19 Jun 2017 14:01:53 GMT):
@LoubnaBaroudi here is a TF for supply chain management - https://github.com/hyperledger/sawtooth-core/tree/master/families/supplychain
kelly_ (Mon, 19 Jun 2017 14:02:21 GMT):
there is also a TF which enables you to deploy EVM bytecode
zac (Mon, 19 Jun 2017 14:03:10 GMT):
Also IntKey is not-a-game
zac (Mon, 19 Jun 2017 14:03:26 GMT):
What is the functionality you are hoping to see demonstrated?
LoubnaBaroudi (Mon, 19 Jun 2017 14:04:17 GMT):
Yes I'm currently inspiring myself with the intkey family
LoubnaBaroudi (Mon, 19 Jun 2017 14:04:44 GMT):
I want to be able to set and "sell" to another peer an object
LoubnaBaroudi (Mon, 19 Jun 2017 14:05:26 GMT):
but I'm getting confused with all the functions..
LoubnaBaroudi (Mon, 19 Jun 2017 14:08:47 GMT):
Thank you @kelly_ I think it will help me
GhadiShayban (Mon, 19 Jun 2017 14:44:27 GMT):
http://cs-www.cs.yale.edu/homes/dna/papers/rethink-mvcc.pdf
This is a nice paper that should serve as some inspiration for Sawtooth's inter- and even intra-transaction concurrency. Sawtooth ticks all the boxes for being compatible with it (one machine, txes have to declare read-sets/write-sets)
benoit.razet (Mon, 19 Jun 2017 15:28:10 GMT):
Is there a documentation for intkey explaining how to play with it or the code is the documentation?
toddojala (Mon, 19 Jun 2017 15:29:06 GMT):
@benoit.razet This might help to start: http://intelledger.github.io/transaction_family_specifications/integerkey_transaction_family.html
toddojala (Mon, 19 Jun 2017 15:29:35 GMT):
@benoit.razet Then look at the entire App Deve Guide: http://intelledger.github.io/app_developers_guide.html
benoit.razet (Mon, 19 Jun 2017 15:30:22 GMT):
Thanks!
GhadiShayban (Mon, 19 Jun 2017 16:16:23 GMT):
@adamludvik @rbuysse
some metrics we'd like to have:
block progress
number of transaction aborts
peer count + peers
tx rate by family
tx latency by family
merkle tree "size"
We use Prometheus.io internally here, have had great success with it, and it has significant advantages compared to UDP-based ("push") metrics like statsd. Also it's conceptually really simple. Stuff like kubernetes bakes it in. Is there a JIRA we can comment on somewhere?
kellyo (Mon, 19 Jun 2017 19:21:50 GMT):
@TomBarnes ^
amundson (Mon, 19 Jun 2017 20:37:59 GMT):
@GhadiShayban https://jira.hyperledger.org/browse/STL-446
LoubnaBaroudi (Tue, 20 Jun 2017 12:58:02 GMT):
Hello everyone! Can somebody explain to me the role of the MessageFactory please?
pschwarz (Tue, 20 Jun 2017 14:19:38 GMT):
@LoubnaBaroudi The MessageFactory is for generating ZMQ messages for tests. They help create the various protobuf messages with a transaction family's specific encoded payloads. Unfortunately, one of the initial tests had its MessageFactory in the production side of code, and others copied this pattern. We're slowly working on moving those out of production code and into the test code.
LoubnaBaroudi (Tue, 20 Jun 2017 14:22:12 GMT):
Ok so It creates the protobuf message that the test_tp will get and test, right?
boydjohnson (Tue, 20 Jun 2017 14:32:32 GMT):
Yeah, the protobuf message that is sent to the transaction processor under test.
LoubnaBaroudi (Tue, 20 Jun 2017 14:37:36 GMT):
Ok thank you!
jsmitchell (Tue, 20 Jun 2017 16:31:54 GMT):
@MaximeLandon I like that Michel Berger jam. I like a lot of old Serge Gainsbourg, too.
mfford (Tue, 20 Jun 2017 18:57:16 GMT):
The next Hyperledger Sawtooth Team Technical Forum is on Thursday, June 22nd from 10-11am CDT. We invite Hyperledger community members interested in Hyperledger Sawtooth to join us!
Agenda:
1. Introductions-Mark Ford
2. PoET & Sawtooth Lake-Jamie Jason
3. Open Forum
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
MaximeLandon (Tue, 20 Jun 2017 21:11:20 GMT):
@jsmitchell glad to hear it ! Well I'm not a great fan of Gainsbourg's music, but I hate the man more :/
jsmitchell (Tue, 20 Jun 2017 21:34:26 GMT):
oh, i don't know anything about the guy himself, just the nice beats
MaximeLandon (Tue, 20 Jun 2017 23:38:07 GMT):
well he was much more angry with others than his songs may tell
MaximeLandon (Tue, 20 Jun 2017 23:40:00 GMT):
By the way @jsmitchell I now have a couple files for testing a new transaction family:
- The processorhandler.py
- The processormain.py
- The MessageFactory.py (specific to my new txn fam)
- and accessorily a test_tp_newtxnFam.py
jsmitchell (Tue, 20 Jun 2017 23:40:33 GMT):
Sounds cool
MaximeLandon (Tue, 20 Jun 2017 23:40:33 GMT):
But how am I supposed to make a binary of them ? and which one ?
jsmitchell (Tue, 20 Jun 2017 23:41:02 GMT):
A binary? It's python
MaximeLandon (Tue, 20 Jun 2017 23:41:05 GMT):
well I lack the client part
MaximeLandon (Tue, 20 Jun 2017 23:41:09 GMT):
actually
MaximeLandon (Tue, 20 Jun 2017 23:41:26 GMT):
well yes but then why is there a binary in /usr/bin/ ?
jsmitchell (Tue, 20 Jun 2017 23:42:04 GMT):
Oh, you can package up stuff for install
MaximeLandon (Tue, 20 Jun 2017 23:42:54 GMT):
Oh then may you tell me how to proceed, or lead me toward the relevant doc :)
MaximeLandon (Tue, 20 Jun 2017 23:43:11 GMT):
Is it the two files in the packaging section ?
MaximeLandon (Tue, 20 Jun 2017 23:43:36 GMT):
I guess I need to adapt them slightly according to my TxnFam specs
jsmitchell (Tue, 20 Jun 2017 23:44:38 GMT):
Check out the intkey example setup.py https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/intkey_python/setup.py
MaximeLandon (Tue, 20 Jun 2017 23:45:06 GMT):
thanks a lot !
MaximeLandon (Tue, 20 Jun 2017 23:46:48 GMT):
I guess the only change I have to make on these files is the TxnFam variable name ? and the endpoint ?
jsmitchell (Tue, 20 Jun 2017 23:51:44 GMT):
Probably quite a lot. I don't have much python packaging expertise.
MaximeLandon (Tue, 20 Jun 2017 23:55:09 GMT):
Ok well let's dig again
rbuysse (Wed, 21 Jun 2017 01:30:34 GMT):
I'm going to reboot jenkins quick
LoubnaBaroudi (Wed, 21 Jun 2017 09:38:38 GMT):
Again I'm trying to understand the role of each function in the intkey transaction family. I don't understand why there is a create_batch.py, a populate.py and a generate.py. Can someone help me please?
boydjohnson (Wed, 21 Jun 2017 13:03:13 GMT):
Ah, @LoubnaBaroudi Those are only in the client for the intkey transaction family. Where intkey gets its logic is in https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/intkey_python/sawtooth_intkey/processor/handler.py. To explain the client, populate.py creates only set transactions, while generate.py only creates 'inc' and 'dec' transactions. These rely on each other. While, create_batch.py creates first 'set' transactions and then for each associated 'inc' and 'dec' transaction creates a dependency on the associated 'set' transaction.
zac (Wed, 21 Jun 2017 13:22:50 GMT):
create_batch creates does both ('set' transactions, and then 'inc'/'dec' transactions)
LoubnaBaroudi (Wed, 21 Jun 2017 13:31:51 GMT):
Why do we need populate and generate if create_batch does both ?
boydjohnson (Wed, 21 Jun 2017 13:36:21 GMT):
They are possibly not needed. They can be used to create invalid transactions, which is useful for manual testing.
zac (Wed, 21 Jun 2017 13:39:40 GMT):
Yeah, they were developed as they were needed for testing IntKey clients
zac (Wed, 21 Jun 2017 13:39:52 GMT):
You shouldn't read too much into their significance
LoubnaBaroudi (Wed, 21 Jun 2017 13:44:31 GMT):
I'm actually building my own family transaction wich should have the same function as Intkey but with other caracteristics so I wanted to know if I had to build populate and generate
LoubnaBaroudi (Wed, 21 Jun 2017 13:44:45 GMT):
transaction family*
boydjohnson (Wed, 21 Jun 2017 13:50:22 GMT):
Cool, @LoubnaBaroudi
LoubnaBaroudi (Wed, 21 Jun 2017 13:53:12 GMT):
Besides, do you know how I can use a parameter in one transaction family to trigger a transaction in another transaction family?
pschwarz (Wed, 21 Jun 2017 13:57:29 GMT):
Hmm, you could possibly submit a new transaction, but you might run into some issues with signing the subsequent transaction
LoubnaBaroudi (Wed, 21 Jun 2017 13:59:43 GMT):
I want to set a value and use it in another transaction family. When the value reach a specific threshold, I want to launch a transaction
pschwarz (Wed, 21 Jun 2017 14:00:41 GMT):
That's a bit more complex
pschwarz (Wed, 21 Jun 2017 14:01:02 GMT):
But still doable, via a couple of avenues
pschwarz (Wed, 21 Jun 2017 14:01:17 GMT):
The first being my first suggestion
pschwarz (Wed, 21 Jun 2017 14:01:17 GMT):
The first being my previous suggestion
pschwarz (Wed, 21 Jun 2017 14:02:22 GMT):
The second way using a State Delta Subscription. You can listen for state changes by address prefix, and either store the values or act on particular changes
pschwarz (Wed, 21 Jun 2017 14:02:56 GMT):
Unfortunately, we don't have a canonical example of how to use that, yet but we're working on it
pschwarz (Wed, 21 Jun 2017 14:03:34 GMT):
Non-canon: https://github.com/peterschwarz/state-export-prototype
pschwarz (Wed, 21 Jun 2017 14:04:53 GMT):
By the submitting a new transaction suggestion, you could submit the transaction from the `apply` method in your transaction handler
LoubnaBaroudi (Wed, 21 Jun 2017 14:08:01 GMT):
Ok I will try to look at it and give you feedbacks asap
pschwarz (Wed, 21 Jun 2017 14:21:52 GMT):
Take your time, it's a pretty involved example :)
boydjohnson (Wed, 21 Jun 2017 14:52:39 GMT):
Message Attachments
boydjohnson (Wed, 21 Jun 2017 14:52:39 GMT):
Message Attachments
jsmitchell (Wed, 21 Jun 2017 14:59:22 GMT):
@boydjohnson looks like validator-0_1 gets stuck on block 219cb4e0
jsmitchell (Wed, 21 Jun 2017 15:00:13 GMT):
it is about 8 seconds behind the other two receiving the block, and the forking activity around 04:05:54 looks a bit odd to me.
jsmitchell (Wed, 21 Jun 2017 15:00:24 GMT):
@cianx should take a peek at it
boydjohnson (Wed, 21 Jun 2017 15:06:12 GMT):
@jsmitchell I got pulled away. validator-0_1 has a serial scheduler, and it looked to me that it started validating a block and then never completed.
jsmitchell (Wed, 21 Jun 2017 15:06:29 GMT):
@boydjohnson which block?
jsmitchell (Wed, 21 Jun 2017 15:06:51 GMT):
7e8...
boydjohnson (Wed, 21 Jun 2017 15:08:24 GMT):
Yeah, validator-0_1 | [04:05:54.065 INFO chain] Starting block validation of : 7e8a41e6(6, S:d799cb77, P:219cb4e0) and then not "on_block_validated".
jsmitchell (Wed, 21 Jun 2017 15:08:25 GMT):
this looks similar to that issue that jamie and ryan were seeing
boydjohnson (Wed, 21 Jun 2017 15:08:37 GMT):
Yeah, that came to mind.
jsmitchell (Wed, 21 Jun 2017 15:09:09 GMT):
do you have jamie's logging changes?
cianx (Wed, 21 Jun 2017 15:09:18 GMT):
What is the network configuration?
jsmitchell (Wed, 21 Jun 2017 15:09:40 GMT):
i was talking with him yesterday, and it sounds like something under _verify_block_batches is hanging
boydjohnson (Wed, 21 Jun 2017 15:09:49 GMT):
@cianx just a second
jsmitchell (Wed, 21 Jun 2017 15:10:26 GMT):
I doubt it's network related. It has the block, it just never comes back from validating it
jsmitchell (Wed, 21 Jun 2017 15:10:48 GMT):
and that validator is silent for the next minute until the block list occurs at the end of the test
jsmitchell (Wed, 21 Jun 2017 15:11:29 GMT):
@boydjohnson is this from a local run? how frequently is it happening?
boydjohnson (Wed, 21 Jun 2017 15:11:32 GMT):
validator-0 doesn't have any --peers listed, validator-1 has validator-0 as a peer, and validator-2 has validator-1 and validator-0 as peers.
boydjohnson (Wed, 21 Jun 2017 15:11:39 GMT):
16th run of a local test.
jsmitchell (Wed, 21 Jun 2017 15:12:24 GMT):
i think we need substantially better debug logging on all the stuff underneath verify block batches
boydjohnson (Wed, 21 Jun 2017 15:12:39 GMT):
Yeah
jsmitchell (Wed, 21 Jun 2017 15:12:46 GMT):
remember that issue that I tracked down before in the executor with the waiter threads?
jsmitchell (Wed, 21 Jun 2017 15:12:52 GMT):
this seems very similar to that
cianx (Wed, 21 Jun 2017 15:17:16 GMT):
There is not enough in these logs to diagnose the issue. I'll start some runs on my workstation with debug logging and some insturmentation in the BlockValidator.
jsmitchell (Wed, 21 Jun 2017 15:17:33 GMT):
@cianx jamie has already gone deep down this path with additional logging
cianx (Wed, 21 Jun 2017 15:17:45 GMT):
branch?
jsmitchell (Wed, 21 Jun 2017 15:17:47 GMT):
he has a branch with like 50 additional logging statements in the executor and scheduler
jsmitchell (Wed, 21 Jun 2017 15:17:51 GMT):
I don't have it
jsmitchell (Wed, 21 Jun 2017 15:18:10 GMT):
he says its something under verify block batches
jsmitchell (Wed, 21 Jun 2017 15:18:27 GMT):
the problem is it's only infrequently reproducable locally
jsmitchell (Wed, 21 Jun 2017 15:18:37 GMT):
paging @jjason
jsmitchell (Wed, 21 Jun 2017 15:19:00 GMT):
apparently it breaks on aws with regularity, which is baffling to me
cianx (Wed, 21 Jun 2017 15:20:15 GMT):
odds are if the scheduler is not returning it it `scheduler.complete(block=True)` in that function. Which is where we had the problem before.
boydjohnson (Wed, 21 Jun 2017 15:20:51 GMT):
https://github.com/boydjohnson/sawtooth-core/tree/parallel-poet This was the branch that I had it happen on. Running 'count=0; while ./bin/run_docker_test ...../test-poet-smoke.yaml; do (( count++ )); done; echo $count'.
jsmitchell (Wed, 21 Jun 2017 15:21:22 GMT):
that doesn't have jamie's logging commits though...
boydjohnson (Wed, 21 Jun 2017 15:21:29 GMT):
No.
jsmitchell (Wed, 21 Jun 2017 15:24:49 GMT):
I find it amusing that the parallel scheduler is working and the serial scheduler is broken
boydjohnson (Wed, 21 Jun 2017 15:25:00 GMT):
Let's make the switch now!
jsmitchell (Wed, 21 Jun 2017 15:25:36 GMT):
@boydjohnson this self._condition.wait_for(lambda: self._complete) seems pretty brittle
jsmitchell (Wed, 21 Jun 2017 15:25:48 GMT):
given the scenario under which self._complete is set to True
boydjohnson (Wed, 21 Jun 2017 15:26:23 GMT):
Yeah, because the condition needs to be acquired for it to be set to True?
jsmitchell (Wed, 21 Jun 2017 15:27:35 GMT):
well, that, and also that something might go wrong which keeps self._final == False or is_last_batch == False
jsmitchell (Wed, 21 Jun 2017 15:28:49 GMT):
it will just block forever if something in batch execution hangs
boydjohnson (Wed, 21 Jun 2017 15:29:59 GMT):
Yeah, We could put a timeout on it, that if it doesn't become complete after some amount of time, it comes back with a status other than valid.
jsmitchell (Wed, 21 Jun 2017 15:30:13 GMT):
right, and then the journal could retry it
jsmitchell (Wed, 21 Jun 2017 15:31:10 GMT):
but, we need to figure out root cause
boydjohnson (Wed, 21 Jun 2017 15:32:04 GMT):
Yeah, I worry that root cause is the complicated logic in set_transaction_execution_result being broken somehow.
jsmitchell (Wed, 21 Jun 2017 15:32:50 GMT):
yay, it's @jjason !
jjason (Wed, 21 Jun 2017 15:33:09 GMT):
One of the things I wondered about was the use of a single condition variable in the serial scheduler for multiple different "events".
jsmitchell (Wed, 21 Jun 2017 15:33:30 GMT):
@jjason we need a branch with your logging commits
jjason (Wed, 21 Jun 2017 15:33:36 GMT):
But, I haven't dug in far enough to convince myself that it all works okay.
jsmitchell (Wed, 21 Jun 2017 15:33:37 GMT):
so that boyd can pick cherries
jjason (Wed, 21 Jun 2017 15:33:50 GMT):
Let me get it checked in.
jjason (Wed, 21 Jun 2017 15:43:52 GMT):
Here is branch: https://github.com/jjason/sawtooth-core/tree/InvestigateAWSProblem
boydjohnson (Wed, 21 Jun 2017 15:48:58 GMT):
Thanks @jjason I will have info in about an hour...
jjason (Wed, 21 Jun 2017 15:51:39 GMT):
Okay.
jjason (Wed, 21 Jun 2017 15:52:57 GMT):
I tried to sprinkle some logging messages in `serial.py` and it always halted on first call to `complete()`. I don't know if i screwed something up, or it was a timing issue, or what the heck happened.
jjason (Wed, 21 Jun 2017 15:53:19 GMT):
So, I removed those logging messages. On my system, with the logging messages in the branch, it passes PoET smoke test every time.
boydjohnson (Wed, 21 Jun 2017 16:30:25 GMT):
So with some logging statement in, it always halted, but then with more it always passes?
cianx (Wed, 21 Jun 2017 17:43:50 GMT):
sounds like a timing issue.
amundson (Wed, 21 Jun 2017 18:15:06 GMT):
or locking, I think, the logging library uses a lock internally
amundson (Wed, 21 Jun 2017 18:15:06 GMT):
or threading, I think, the logging library uses a lock internally
amundson (Wed, 21 Jun 2017 18:17:14 GMT):
is the scheduler being used from multiple threads?
boydjohnson (Wed, 21 Jun 2017 18:24:23 GMT):
Yes, and in different situations, differing number of threads.
ecapriolo (Wed, 21 Jun 2017 18:38:50 GMT):
Has joined the channel.
ecapriolo (Wed, 21 Jun 2017 18:40:07 GMT):
Hello all. Just getting into blockchain/hyperledger. Lots of interesting things to learn (and code) I was if someone could point me to the source code of "https://bond.sawtooth.me/#/welcome"
pschwarz (Wed, 21 Jun 2017 18:41:41 GMT):
That example is against the previous version, which is not compatible with the current (0.8) version. But, if you'd like to look at the source, you'll find it here: https://github.com/hyperledger/sawtooth-core/tree/0-7/extensions/bond
ecapriolo (Wed, 21 Jun 2017 18:43:07 GMT):
@pschwarz Thank you. Also thanks for pointing out that it is out of date. I can not commit yet, but is the bond application something you would like to update and keep in the source tree or should it be a separate project?
pschwarz (Wed, 21 Jun 2017 18:45:32 GMT):
I think there's debate about whether something like that should or shouldn't be in the project. It probably can stand on its own. That being said, if it's something you'd like to port to 0.8, that would be awesome
pschwarz (Wed, 21 Jun 2017 19:09:34 GMT):
@cianx: Wish I could figure out how I got it into this state:
```
[19:07:46.282 CRITICAL publisher] on_check_publish_block exception.
[19:07:46.282 ERROR publisher] None is not in list
Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 505, in on_check_publish_block
last_batch_index = self._pending_batches.index(last_batch)
ValueError: None is not in list
```
pschwarz (Wed, 21 Jun 2017 19:09:34 GMT):
@cianx: Wish I could figure out how I got it into this state:
```
[19:07:46.282 CRITICAL publisher] on_check_publish_block exception. │[19:07:36.574 DEBUG handler] Incrementing "abaciscus" by 4
[19:07:46.282 ERROR publisher] None is not in list │[19:07:36.575 WARNING core] Invalid Transaction Verb is "inc" but name "abaciscus" not in state
Traceback (most recent call last): │[19:07:36.580 DEBUG core] received message of type: TP_PROCESS_REQUEST
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 505, in on_check_publish_block │[19:07:36.584 DEBUG handler] Decrementing "abask" by 6
last_batch_index = self._pending_batches.index(last_batch) │[19:07:36.585 WARNING core] Invalid Transaction Verb is "dec" but name "abask" not in state
ValueError: None is not in list
```
pschwarz (Wed, 21 Jun 2017 19:09:34 GMT):
@cianx: Wish I could figure out how I got it into this state:
```
ValueError: None is not in list
[19:07:46.282 CRITICAL publisher] on_check_publish_block exception.
[19:07:46.282 ERROR publisher] None is not in list
Traceback (most recent call last):
File "/project/sawtooth-core/validator/sawtooth_validator/journal/publisher.py", line 505, in on_check_publish_block
last_batch_index = self._pending_batches.index(last_batch)
ValueError: None is not in list
```
mfford (Wed, 21 Jun 2017 19:17:26 GMT):
Reminder that the next Hyperledger Sawtooth Team Technical Forum is tomorrow, Thursday, June 22nd from 10-11am CDT. We invite Hyperledger community members interested in Hyperledger Sawtooth to join us!
Agenda:
1. Introductions-Mark Ford
2. PoET & Sawtooth Lake-Jamie Jason
3. Open Forum
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
cianx (Wed, 21 Jun 2017 20:45:47 GMT):
@pschwarz I see what happened. I will send you a pr this afternoon.
jjason (Wed, 21 Jun 2017 20:48:39 GMT):
@boydjohnson With logging in `scheduler.py` it halted. When I took logging out of `schedule.py` things were happy - at least on my local system. On AWS, even without logging in `scheduler.py`, some validators halted when calling `complete()`
boydjohnson (Wed, 21 Jun 2017 20:50:43 GMT):
I've been running a modified poet-smoke on the parallel scheduler branch with the logging in. I wish there was a more deterministic way to get failure.
jsmitchell (Wed, 21 Jun 2017 20:51:12 GMT):
#debuglife
boydjohnson (Wed, 21 Jun 2017 20:51:28 GMT):
That was a Pixar movie, right?
jsmitchell (Wed, 21 Jun 2017 20:51:41 GMT):
that was Debugs Life
jjason (Wed, 21 Jun 2017 20:52:08 GMT):
@boydjohnson That's why you have to love threading bugs....
toddmvc (Wed, 21 Jun 2017 22:25:48 GMT):
Has joined the channel.
MaximeLandon (Wed, 21 Jun 2017 22:47:35 GMT):
Message Attachments
MaximeLandon (Wed, 21 Jun 2017 22:48:46 GMT):
Message Attachments
MaximeLandon (Wed, 21 Jun 2017 22:50:03 GMT):
Hello everyone, I would like to ask what are the roles of these two functions in the file create_batch.py in the intkey_python/sawtooth_intkey/client_cli/ directory ?
MaximeLandon (Wed, 21 Jun 2017 22:52:09 GMT):
More precisely, I don't understand why we need both of them
jsmitchell (Wed, 21 Jun 2017 22:53:11 GMT):
the intkey client grew up over time
jsmitchell (Wed, 21 Jun 2017 22:53:35 GMT):
do_populate creates a bunch of 'set' transactions
jsmitchell (Wed, 21 Jun 2017 22:54:52 GMT):
do_generate creates a bunch of 'inc' and 'dec' transactions on those 'set' names
MaximeLandon (Wed, 21 Jun 2017 22:55:07 GMT):
thanks @jsmitchell for your always fast answers,
jsmitchell (Wed, 21 Jun 2017 22:55:09 GMT):
i usually just use `intkey workload` :)
MaximeLandon (Wed, 21 Jun 2017 22:55:55 GMT):
Okay so that means one of these functions cannot live without the other, given you can only inc/dec in an address that is already set
MaximeLandon (Wed, 21 Jun 2017 22:56:12 GMT):
Ok I'm going to take a look at the intkey workload
MaximeLandon (Wed, 21 Jun 2017 22:58:40 GMT):
And a last question @jsmitchell : Of these files in the client_cli directory, which files do work together ? I guess we don't need them all, so what would be the most convenient ?
jsmitchell (Wed, 21 Jun 2017 22:59:11 GMT):
look at the noop example
jsmitchell (Wed, 21 Jun 2017 22:59:20 GMT):
all it does is workload
jsmitchell (Wed, 21 Jun 2017 22:59:25 GMT):
and it is stripped down
MaximeLandon (Wed, 21 Jun 2017 22:59:38 GMT):
okayy thanks I will look at this
jsmitchell (Wed, 21 Jun 2017 22:59:52 GMT):
https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples/noop_python/sawtooth_noop/client_cli
MaximeLandon (Wed, 21 Jun 2017 23:00:47 GMT):
yes there is actually no separate file populate.py and generate.py in this directory
MaximeLandon (Wed, 21 Jun 2017 23:01:08 GMT):
I guess they have been 'merged' into the others ?
MaximeLandon (Wed, 21 Jun 2017 23:05:43 GMT):
Actually these functions populate and generate are no longer in the noop client_cli files, why is that ? I don't get it
jjason (Wed, 21 Jun 2017 23:06:01 GMT):
It is not common knowledge, but @jsmitchell is actually a smart bot.
jsmitchell (Wed, 21 Jun 2017 23:06:09 GMT):
they are not necessary for workload generation...
jjason (Wed, 21 Jun 2017 23:06:14 GMT):
He never sleeps.
jsmitchell (Wed, 21 Jun 2017 23:06:18 GMT):
the client can be whatever you want...
MaximeLandon (Wed, 21 Jun 2017 23:06:19 GMT):
ahahah
jsmitchell (Wed, 21 Jun 2017 23:06:28 GMT):
@jjason not that smart
MaximeLandon (Wed, 21 Jun 2017 23:06:36 GMT):
@jjason he is my angel
MaximeLandon (Wed, 21 Jun 2017 23:06:41 GMT):
my so patient angel
jjason (Wed, 21 Jun 2017 23:06:42 GMT):
You mean @jjason == Not that smart
jsmitchell (Wed, 21 Jun 2017 23:07:38 GMT):
ridiculous
jsmitchell (Wed, 21 Jun 2017 23:07:49 GMT):
i would never dream of saying something like that
jsmitchell (Wed, 21 Jun 2017 23:07:54 GMT):
to your face
jjason (Wed, 21 Jun 2017 23:07:57 GMT):
Nah....just think it ;)
jsmitchell (Wed, 21 Jun 2017 23:08:31 GMT):
@MaximeLandon @jjason is one of our best developers
jsmitchell (Wed, 21 Jun 2017 23:09:02 GMT):
everyone else struggles to measure up
jjason (Wed, 21 Jun 2017 23:10:27 GMT):
Okay....now I am going to get an ego.
jsmitchell (Wed, 21 Jun 2017 23:10:38 GMT):
it's pronounced eggo
jjason (Wed, 21 Jun 2017 23:10:50 GMT):
And never confuse randomly typing at the keyboard with being a good developer. Even monkeys get lucky sometimes.
jjason (Wed, 21 Jun 2017 23:11:09 GMT):
Speaking of eggo....patiently waiting for season 2.
jsmitchell (Wed, 21 Jun 2017 23:11:15 GMT):
yeaaaaahh
jsmitchell (Wed, 21 Jun 2017 23:11:24 GMT):
halloweentime, right?
jjason (Wed, 21 Jun 2017 23:12:11 GMT):
Yessirree Bob!!!!
jjason (Wed, 21 Jun 2017 23:12:22 GMT):
No trick or treating for me.
jsmitchell (Wed, 21 Jun 2017 23:12:42 GMT):
I'm going to binge the heck out of that
jsmitchell (Wed, 21 Jun 2017 23:12:57 GMT):
@jjason have you watched "Master of None" on netflix?
jjason (Wed, 21 Jun 2017 23:13:05 GMT):
Yes. Love it.
jsmitchell (Wed, 21 Jun 2017 23:13:17 GMT):
:thumbsup:
jjason (Wed, 21 Jun 2017 23:13:20 GMT):
I really liked Aziz Ansari on Parks & Req.
jjason (Wed, 21 Jun 2017 23:13:22 GMT):
Rec.
jjason (Wed, 21 Jun 2017 23:13:53 GMT):
Somehow we need to bring this conversation back to Sawtooth before @Dan catches us ;)
jsmitchell (Wed, 21 Jun 2017 23:13:59 GMT):
Parks and Req. is about a Business Analyst named John Parks.
jjason (Wed, 21 Jun 2017 23:14:04 GMT):
Otherwise, he'll want to talk about Stranger Things.
MaximeLandon (Wed, 21 Jun 2017 23:15:47 GMT):
My lords: (just to be sure) that means I can set up my TxnFam with the client_cli model of noop example ?
jsmitchell (Wed, 21 Jun 2017 23:16:09 GMT):
@MaximeLandon what do you want your client cli to do?
MaximeLandon (Wed, 21 Jun 2017 23:17:19 GMT):
I want my client to create and/or sell green certificates (in case you're not familiar, a mere piece of paper proving the green origin of electricity)
MaximeLandon (Wed, 21 Jun 2017 23:18:56 GMT):
So I have a couple elements in the payload, but the only two actions that can be performed are 'set' or 'sell' (I replaced 'Verb' by 'Action' -rewriting all underlying functions of course-)
jsmitchell (Wed, 21 Jun 2017 23:20:09 GMT):
so, think about the functions you want it to do. you might want `green list` `green show
MaximeLandon (Wed, 21 Jun 2017 23:23:41 GMT):
Okay so I guess these functions are going to be written in the main.py file
MaximeLandon (Wed, 21 Jun 2017 23:25:42 GMT):
And once again sorry for all these misunderstandings, but the good news is that the client_cli is the last black hole for me (at least for this intkey example)
MaximeLandon (Wed, 21 Jun 2017 23:26:52 GMT):
So if I may ask for a VERY VERY BRIEF list of the files in the client_cli directory, and of their role, I WILL DEFINITELY NOT BOTHER YOU ANYMORE FOR 2 WEEKS
MaximeLandon (Wed, 21 Jun 2017 23:26:54 GMT):
;)
jsmitchell (Wed, 21 Jun 2017 23:27:46 GMT):
Well, I already left work :)
jsmitchell (Wed, 21 Jun 2017 23:27:58 GMT):
Maybe @jjason could help you
jsmitchell (Wed, 21 Jun 2017 23:28:04 GMT):
_runs_
MaximeLandon (Wed, 21 Jun 2017 23:28:11 GMT):
ahahahahahahahahaahahah
MaximeLandon (Wed, 21 Jun 2017 23:28:49 GMT):
anyway thanks @jsmitchell for your patience and kindnes
jsmitchell (Wed, 21 Jun 2017 23:29:15 GMT):
Of course!
jjason (Wed, 21 Jun 2017 23:29:22 GMT):
@MaximeLandon I will try to best of my ability to answer your questions. I am not super familiar with the code, but I will look. @jsmitchell is the bomb.
MaximeLandon (Wed, 21 Jun 2017 23:30:00 GMT):
ahahahahah thanks a lot @jjason I appreciate :)
jjason (Wed, 21 Jun 2017 23:34:27 GMT):
Are you talking about this directory: `/sdk/examples/noop_python/sawtooth_noop/client_cli`?
MaximeLandon (Wed, 21 Jun 2017 23:34:34 GMT):
yes
jjason (Wed, 21 Jun 2017 23:34:42 GMT):
Okay. Let me go take a look.
MaximeLandon (Wed, 21 Jun 2017 23:35:08 GMT):
or alternatively, and maybe better the /sdk/examples/intkey_python/sawtooth_intkey/client_cli
MaximeLandon (Wed, 21 Jun 2017 23:35:15 GMT):
thanks a lot
jjason (Wed, 21 Jun 2017 23:35:41 GMT):
Okay....I'll look at that.
mattalhonte (Wed, 21 Jun 2017 23:51:08 GMT):
Trying to install on Ubuntu with Docker. Not sure why it's failing
```docker-compose -f sawtooth-default.yaml up
Creating network "sawtoothapp_default" with the default driver
Pulling tp_settings (hyperledger/sawtooth-tp_settings:latest)...
ERROR: manifest for hyperledger/sawtooth-tp_settings:latest not found```
jsmitchell (Wed, 21 Jun 2017 23:56:54 GMT):
@MaximeLandon you need to call your client 'certsverts'
jjason (Wed, 21 Jun 2017 23:58:19 GMT):
@MaximeLandon
`main.py` - main entry point. Sets up command-line parsers and based upon command, invokes the correct function.
`create_batch.py` - implements `intkey create_batch ...` command, which appears to do `populate` followed by `generate` to the same output file
`exceptions.py` - defines any exceptions for intkey CLI
`generate.py` - implements `intkey generate ...` command, which creates a file with `--count` batches, each containing a random number of transactions (between 0 a `--pool-size`), which are randomly chosen to be `inc` or `dec`
`load.py` - implements `inteky load ...` command, which takes an input file generated by `create_batch`, `generate`, or `populate` and submits the batchs to a validator
`populate.py` - implements `intkey populate ...` command, which creates a file with one batch of `--pool-size` transactions that `set` an intkey value
`workload.py` - implements `intkey workload ....` command, which generates a sythetic workload composed of `set` and `inc` transactions, submitting at some predetermined rate until stopped (presumably with `Ctrl-C`)
jjason (Wed, 21 Jun 2017 23:58:19 GMT):
@MaximeLandon
`main.py` - main entry point. Sets up command-line parsers and based upon command, invokes the correct function.
`create_batch.py` - implements `intkey create_batch ...` command, which appears to do `populate` followed by `generate` to the same output file
`exceptions.py` - defines any exceptions for intkey CLI
`generate.py` - implements `intkey generate ...` command, which creates a file with `--count` batches, each containing a random number of transactions (between 0 a `--pool-size`), which are randomly chosen to be `inc` or `dec`
`load.py` - implements `intkey load ...` command, which takes an input file generated by `create_batch`, `generate`, or `populate` and submits the batchs to a validator
`populate.py` - implements `intkey populate ...` command, which creates a file with one batch of `--pool-size` transactions that `set` an intkey value
`workload.py` - implements `intkey workload ....` command, which generates a sythetic workload composed of `set` and `inc` transactions, submitting at some predetermined rate until stopped (presumably with `Ctrl-C`)
jjason (Thu, 22 Jun 2017 00:00:48 GMT):
I hope that is what you were asking for....and helpful.
MaximeLandon (Thu, 22 Jun 2017 00:22:42 GMT):
That-is-wonderful
MaximeLandon (Thu, 22 Jun 2017 00:22:47 GMT):
Thanks a lot
MaximeLandon (Thu, 22 Jun 2017 00:23:52 GMT):
I've read the files too at the same time, and it appears that I had read them but way to fast. Still being a large amateur at CS, I'm going too fast...
MaximeLandon (Thu, 22 Jun 2017 00:25:54 GMT):
ahahah @jsmitchell just read your message :D
MaximeLandon (Thu, 22 Jun 2017 00:28:07 GMT):
actually green certificates are a pretty authoritary way of directing capital allocation toward renewables. These certificates take some value merely because people must give them back in order to avoid fines. So people buy these certificates, although they have NO VALUE but to be the only mean to pay "your taxes".
MaximeLandon (Thu, 22 Jun 2017 00:29:33 GMT):
The dollar and any single currency in the world today works actually the same: they have value because the State only accepts these bills for tax payment, which automatically gives to these bills a value: you need them if you don't want to go to jail, guilty of tax evasion.
MaximeLandon (Thu, 22 Jun 2017 00:38:47 GMT):
And tomorrow I ask for a few more precisions if possible:
In main.py , I am not sure of which command to run for output of worload --rate, etc...
ecapriolo (Thu, 22 Jun 2017 00:44:13 GMT):
On a high level what is the overlap between https://github.com/hyperledger/fabric-api and sawtooth. It seems they both provide an API
jsmitchell (Thu, 22 Jun 2017 00:45:09 GMT):
@ecapriolo there is no overlap. They are completely separate projects.
ecapriolo (Thu, 22 Jun 2017 00:48:16 GMT):
I am a little less clear about fabric api. There exists a fabric-java-sdk and the fabrick-api is a java project that also provides and api. Trying to understand when to use one vs the other.
jsmitchell (Thu, 22 Jun 2017 00:49:01 GMT):
@ecapriolo maybe try in #fabric - this channel is for the sawtooth project
ecapriolo (Thu, 22 Jun 2017 00:49:15 GMT):
TX :)
MaximeLandon (Thu, 22 Jun 2017 00:51:25 GMT):
@jsmitchell if I say that most of the main.py functions are automatically used when submitting an intkey transaction, am I right ?
jsmitchell (Thu, 22 Jun 2017 00:56:32 GMT):
I'm not near a terminal @MaximeLandon
jsmitchell (Thu, 22 Jun 2017 00:56:42 GMT):
Doesn't sound right though
MaximeLandon (Thu, 22 Jun 2017 00:57:13 GMT):
oh ok i'm sorry I had forgot...
MaximeLandon (Thu, 22 Jun 2017 00:57:23 GMT):
Okay but then let's see that tomorrow
MaximeLandon (Thu, 22 Jun 2017 00:57:28 GMT):
have a good evening
jjason (Thu, 22 Jun 2017 01:21:05 GMT):
@MaximeLandon Roughly, yes.
jjason (Thu, 22 Jun 2017 01:26:04 GMT):
@MaximeLandon `main.py` basically (1) sets up the main or parent command-line argument parser and then let's each sub-command (`load`, `populate`, etc.) set up its command-specific sub-parser, (2) hands of the command-line arguments to the parent parser, (3) sets up any logging, and then (4) based on the intkey sub-command lets the appropriate sub-command take over and do its thing. While you don't have to structure your code this way, it is a clean way to break up things.
jjason (Thu, 22 Jun 2017 01:26:04 GMT):
@MaximeLandon `main.py` basically (1) sets up the main or parent command-line argument parser and then let's each sub-command (`load`, `populate`, etc.) set up its command-specific sub-parser, (2) hands off the command-line arguments to the parent parser, (3) sets up any logging, and then (4) based on the intkey sub-command lets the appropriate sub-command take over and do its thing. While you don't have to structure your code this way, it is a clean way to break up things.
jjason (Thu, 22 Jun 2017 01:27:42 GMT):
Anyone with Rocket.Chat iOS app having problems launching the app??? I launch the app and I get the Rocket.Chat equivalent of the spinner....forever. It was working as of a few days ago....now I know why I was not getting notifications on my phone when someone directed a message at me.
jjason (Thu, 22 Jun 2017 01:39:31 GMT):
Well...crud...the iOS app is now telling me that HL is running an out of date version of server.....
jjason (Thu, 22 Jun 2017 01:41:43 GMT):
Deleting and re-installing seemed to fix it....Sigh.
zac (Thu, 22 Jun 2017 02:11:51 GMT):
@ecapriolo The answer to your question is always use Sawtooth because Sawtooth is the best :wink:
zac (Thu, 22 Jun 2017 02:12:25 GMT):
Seriously though, I know very little about Fabric, or how it works in comparison to Sawtooth
zac (Thu, 22 Jun 2017 02:13:03 GMT):
But you might bug @JonathanLevi. He's built a couple of things with both Hyperledger projects.
zac (Thu, 22 Jun 2017 02:13:24 GMT):
And Ethereum and some other toolsets too I think.
mimineko (Thu, 22 Jun 2017 05:41:52 GMT):
Has joined the channel.
LoubnaBaroudi (Thu, 22 Jun 2017 09:21:07 GMT):
I have created my own transaction family and I want to run it now manually through the command line. But I have no idea how I can "install" my files, run my transaction processor etc
MaximeLandon (Thu, 22 Jun 2017 13:30:24 GMT):
many thanks @jjason for the answer on main.py. A last question, if you don't mind: Once all my files are written and ready (client_cli files, processor files, tests, packaging files), how am I supposed to deploy this ? It also seems I need a binary for my TxnFam in /usr/bin, just like tp_intkey_python. Do I need to create it by my own, or is this automatically generated ?
THANKS THANKS anyway for all your help !
jsmitchell (Thu, 22 Jun 2017 14:48:03 GMT):
@MaximeLandon that is dictated by the setup.py file
jsmitchell (Thu, 22 Jun 2017 14:49:07 GMT):
@LoubnaBaroudi look at the `bin/intkey` file in the repo
jjason (Thu, 22 Jun 2017 14:49:10 GMT):
@MaximeLandon If you want to simply tests locally, you can set up your Python path (`PYTHONPATH` environment variable) to include the path to where you `.py` files live. if you were going to distribute to others, you would end up creating a Python package for it (look at example for `setup.py` file for how it is done). @ryanbeck and @adamludvik know more about the packaging sutff than I do.
If you look the `intkey` "binary", you'll notice it simply manually sets the Python path for the packages/modules it needs and then invokes the `main` function in `main.py`
jjason (Thu, 22 Jun 2017 14:49:10 GMT):
@MaximeLandon If you want to simply test locally, you can set up your Python path (`PYTHONPATH` environment variable) to include the path to where you `.py` files live. if you were going to distribute to others, you would end up creating a Python package for it (look at example for `setup.py` file for how it is done). @ryanbeck and @adamludvik know more about the packaging sutff than I do.
If you look the `intkey` "binary", you'll notice it simply manually sets the Python path for the packages/modules it needs and then invokes the `main` function in `main.py`
ryanbeck (Thu, 22 Jun 2017 14:49:10 GMT):
Has joined the channel.
jjason (Thu, 22 Jun 2017 14:49:27 GMT):
That file is not automatically generated.
jjason (Thu, 22 Jun 2017 14:52:26 GMT):
@LoubnaBaroudi Take a look at the intkey transaction processor in `sawtooth-core/sdk/examples/inkey_python` for an example of how you can package up your transaction processor. If you look in `sawtooth-core/bin` you'll also see the `tp_intkey_python`, which is used to launch this transaction processor.
LoubnaBaroudi (Thu, 22 Jun 2017 14:53:05 GMT):
I have all of these files and I have redirected my path to where they are
jsmitchell (Thu, 22 Jun 2017 14:53:10 GMT):
yeah, what @jjason said
jsmitchell (Thu, 22 Jun 2017 14:54:36 GMT):
@LoubnaBaroudi in the sawtooth architecture, transaction processors are separate processes that talk to the validator process over a network connection. We usually run them on the same machine and they talk over localhost:4004 by default.
jsmitchell (Thu, 22 Jun 2017 14:54:53 GMT):
So, if you follow the intkey example, one of the steps starts up tp_intkey_python
jsmitchell (Thu, 22 Jun 2017 14:55:08 GMT):
and you see log messages on the validator showing that transaction processor connecting
jsmitchell (Thu, 22 Jun 2017 14:55:17 GMT):
you will want to do the same thing with your transaction processor
LoubnaBaroudi (Thu, 22 Jun 2017 14:56:20 GMT):
How can I create the command for my transaction family?
LoubnaBaroudi (Thu, 22 Jun 2017 14:56:33 GMT):
I know what I need but I don't know how to run it
jsmitchell (Thu, 22 Jun 2017 14:56:47 GMT):
do you mean a command line client to submit and show data associated with your transaction family?
jsmitchell (Thu, 22 Jun 2017 14:57:11 GMT):
or the transaction processor?
jsmitchell (Thu, 22 Jun 2017 14:57:22 GMT):
these are two separate things
LoubnaBaroudi (Thu, 22 Jun 2017 14:57:43 GMT):
I want a transaction processor so I can submit my transactions
toddojala (Thu, 22 Jun 2017 14:58:18 GMT):
@LoubnaBaroudi The XO transaction family is a good example of a family that has a transaction processor, as well as a CLI that allows you to use this transaction family as it was designed to be used (play tic-tac-toe).
toddojala (Thu, 22 Jun 2017 14:58:53 GMT):
@LoubnaBaroudi You can submit transactions using the "sawtooth submit" command, once your transaction processor has connected to the validator and registered...
LoubnaBaroudi (Thu, 22 Jun 2017 15:00:13 GMT):
I've looked at these examples carefully and still don't see when the command tp_xo_python are created to connect to the host and be able to exchange with the validator
jsmitchell (Thu, 22 Jun 2017 15:00:51 GMT):
`bin/tp_xo_python`
jsmitchell (Thu, 22 Jun 2017 15:01:20 GMT):
it imports sawtooth_xo.processor.main and then runs main()
LoubnaBaroudi (Thu, 22 Jun 2017 15:01:42 GMT):
ok so I just write a similar program and run it in my terminal?
jsmitchell (Thu, 22 Jun 2017 15:01:47 GMT):
yep
jsmitchell (Thu, 22 Jun 2017 15:02:44 GMT):
if you look at `sawtooth-core/sdk/examples/xo_python/sawtooth_xo/processor/main.py`, you will see the main() method and the parser setup with the default values for endpoint to connect to and so forth.
LoubnaBaroudi (Thu, 22 Jun 2017 15:04:25 GMT):
yeah I've seen it, the missing part was the file in bin
MaximeLandon (Thu, 22 Jun 2017 15:40:10 GMT):
@jsmitchell @jjason thanks for your help, that was the missing part !
jsmitchell (Thu, 22 Jun 2017 15:40:33 GMT):
supercool
LoubnaBaroudi (Thu, 22 Jun 2017 15:46:15 GMT):
it works ;)
jsmitchell (Thu, 22 Jun 2017 15:48:39 GMT):
supersweet
boydjohnson (Thu, 22 Jun 2017 17:39:00 GMT):
FWIW, I have some logs from a failure of test_poet_smoke.yaml but I set the number of workers in the FutureCollection threadpool to 1. I had wondered if this threadpool was getting exhausted and if this would trigger failure sooner. I'll post some logs shortly.
boydjohnson (Thu, 22 Jun 2017 17:40:22 GMT):
Message Attachments
boydjohnson (Thu, 22 Jun 2017 17:41:59 GMT):
Message Attachments
boydjohnson (Thu, 22 Jun 2017 17:44:47 GMT):
This was the branch that I was repeatedly running test_poet_smoke.yaml on: https://github.com/boydjohnson/sawtooth-core/tree/logging.heisenbug.
jsmitchell (Thu, 22 Jun 2017 17:57:01 GMT):
What's with that 5ee... transaction three times in a row?
boydjohnson (Thu, 22 Jun 2017 18:01:10 GMT):
Gaa, that is weird. Three times next_transaction returns it. 2 times that I see the txn_result is set.
fz (Thu, 22 Jun 2017 18:04:38 GMT):
hi everyone...Is there a recording of today's tech presentation?
boydjohnson (Thu, 22 Jun 2017 18:04:45 GMT):
Although, block publishing and validation appear to be happening at the same time here, so 2 makes sense, 3 does not.
boydjohnson (Thu, 22 Jun 2017 18:05:31 GMT):
Hi @fz I think there is. @mfford Do you know the link for the Tech forum presentation today?
mfford (Thu, 22 Jun 2017 18:06:26 GMT):
@tkuhrt will likely make it available shortly
tkuhrt (Thu, 22 Jun 2017 18:07:04 GMT):
Working on the upload as we speak
tkuhrt (Thu, 22 Jun 2017 18:07:21 GMT):
I will send out a link as soon as that finishes
jaketarnow (Thu, 22 Jun 2017 18:07:34 GMT):
Has joined the channel.
fz (Thu, 22 Jun 2017 18:07:40 GMT):
Thanks @tkuhrt @mfford @boydjohnson !
tkuhrt (Thu, 22 Jun 2017 18:24:06 GMT):
All meeting recordings for Sawtooth can be found here: https://drive.google.com/open?id=0B_NJV6eJXAA1VnFUakRzaG1raXc
tkuhrt (Thu, 22 Jun 2017 18:24:06 GMT):
All meeting recordings for Sawtooth going forward can be found here: https://drive.google.com/open?id=0B_NJV6eJXAA1VnFUakRzaG1raXc
tkuhrt (Thu, 22 Jun 2017 18:24:38 GMT):
Link directly to today's Tech Forum recording here: https://drive.google.com/open?id=0B_NJV6eJXAA1TGdfMjJlT0Qtb0U
boydjohnson (Thu, 22 Jun 2017 18:28:17 GMT):
Message Attachments
boydjohnson (Thu, 22 Jun 2017 18:30:36 GMT):
I would expect each txn signature to show up an even number of times less than or equal to 4. 5ee434f6 shows up 5 times, as we discussed, @jsmitchell . Several others, such as 74f910ad, show up 6 times.
fz (Thu, 22 Jun 2017 18:36:37 GMT):
@tkuhrt thanks again!
jjason (Thu, 22 Jun 2017 22:47:34 GMT):
Is there any utility in moving `sawtooth-core/validator/sawtooth_validator/config` (or at least the path part of it) out into its own package? I have come across a couple of instances where it would be nice to get, for example, the sawtooth config directory from a module that is not part of the `sawtooth_validator` package.
jjason (Thu, 22 Jun 2017 22:48:00 GMT):
And I don't want to make the package dependent upon `sawtooth_validator` as it really only needs the path config.
jjason (Thu, 22 Jun 2017 22:49:14 GMT):
And then as a follow-on, if that is acceptable, I would also advocate scrubbing all of the code to make sure that all of it uses the config path module.
jjason (Thu, 22 Jun 2017 22:50:02 GMT):
@pschwarz @boydjohnson @jsmitchell @amundson @Dan @cianx ^^^^^^^^^^^^^
jjason (Thu, 22 Jun 2017 22:50:02 GMT):
@pschwarz @boydjohnson @jsmitchell @amundson @Dan @cianx ^^^^^^^^^^^^^6
liangxueping2015 (Thu, 22 Jun 2017 23:45:03 GMT):
Has joined the channel.
amundson (Fri, 23 Jun 2017 00:59:09 GMT):
@jjason which module?
jjason (Fri, 23 Jun 2017 01:03:17 GMT):
Which module uses path config?
amundson (Fri, 23 Jun 2017 01:04:45 GMT):
yes
jjason (Fri, 23 Jun 2017 01:05:41 GMT):
It would be nice to use the existing path config stuff from IAS proxy to load its TOML config file.
jjason (Fri, 23 Jun 2017 01:06:29 GMT):
I can repeat the code in config/path.py but would rather leverage existing code.
amundson (Fri, 23 Jun 2017 01:07:46 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/python/sawtooth_sdk/client/config.py
amundson (Fri, 23 Jun 2017 01:07:56 GMT):
is relying on the SDK better?
amundson (Fri, 23 Jun 2017 01:07:56 GMT):
is depending on the SDK better?
amundson (Fri, 23 Jun 2017 01:08:49 GMT):
what I mean is, having a dependency between the ias proxy and python sdk
jjason (Fri, 23 Jun 2017 01:12:04 GMT):
I would be willing to consider finding config directory as part is an SDK. I could see that as potentially being useful to TPs. I would have to think about it more though.
amundson (Fri, 23 Jun 2017 01:12:37 GMT):
well, it's already there is my point
amundson (Fri, 23 Jun 2017 01:25:04 GMT):
if we went down the path of creating a sawtooth config package, I think that it should solve this problem in a language agnostic way (something like pkg-config). that's not less code necessarily, since you have to deal with process execution and parsing the output, but it would at least centralize the calculation of the config information in a way that everything could use it
jjason (Fri, 23 Jun 2017 01:31:07 GMT):
Let me look tomorrow. I didn't bring laptop home.
VarunDeshpande (Fri, 23 Jun 2017 08:23:36 GMT):
Has joined the channel.
VarunDeshpande (Fri, 23 Jun 2017 08:24:20 GMT):
Hello, I am new to Sawtooth. Just one small question, can we implement smart contracts on sawtooth because in documentation I could not find anything substantial :)
pschwarz (Fri, 23 Jun 2017 13:29:45 GMT):
@VarunDeshpande Generally, Sawtooth abstracts out the concept of how transactions are applied. They can either be well-defined blocks of code that read transaction payloads and apply, all the way up to Turing-complete smart-contract engines and much in between. Fundamentally, though they need to change global state in a deterministic way.
As far as examples and implemented families, you can find examples of the well-defined variety in the intkey and XO transaction families, or, for smart contracts, we have a transaction family which utilizes the Burrow EVM.
boydjohnson (Fri, 23 Jun 2017 14:05:55 GMT):
@VarunDeshpande Check out these docs for the Burrow EVM Transaction Family: http://intelledger.github.io/0.8/transaction_family_specifications/sawtooth_burrow_evm_family.html
LoubnaBaroudi (Fri, 23 Jun 2017 14:15:13 GMT):
How to remove all the remaining threads of the validator when we want to shut it down
zac (Fri, 23 Jun 2017 14:15:29 GMT):
^C^C^C^C^C^C^C^C^C^C
LoubnaBaroudi (Fri, 23 Jun 2017 14:16:06 GMT):
If I do that, when I launch my validator again, it stops and an error appears
zac (Fri, 23 Jun 2017 14:16:15 GMT):
Oh?
zac (Fri, 23 Jun 2017 14:16:20 GMT):
Address in use?
jsmitchell (Fri, 23 Jun 2017 14:17:28 GMT):
You need to kill the other processes as well.
LoubnaBaroudi (Fri, 23 Jun 2017 14:18:02 GMT):
I did
LoubnaBaroudi (Fri, 23 Jun 2017 14:18:23 GMT):
I get the following message : Cannot have a gesis_batch_file and an existing chain
LoubnaBaroudi (Fri, 23 Jun 2017 14:18:23 GMT):
I get the following message : Cannot have a genesis_batch_file and an existing chain
agunde (Fri, 23 Jun 2017 14:18:24 GMT):
What version of sawtooth are you running?
LoubnaBaroudi (Fri, 23 Jun 2017 14:18:33 GMT):
the last
LoubnaBaroudi (Fri, 23 Jun 2017 14:18:36 GMT):
0.8
agunde (Fri, 23 Jun 2017 14:19:43 GMT):
O you need to remove the data directory if you are trying to start from scratch.
agunde (Fri, 23 Jun 2017 14:20:10 GMT):
AKA with a new genesis block
LoubnaBaroudi (Fri, 23 Jun 2017 14:20:12 GMT):
with rm /var/lib/sawtooth/*?
agunde (Fri, 23 Jun 2017 14:21:14 GMT):
I think so.
LoubnaBaroudi (Fri, 23 Jun 2017 14:23:04 GMT):
no I get the same error
LoubnaBaroudi (Fri, 23 Jun 2017 14:23:10 GMT):
it's an ERROR CLI
LoubnaBaroudi (Fri, 23 Jun 2017 14:23:10 GMT):
it's an ERROR cli
LoubnaBaroudi (Fri, 23 Jun 2017 14:23:52 GMT):
I even tried to remove sawtooth and install it again but it seems to have remaining threads
boydjohnson (Fri, 23 Jun 2017 14:24:23 GMT):
@LoubnaBaroudi Are you installing from debs?
LoubnaBaroudi (Fri, 23 Jun 2017 14:25:07 GMT):
yes
zac (Fri, 23 Jun 2017 14:26:38 GMT):
It's not in `~/sawtooth/` is it?
zac (Fri, 23 Jun 2017 14:26:53 GMT):
The data, I mean
boydjohnson (Fri, 23 Jun 2017 14:27:13 GMT):
You could `ls` and see data files in the directory before removing it.
LoubnaBaroudi (Fri, 23 Jun 2017 14:28:38 GMT):
I have 8 files in /var/lib/sawtooth
agunde (Fri, 23 Jun 2017 14:29:42 GMT):
What are they?
LoubnaBaroudi (Fri, 23 Jun 2017 14:31:39 GMT):
block-00.lmdb // block-00.lmdb-lock // block-chain-id // genesis.batch // merkle-00.lmdb // merkle-00.lmdb-lock // state-deltas-00.lmdb // state-deltas-00.lmdb-lock
agunde (Fri, 23 Jun 2017 14:32:14 GMT):
And when remove them you still get the same "Cannot have a genesis_batch_file ..." error?
LoubnaBaroudi (Fri, 23 Jun 2017 14:32:31 GMT):
yes :/
toddojala (Fri, 23 Jun 2017 14:33:48 GMT):
@LoubnaBaroudi The genesis batch file might be in a different directory. Could you search for it with .. something like "find / -name genesis.batch" (not sure if that's the actual filename)
toddojala (Fri, 23 Jun 2017 14:34:10 GMT):
@LoubnaBaroudi I'll get you the right filename to search for in a bit..
LoubnaBaroudi (Fri, 23 Jun 2017 14:34:30 GMT):
I have a config-genesis.batch in my home directory
toddojala (Fri, 23 Jun 2017 14:35:40 GMT):
aha. Please delete that and try again, as well as deleted the already mentioned data files.
LoubnaBaroudi (Fri, 23 Jun 2017 14:35:57 GMT):
already tried it ^^
toddojala (Fri, 23 Jun 2017 14:36:06 GMT):
Hmm....
LoubnaBaroudi (Fri, 23 Jun 2017 14:38:06 GMT):
[16:36:30.152 INFO core] remaining threads: Thread-1 (_ContextReader), InterconnectThread-5 (Thread), Thread-2 (_ContextWriter)
[16:36:33.158 INFO core] remaining threads: Thread-1 (_ContextReader)
[16:36:33.159 INFO core] All threads have been stopped and joined
LoubnaBaroudi (Fri, 23 Jun 2017 14:38:30 GMT):
and above that
LoubnaBaroudi (Fri, 23 Jun 2017 14:38:37 GMT):
[16:36:29.745 ERROR cli] Cannot have a genesis_batch_file and an existing chain
[16:36:29.746 DEBUG dispatch] Attempted to remove send_message function for connection ServerThread, but no send_message function was registered
[16:36:29.746 DEBUG dispatch] Removed send_message function for connection ServerThread
agunde (Fri, 23 Jun 2017 14:39:10 GMT):
what does it say above that?
pschwarz (Fri, 23 Jun 2017 14:39:21 GMT):
`config-genesis.batch` is not the problem
pschwarz (Fri, 23 Jun 2017 14:39:51 GMT):
Are you running `sawtooth admin genesis` before starting your validator every time?
LoubnaBaroudi (Fri, 23 Jun 2017 14:40:23 GMT):
I tried both
pschwarz (Fri, 23 Jun 2017 14:41:34 GMT):
You should only need to do that once. It will compose a `genesis.batch` and put it in the `data` directory. On first run, with no chain, the validator will consume the file and produce the genesis block out of its contents
pschwarz (Fri, 23 Jun 2017 14:41:34 GMT):
You should only need to do that once. It will compose a `genesis.batch` and put it in the data (in your case, `/var/lib/sawtooth`) directory. On first run, with no chain, the validator will consume the file and produce the genesis block out of its contents
pschwarz (Fri, 23 Jun 2017 14:42:50 GMT):
If you run it again for a validator that has an existing chain, it will consider that an invalid state, as the presence of the file `genesis.batch` indicates to the validator that you want to create a genesis block, but one already exists
pschwarz (Fri, 23 Jun 2017 14:43:15 GMT):
Where are you running the validator? Docker? Ubuntu?
LoubnaBaroudi (Fri, 23 Jun 2017 14:43:21 GMT):
Ubuntu
LoubnaBaroudi (Fri, 23 Jun 2017 14:44:56 GMT):
Ok it might be the mistake
LoubnaBaroudi (Fri, 23 Jun 2017 14:45:26 GMT):
I think it is
pschwarz (Fri, 23 Jun 2017 14:46:09 GMT):
If it happens again, just delete `/var/lib/sawtooth/genesis.batch`
LoubnaBaroudi (Fri, 23 Jun 2017 14:46:55 GMT):
OK thank you!!
jjason (Fri, 23 Jun 2017 14:47:11 GMT):
@amundson I didn't notice the `config.py` in the SDK - I guess not a surprise as I don't find myself in that part of the code very often. Having IAS proxy dependent upon the SDK is okay....kind of....it doesn't feel _right_, although much preferable to IAS proxy being dependent upon `sawtooth_validator` package.
dplumb (Fri, 23 Jun 2017 15:40:41 GMT):
Has joined the channel.
dataharvest (Fri, 23 Jun 2017 16:35:48 GMT):
Has joined the channel.
amundson (Fri, 23 Jun 2017 18:36:52 GMT):
@jjason yeah, it's not great. but having a package just for the relatively simple path calculations isn't great either. a separate pkg-config-like tool might be better/good, but more complex.
amundson (Fri, 23 Jun 2017 18:39:27 GMT):
(not great for IAS stuff, but pretty good actually for stuff already using the sdk)
sven09543 (Fri, 23 Jun 2017 19:25:34 GMT):
Has joined the channel.
sven09543 (Fri, 23 Jun 2017 19:26:09 GMT):
Hi all! I am in the process of building a blockchain using Hyperledger. I would like to create a mobile and desktop wallet to interface with Sawtooth. Do you have any recommendations for creating this wallet? Current considerations are using the Qt License/C++, Javascript, and Classic iOS/Android Development. Desktop wallets are for Windows and OSX.
sven09543 (Fri, 23 Jun 2017 19:27:33 GMT):
Also, can I just use the REST API from HyperLedger to build a light wallet client, or do I need an extra component running on a server that interacts with HyperLedger?
jjason (Fri, 23 Jun 2017 19:45:25 GMT):
@amundson Agree. It might be nice in future to have something like that or a sawtooth-utils package.
kelly_ (Fri, 23 Jun 2017 19:48:04 GMT):
@pschwarz may have some client advice for you @sven09543
kelly_ (Fri, 23 Jun 2017 19:48:44 GMT):
a mobile framework for interacting with sawtooth would be a great contribution
liangxueping2015 (Fri, 23 Jun 2017 20:20:47 GMT):
I got the same problem here @LoubnaBaroudi
liangxueping2015 (Fri, 23 Jun 2017 20:21:02 GMT):
Have you solved it?
MaximeLandon (Fri, 23 Jun 2017 20:38:05 GMT):
@jjason @jsmitchell I think I just suceeded to understand pretty correcty the essence of Sawtooth. Am I mad or is Sawtooth a deeply brilliant way to see issues and to solve them ?
MaximeLandon (Fri, 23 Jun 2017 20:38:05 GMT):
@jjason @jsmitchell I think I just suceeded to understand pretty correcty the essence of Sawtooth. Am I mad or is Sawtooth a deeply brilliant way to see blockchain issues and to solve them ?
MaximeLandon (Fri, 23 Jun 2017 20:38:05 GMT):
@jjason @jsmitchell I think I just suceeded to understand pretty correcty the essence of Sawtooth. Am I mad or is Sawtooth a deeply brilliant way to see the security/modularity trade-off and to solve it ?
jsmitchell (Fri, 23 Jun 2017 20:45:18 GMT):
maybe yes maybe no
jsmitchell (Fri, 23 Jun 2017 20:45:20 GMT):
ask again later
MaximeLandon (Fri, 23 Jun 2017 20:46:23 GMT):
@jsmitchell what is your mind on that ?
MaximeLandon (Fri, 23 Jun 2017 20:46:30 GMT):
if I may ask
zac (Fri, 23 Jun 2017 20:57:39 GMT):
@MaximeLandon That's the goal. But it's still very early to make any big claims.
zac (Fri, 23 Jun 2017 20:58:44 GMT):
@sven09543 We've written some "wallet" apps in the past. If I understand your intent correctly, you basically just want to build something to manage private keys for users?
MaximeLandon (Fri, 23 Jun 2017 21:06:22 GMT):
@zac well that's true I've put too strong words on my claim, but it's been less than a day that I understood this and still being a bit astonished
zac (Fri, 23 Jun 2017 21:06:57 GMT):
I find the whole concept of block chains pretty brilliant
zac (Fri, 23 Jun 2017 21:07:07 GMT):
The definitely have the potential to change everything
zac (Fri, 23 Jun 2017 21:07:32 GMT):
And yeah, I'm pretty happy with what we're building in Sawtooth :)
zac (Fri, 23 Jun 2017 21:07:37 GMT):
We'll see though
MaximeLandon (Fri, 23 Jun 2017 21:07:56 GMT):
I'm very amateur programmer in a firm full of experts, and I've been told with another amateur to consider sawtooth (like go check sawtooth good luck for learning) and we worked hard, so finding this couln't be more exciting
MaximeLandon (Fri, 23 Jun 2017 21:08:16 GMT):
@zac are you working at Intel ?
zac (Fri, 23 Jun 2017 21:08:31 GMT):
I'm a contractor
zac (Fri, 23 Jun 2017 21:08:43 GMT):
So, not directly, but they pay the bills
MaximeLandon (Fri, 23 Jun 2017 21:09:01 GMT):
okayyy
zac (Fri, 23 Jun 2017 21:09:18 GMT):
So, not directly
MaximeLandon (Fri, 23 Jun 2017 21:09:39 GMT):
ok
zac (Fri, 23 Jun 2017 21:10:08 GMT):
There are a few Intel folks on this channel though
zac (Fri, 23 Jun 2017 21:10:20 GMT):
But I'm not one of them
MaximeLandon (Fri, 23 Jun 2017 21:10:24 GMT):
okkk good to know ;)
toddmvc (Fri, 23 Jun 2017 21:15:55 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=ptCuzJpvQWb5AMPCN) @zac I work on a team with @sven09543 For the wallet, we are looking to store private keys, and initially give the ability send/receive payments. Eventually we will integrate many other features, such as an Instant Messenger.
zac (Fri, 23 Jun 2017 21:17:50 GMT):
@toddmvc Sounds very cool. Something to keep in mind is that Sawtooth is not a currency. You could implement a currency like BitCoin _on top of it_, but "out of the box" there is nothing that inherently makes it a currency.
toddmvc (Fri, 23 Jun 2017 21:18:39 GMT):
Yes, we would like to add one token to Sawtooth, but there will be many other functions.
zac (Fri, 23 Jun 2017 21:19:10 GMT):
Were you thinking you would implement your own currency?
toddmvc (Fri, 23 Jun 2017 21:19:30 GMT):
I just started learning about Sawtooth, but the model seems to work well with our design for the blockchain.
zac (Fri, 23 Jun 2017 21:19:58 GMT):
So, it sounds like there would be two parts to your app
toddmvc (Fri, 23 Jun 2017 21:20:08 GMT):
Yes, there would be a currency.
zac (Fri, 23 Jun 2017 21:20:29 GMT):
One would manage private keys. Which is all pretty straightforward and similar to other solutions for this.
zac (Fri, 23 Jun 2017 21:21:02 GMT):
The other would be to send Transactions to the blockchain, and probably read some state from it.
zac (Fri, 23 Jun 2017 21:22:05 GMT):
This could be tailored to a particular "Transaction Family" (which would be the logic for your currency implementation)
zac (Fri, 23 Jun 2017 21:22:32 GMT):
Or you could try to make it general purpose. I think that might be a little bit of a challenge to make user friendly.
zac (Fri, 23 Jun 2017 21:22:44 GMT):
But maybe doable.
zac (Fri, 23 Jun 2017 21:22:51 GMT):
It would be a very cool tool if you built it
zac (Fri, 23 Jun 2017 21:23:07 GMT):
Also, implementing a currency Transaction Family would be non-trivial
zac (Fri, 23 Jun 2017 21:24:01 GMT):
If you haven't seen our documentation yet it is here: http://intelledger.github.io/
zac (Fri, 23 Jun 2017 21:24:23 GMT):
You are going to be particularly interested in the App Developer's Guide
toddmvc (Fri, 23 Jun 2017 21:24:29 GMT):
I have looked through it, but I am not an engineer.
toddmvc (Fri, 23 Jun 2017 21:24:38 GMT):
I understand some. Sven handles that.
zac (Fri, 23 Jun 2017 21:24:39 GMT):
Sure sure
zac (Fri, 23 Jun 2017 21:24:50 GMT):
What's the end goal?
zac (Fri, 23 Jun 2017 21:25:10 GMT):
Is it just a project to get to know Sawtooth better, or are you looking to build a product?
toddmvc (Fri, 23 Jun 2017 21:26:22 GMT):
We are looking to build a product. We started with an Ethereum fork, but I'm not in love with the way it's set up. I would like to switch to something that is more lean, and flexible.
toddmvc (Fri, 23 Jun 2017 21:27:37 GMT):
I think the way that you use the Transaction Family will allow us to have more flexibility with currency payments vs EVM code.
zac (Fri, 23 Jun 2017 21:28:09 GMT):
awesome
zac (Fri, 23 Jun 2017 21:28:38 GMT):
Yeah, I think the lion's share of your work will be implementing the Transaction Family (not including whatever work goes into the actual GUI)
zac (Fri, 23 Jun 2017 21:29:22 GMT):
Our SDK's and REST API handle a good deal of the state, submission, and signature work
toddmvc (Fri, 23 Jun 2017 21:30:54 GMT):
Ok, I know @sven09543 wanted more information about that.
toddmvc (Fri, 23 Jun 2017 21:33:06 GMT):
For building out the wallet, did you use Javascript in the past?
zac (Fri, 23 Jun 2017 21:34:08 GMT):
Hrmmm. I actually don't remember if it was JavaScript, Python, or ClojureScript.
zac (Fri, 23 Jun 2017 21:34:22 GMT):
You could do it equally well in any of them though.
zac (Fri, 23 Jun 2017 21:34:32 GMT):
Well. ClojureScript would be harder.
zac (Fri, 23 Jun 2017 21:34:44 GMT):
You'd have to use the JS SDK.
zac (Fri, 23 Jun 2017 21:36:21 GMT):
If @sven09543 is used to JS, or you are planning on running it from the browser, I definitely think that's the way to go
toddmvc (Fri, 23 Jun 2017 21:38:22 GMT):
Ok. We have seen some other wallets in Clojure, and Javascript. Thank you for your feedback.
zac (Fri, 23 Jun 2017 21:38:34 GMT):
sure thing
zac (Fri, 23 Jun 2017 21:38:53 GMT):
Checkout the JS SDK, in particular the client functionality
zac (Fri, 23 Jun 2017 21:39:06 GMT):
And I believe @pschwarz is working on a Clojure SDK on the side
zac (Fri, 23 Jun 2017 21:39:13 GMT):
Not sure if there is an ETA there
toddmvc (Fri, 23 Jun 2017 21:39:18 GMT):
We could run it from a browser, I don't know the technical limitations, but could you run a "full-node" wallet from a browser?
toddmvc (Fri, 23 Jun 2017 21:39:38 GMT):
I think dApps will work that way.
zac (Fri, 23 Jun 2017 21:39:46 GMT):
What does "full-node" mean in this context?
toddmvc (Fri, 23 Jun 2017 21:40:02 GMT):
A complete history of the blockchain.
toddmvc (Fri, 23 Jun 2017 21:40:16 GMT):
For security. Using PoET or another consensus.
zac (Fri, 23 Jun 2017 21:41:38 GMT):
Wait. Is your wallet also a validator? Is it calculating blocks and all the rest?
toddmvc (Fri, 23 Jun 2017 21:42:03 GMT):
The desktop wallet. The mobile wallet is not.
zac (Fri, 23 Jun 2017 21:42:50 GMT):
In that case you are running Python code, and it is definitely not in the browser.
toddmvc (Fri, 23 Jun 2017 21:43:16 GMT):
Ok, that's what I thought.
toddmvc (Fri, 23 Jun 2017 21:43:21 GMT):
It would be nice if you could.
zac (Fri, 23 Jun 2017 21:44:15 GMT):
It's an interesting thought. I think we're a long way from that though. Or any focus on user deployed nodes.
zac (Fri, 23 Jun 2017 21:44:43 GMT):
Deploying a validator is a somewhat technical process at the moment.
toddmvc (Fri, 23 Jun 2017 21:46:06 GMT):
We would be running it as a centralized system. Later play around with PoET, and hopefully the project will be further along by then.
zac (Fri, 23 Jun 2017 21:46:26 GMT):
Support for _clients_ that talk to validators is pretty robust.
toddmvc (Fri, 23 Jun 2017 21:47:09 GMT):
That's good. Is that something that should run on it's own?
zac (Fri, 23 Jun 2017 21:47:23 GMT):
You can use a number of languages Access any of the blockchain data. Sign and submit Transactions, etc.
zac (Fri, 23 Jun 2017 21:47:43 GMT):
Everything we've done so far has been that way.
zac (Fri, 23 Jun 2017 21:47:56 GMT):
There is a network of nodes, and then clients that access them.
toddmvc (Fri, 23 Jun 2017 21:49:14 GMT):
Ok, so unlike Bitcoin, you do not combine the wallet and ledger on one device.
toddmvc (Fri, 23 Jun 2017 21:49:53 GMT):
Clients and validators run separate. (Not that people mine on their home PC anymore).
toddmvc (Fri, 23 Jun 2017 21:50:25 GMT):
So this implies trust of the validator?
zac (Fri, 23 Jun 2017 21:53:00 GMT):
Yes and no. I think we're starting to get into deployment questions that are not necessarily answered, because they will depend on the use case.
zac (Fri, 23 Jun 2017 21:53:50 GMT):
In the past, everything that I know of that's been deployed, the same people are responsible for deploying the clients and deploying the validators.
zac (Fri, 23 Jun 2017 21:54:16 GMT):
So it makes sense to build the client to be fairly lightweight, and "trust" the validator they are talking to.
zac (Fri, 23 Jun 2017 21:55:18 GMT):
I think a lot of use cases would look like this, where you would deploy a validator, and deploy a back-end server that talks to that validator, and then have your clients talk to that.
zac (Fri, 23 Jun 2017 21:55:51 GMT):
Other people might deploy other validators, which you do not trust, but you do trust the one your back-end talks to, because you have control over it.
zac (Fri, 23 Jun 2017 21:58:40 GMT):
Now, if you are interested in building a desktop app, which is both a friendly user-facing GUI, and it's own validator. That's interesting. Nobody has built anything like that for Sawtooth yet, but you'd basically be mimicking the same structure. You would be running a validator (Python), and then your GUI would be talking to it.
zac (Fri, 23 Jun 2017 22:00:08 GMT):
You could write the GUI in anything, it could be totally isolated from the validator portion of the app
sven09543 (Fri, 23 Jun 2017 22:19:17 GMT):
Thanks a lot for the helpful response @zac . Yes, I basically want to make something to manage private keys for users, with some more features in addition to that. In particular, you could think of the Status IM app. So, it would be good to have a currency (which can't be that hard to write a transaction family for, I assume), and some other interesting features could be instant messaging, and maybe interacting with dapps in a similar way as Status allows. Now with Ethereum, the instant messaging and dapps were already built-in, so that was convenient (although, if we don't run semi-full-nodes on the mobile client, the messages would have to be routed through servers anyway), and I assume we'd need a separate solution for instant messaging.
I'm not sure if there is an advantage to running full-nodes of sawtooth for desktop apps intended for users, unless we also build in a proof-of-stake mechanism to reward them for doing that. It might make more sense with Ethereum.
You say "deploy a back-end server that talks to that validator", does that mean we cannot use the REST API from the client app directly? In that case we have the same structure as Ethereum, where we also had a component to translate client app commands to the RPC interface, for client apps that did not contain a node.
zac (Fri, 23 Jun 2017 22:36:41 GMT):
You could definitely talk to the REST API directly. It's just often time there is some extra business that is nice to do server side.
zac (Fri, 23 Jun 2017 22:37:03 GMT):
Storing usernames and passwords, or providing domain specific endpoints, that sort of thing
sven09543 (Fri, 23 Jun 2017 22:42:13 GMT):
Yes, I see what you mean. Maybe we could use that indeed.
MaximeLandon (Sat, 24 Jun 2017 13:23:27 GMT):
@jjason @jsmitchell Hello guys, when you'll have time for me I have a question:
In the 'sawtooth-core/intkey_python/sawtooth_intkey/client_cli/' directory, the files 'populate.py' and 'generate.py' have functions called 'add_generate_parser' and 'add_populate_parser' but they are told to be deprecated, because the 'create_batch.py' file already combines the 'populate' and 'generate' commands.
But in the mean time, the 'import' section of the 'main.py file comprises 'from generate import add_generate_parser' and 'from populate import add_populate_parser'.
MaximeLandon (Sat, 24 Jun 2017 13:23:27 GMT):
@jjason @jsmitchell Hello guys, when you'll have time for me I have a question:
In the 'sawtooth-core/intkey_python/sawtooth_intkey/client_cli/' directory, the files 'populate.py' and 'generate.py' have functions called 'add_generate_parser' and 'add_populate_parser' but they are told to be deprecated, because the 'create_batch.py' file already combines the 'populate' and 'generate' commands.
But in the mean time, the 'import' section of the 'main.py file comprises 'from generate import add_generate_parser' and 'from populate import add_populate_parser'.
What did I miss here ? If I create a TxnFam without the 'populate.py' and 'generate.py' in the 'client_cli' directory, how can I invoke them subsequently in the 'main.py' file ? How to substitute these imports ?
Thanks for your help !
MaximeLandon (Sat, 24 Jun 2017 13:23:27 GMT):
@jjason @jsmitchell Hello guys, when you'll have time for me I have a question:
In the `sawtooth-core/intkey_python/sawtooth_intkey/client_cli/` directory, the files 'populate.py' and 'generate.py' have functions called 'add_generate_parser' and 'add_populate_parser' but they are told to be deprecated, because the 'create_batch.py' file already combines the 'populate' and 'generate' commands.
But in the mean time, the 'import' section of the 'main.py file comprises 'from generate import add_generate_parser' and 'from populate import add_populate_parser'.
What did I miss here ? If I create a TxnFam without the 'populate.py' and 'generate.py' in the 'client_cli' directory, how can I invoke them subsequently in the 'main.py' file ? How to substitute these imports ?
Thanks for your help !
MaximeLandon (Sat, 24 Jun 2017 13:23:27 GMT):
@jjason @jsmitchell Hello guys, when you'll have time for me I have a question:
In the `sawtooth-core/intkey_python/sawtooth_intkey/client_cli/` directory, the files 'populate.py' and 'generate.py' have functions called `add_generate_parser` and `add_populate_parser` but they are told to be deprecated, because the 'create_batch.py' file already combines the `populate` and `generate` commands.
But in the mean time, the `import` section of the 'main.py file comprises `from generate import add_generate_parser` and `from populate import add_populate_parser`.
What did I miss here ? If I create a TxnFam without the 'populate.py' and 'generate.py' in the 'client_cli' directory, how can I invoke them subsequently in the 'main.py' file ? How to substitute these imports ?
Thanks for your help !
MaximeLandon (Sat, 24 Jun 2017 13:23:27 GMT):
@jjason @jsmitchell Hello guys, when you'll have time for me I have a question:
In the `sawtooth-core/intkey_python/sawtooth_intkey/client_cli/` directory, the files 'populate.py' and 'generate.py' have functions called `add_generate_parser` and `add_populate_parser` but they are told to be deprecated, because the 'create_batch.py' file already combines the `populate` and `generate` commands.
But in the mean time, the `import` section of the 'main.py' file comprises `from generate import add_generate_parser` and `from populate import add_populate_parser`.
What did I miss here ? If I create a TxnFam without the 'populate.py' and 'generate.py' in the 'client_cli' directory, how can I invoke them subsequently in the 'main.py' file ? How to substitute these imports ?
Thanks for your help !
MaximeLandon (Sat, 24 Jun 2017 13:23:27 GMT):
@jjason @jsmitchell Hello guys, when you'll have time for me I have a question:
In the `sawtooth-core/intkey_python/sawtooth_intkey/client_cli/` directory, the files 'populate.py' and 'generate.py' have functions called `add_generate_parser` and `add_populate_parser` but they are told to be deprecated, because the 'create_batch.py' file already combines the `populate` and `generate` commands.
But in the mean time, the `import` section of the 'main.py' file comprises `from generate import add_generate_parser` and `from populate import add_populate_parser`.
What did I miss here ? If I create a TxnFam without the 'populate.py' and 'generate.py' in the 'client_cli' directory, how can I invoke them subsequently in the 'main.py' file ? How to substitute these imports ?
Thanks for your help !
seaSwan (Sat, 24 Jun 2017 19:49:34 GMT):
Has joined the channel.
seaSwan (Sat, 24 Jun 2017 19:50:20 GMT):
Hello, I was hoping to gain insight on a specific component of sawtoothlake
seaSwan (Sat, 24 Jun 2017 19:51:52 GMT):
from my understanding, users must ultimately "trust" Intel's SGX platform
seaSwan (Sat, 24 Jun 2017 19:52:19 GMT):
are there plants to opensource this technology to other chip manufacturers?
MaximeLandon (Sat, 24 Jun 2017 20:13:02 GMT):
@seaSwan my humble mind on this is that the idea of SGX is more valuable than the fact that Intel has developed it
MaximeLandon (Sat, 24 Jun 2017 20:13:35 GMT):
Here is a link on the PoET Consensus and its interaction with the SGX enclave
seaSwan (Sat, 24 Jun 2017 20:13:37 GMT):
i agree, but i feel thats something that will eventually need to be addressed
MaximeLandon (Sat, 24 Jun 2017 20:13:42 GMT):
give me a second to find it
MaximeLandon (Sat, 24 Jun 2017 20:13:50 GMT):
that will
seaSwan (Sat, 24 Jun 2017 20:13:50 GMT):
thanks
MaximeLandon (Sat, 24 Jun 2017 20:13:58 GMT):
same for Bitcoin
MaximeLandon (Sat, 24 Jun 2017 20:14:03 GMT):
Bitcoin is an idea
MaximeLandon (Sat, 24 Jun 2017 20:14:15 GMT):
once you gave it to everyone (it is distributed)
seaSwan (Sat, 24 Jun 2017 20:14:31 GMT):
agreed, i found hyperledger after coming to a similar conclusion
MaximeLandon (Sat, 24 Jun 2017 20:14:47 GMT):
the idea can multiply without any cartel controlling supply
seaSwan (Sat, 24 Jun 2017 20:15:12 GMT):
but its my understanding SGX is like a black box
MaximeLandon (Sat, 24 Jun 2017 20:15:15 GMT):
well I'm just an amateur in CS but I think you should definitely spend some time understanding Sawtooth
MaximeLandon (Sat, 24 Jun 2017 20:15:22 GMT):
(if you have not yet)
seaSwan (Sat, 24 Jun 2017 20:15:27 GMT):
there is no way to verify intel or a hacker even isnt doing anything funny inside
MaximeLandon (Sat, 24 Jun 2017 20:15:33 GMT):
yes I forgot the link give me a sec
seaSwan (Sat, 24 Jun 2017 20:16:03 GMT):
ive read the whitepaper and other paperes for past few weeks now, everything I can get my hands on
seaSwan (Sat, 24 Jun 2017 20:17:10 GMT):
and ive found this project which is promising https://01.org/intel-softwareguard-extensions
MaximeLandon (Sat, 24 Jun 2017 20:17:25 GMT):
https://drive.google.com/file/d/0B_NJV6eJXAA1TGdfMjJlT0Qtb0U/view
MaximeLandon (Sat, 24 Jun 2017 20:17:45 GMT):
It starts really at the like 8th minute
seaSwan (Sat, 24 Jun 2017 20:17:51 GMT):
thganks i def nave not seen this
seaSwan (Sat, 24 Jun 2017 20:19:09 GMT):
just realized how unsave that was for me to be clicking gdrive links from strangers :P
MaximeLandon (Sat, 24 Jun 2017 20:19:16 GMT):
@jsmitchell @jjason I don't know who is 'in charge' of the content published on Hyperledger but the presentation above should be given a link in the doc, it is a pretty good presentation of the `consensus module`
MaximeLandon (Sat, 24 Jun 2017 20:22:29 GMT):
ahahah
MaximeLandon (Sat, 24 Jun 2017 20:22:44 GMT):
actually the link is this conversation
MaximeLandon (Sat, 24 Jun 2017 20:22:52 GMT):
a bit above
seaSwan (Sat, 24 Jun 2017 20:24:55 GMT):
so I just registered for a free month of Azure hosting and want to mess around with some hypertech. anyone here do this yet?
jeanne_mtl (Mon, 26 Jun 2017 14:18:31 GMT):
Has joined the channel.
MaximeLandon (Mon, 26 Jun 2017 14:36:34 GMT):
Hello everyone, a last (for real) issue for me:
In the /usr/bin file `tp_gbond_python.py` I have an import problem:
MaximeLandon (Mon, 26 Jun 2017 14:37:08 GMT):
Message Attachments
MaximeLandon (Mon, 26 Jun 2017 14:37:44 GMT):
Message Attachments
MaximeLandon (Mon, 26 Jun 2017 14:40:01 GMT):
my directory structure is the following:
/home/ maximelandon/ Sawtooth/ gbond_python/ sawtooth_gbond/ processor/ main.py
MaximeLandon (Mon, 26 Jun 2017 14:41:34 GMT):
So I have no clue why it doesn't work, moreover that my collegue suceeded to make her tp_gbond_python to work, with the same directory structure and with similar specifications in the `tp_gbond_python.py`
MaximeLandon (Mon, 26 Jun 2017 14:42:27 GMT):
And I need to precise that I have moved this file into my `Sawtooth ` directory, for the sake of simplicity
MaximeLandon (Mon, 26 Jun 2017 14:44:14 GMT):
Message Attachments
MaximeLandon (Mon, 26 Jun 2017 14:44:31 GMT):
for a clearer representation of my directory structure
pschwarz (Mon, 26 Jun 2017 14:44:35 GMT):
Your path insert at line 11 is adding your code relative to the script path. Remove the `os.path.direname(os.path.dirname(os.path.realpath(__file) )))`
MaximeLandon (Mon, 26 Jun 2017 14:46:11 GMT):
thanks for your answer @pschwarz, but still doesn't work
MaximeLandon (Mon, 26 Jun 2017 14:46:17 GMT):
here is a new screenshot
pschwarz (Mon, 26 Jun 2017 14:46:24 GMT):
Hrm
MaximeLandon (Mon, 26 Jun 2017 14:46:42 GMT):
Message Attachments
MaximeLandon (Mon, 26 Jun 2017 14:46:54 GMT):
and still the error from the syntax checker
pschwarz (Mon, 26 Jun 2017 14:47:52 GMT):
Ah, it also should be, on line 20, `from sawtooth_gbond. ...`
pschwarz (Mon, 26 Jun 2017 14:48:07 GMT):
You don't need the `gbond_python`
MaximeLandon (Mon, 26 Jun 2017 14:48:28 GMT):
Ok so I remove the line 11 and the ̀gbond_python`?
pschwarz (Mon, 26 Jun 2017 14:49:09 GMT):
Line 11 looks good now, but yes, remove the `gbond_python`
MaximeLandon (Mon, 26 Jun 2017 14:50:43 GMT):
Nope, still doesn't work, I'm going to get mad, everything looks fine though
pschwarz (Mon, 26 Jun 2017 14:52:25 GMT):
Hrm
pschwarz (Mon, 26 Jun 2017 14:52:58 GMT):
Could you post the code again?
MaximeLandon (Mon, 26 Jun 2017 14:53:02 GMT):
okay
MaximeLandon (Mon, 26 Jun 2017 14:53:56 GMT):
Message Attachments
pschwarz (Mon, 26 Jun 2017 15:03:06 GMT):
Line 11 is still a problem: it's a relative path
MaximeLandon (Mon, 26 Jun 2017 15:04:29 GMT):
I'm gonna have to ask you what should I put, because that is a kind of subject I really lack of
pschwarz (Mon, 26 Jun 2017 15:05:05 GMT):
Would suggest, instead of including your home directory, trying making that path relative to the script path. Uncomment line 12, and replace the path the strings with `'..', '..', '..', 'gbond_python'`
pschwarz (Mon, 26 Jun 2017 15:05:21 GMT):
I think that should specify the relative path from the script it self
pschwarz (Mon, 26 Jun 2017 15:05:47 GMT):
Wait
pschwarz (Mon, 26 Jun 2017 15:05:51 GMT):
Where does this script live?
pschwarz (Mon, 26 Jun 2017 15:05:58 GMT):
Is it the main under client_cli?
MaximeLandon (Mon, 26 Jun 2017 15:06:56 GMT):
no it is the tp_gbond_python.py that I've put in my Sawtooth directory
MaximeLandon (Mon, 26 Jun 2017 15:07:08 GMT):
and it still doesn't work
pschwarz (Mon, 26 Jun 2017 15:08:24 GMT):
Ah, yeah, I realize I didn't know where that was
pschwarz (Mon, 26 Jun 2017 15:08:44 GMT):
Go back to what you had and just put `/home` as the first string
MaximeLandon (Mon, 26 Jun 2017 15:09:35 GMT):
Message Attachments
MaximeLandon (Mon, 26 Jun 2017 15:09:38 GMT):
okay I have put that
pschwarz (Mon, 26 Jun 2017 15:09:41 GMT):
No
MaximeLandon (Mon, 26 Jun 2017 15:09:54 GMT):
I need to uncomment the line 12 ?
MaximeLandon (Mon, 26 Jun 2017 15:10:03 GMT):
okay I see
MaximeLandon (Mon, 26 Jun 2017 15:10:08 GMT):
give me a sec
MaximeLandon (Mon, 26 Jun 2017 15:11:02 GMT):
YYYYYYYYYYYYYYYYYYYYYYYYYYYEEEEESSSS
MaximeLandon (Mon, 26 Jun 2017 15:11:05 GMT):
I did work
MaximeLandon (Mon, 26 Jun 2017 15:11:19 GMT):
god damn that much struggle because of a slash
MaximeLandon (Mon, 26 Jun 2017 15:11:31 GMT):
thanks a billion times Sir !
jjason (Mon, 26 Jun 2017 15:11:31 GMT):
@MaximeLandon Apologies. I was offline all weekend. Did you get your original question about 'populate' and 'generate' answered?
MaximeLandon (Mon, 26 Jun 2017 15:13:14 GMT):
@jjason Hello ! No I actually didn't have an answer, and there is no need for apologies (it seems that I'm the only one working on weekends, I'm still at the beginning of this blockchain journey and motivation is at its best)
jjason (Mon, 26 Jun 2017 15:16:20 GMT):
So, I am unfamiliar territory here, but looking at the git commit history, it appears that `create_batch` is to be preferred over `populate` or `generate`. It looks like @toddojala made the initial commit to combine the two into `create_batch`. Maybe he can chime in and give more insight.
jjason (Mon, 26 Jun 2017 15:18:14 GMT):
As for the mechanics in the python file, you would no longer need to import from `popluate.py` and `generate.py` and can rely upon these:
```
from sawtooth_intkey.client_cli.create_batch import add_create_batch_parser
from sawtooth_intkey.client_cli.create_batch import do_create_batch
```
jjason (Mon, 26 Jun 2017 15:19:11 GMT):
However, if you decide that you would rather keep them split into separate modules if it makes more sense to you that way, then you may certainly do so (as the design of your own CLI is certainly up to you).
MaximeLandon (Mon, 26 Jun 2017 15:25:19 GMT):
Okkayy thanks for the answer @jjason ! Actually what surprises me is that the content of `populate.py` and `generate.py` is not present entirely in the `create_batch.py` file. There are parts missing, and that is the source of my wanderings !
MaximeLandon (Mon, 26 Jun 2017 15:26:05 GMT):
So @toddojala I will be grateful if you mind help me on this ! Thanks !
boydjohnson (Mon, 26 Jun 2017 15:34:36 GMT):
@zac On your getting the validity of txns back to the client story, high level: after the TransactionExecutor gets the validity information from the txn processor, how does the client get it?
jjason (Mon, 26 Jun 2017 15:57:23 GMT):
@MaximeLandon Looking at the source, it looks like any missing code in `create_batch.py` appears to be because of a little bit of code restructuring/refactoring and the fact that the `create_batch` command combines performing a `populate` followed by `generate`. It appears to me that functionally `intkey create_batch ...` _should_ end up with the same or a similar result as running `intkey populate ...` followed by `intkey generate ...` although it looks like `create_batch` will do a better job of on the `generate` portion as it will only choose from keys/names for values that were chosen in the `populate` phase whereas `populate` followed by `generate` will most likely result in `inc`/`dec` transactions for keys/names that were not originally `set.
jjason (Mon, 26 Jun 2017 15:57:23 GMT):
@MaximeLandon Looking at the source, it looks like any missing code in `create_batch.py` appears to be because of a little bit of code restructuring/refactoring and the fact that the `create_batch` command combines performing a `populate` followed by `generate`. It appears to me that functionally `intkey create_batch ...` _should_ end up with the same or a similar result as running `intkey populate ...` followed by `intkey generate ...` although it looks like `create_batch` will do a better job of on the `generate` portion as it will only choose from keys/names for values that were chosen in the `populate` phase whereas `populate` followed by `generate` will most likely result in `inc`/`dec` transactions for keys/names that were not originally `set`.
jjason (Mon, 26 Jun 2017 15:57:23 GMT):
@MaximeLandon Looking at the source, it looks like any missing code in `create_batch.py` appears to be because of a little bit of code restructuring/refactoring and the fact that the `create_batch` command combines performing a `populate` followed by `generate`. It appears to me that functionally `intkey create_batch ...` _should_ end up with the same or a similar result as running `intkey populate ...` followed by `intkey generate ...` although it looks like `create_batch` will do a better job on the `generate` portion as it will only choose from keys/names for values that were chosen in the `populate` phase whereas `populate` followed by `generate` will most likely result in `inc`/`dec` transactions for keys/names that were not originally `set`.
jjason (Mon, 26 Jun 2017 15:57:23 GMT):
@MaximeLandon Looking at the source, it looks like any missing code in `create_batch.py` appears to be because of a little bit of code restructuring/refactoring and the fact that the `create_batch` command combines performing a `populate` followed by `generate`. It appears to me that functionally `intkey create_batch ...` _should_ end up with the same or a similar result as running `intkey populate ...` followed by `intkey generate ...` although it looks like `create_batch` will do a better job on the `generate` portion as it will only choose from keys/names for values that were chosen in the `populate` phase whereas `populate` followed by `generate` will most likely result in `inc` / `dec` transactions for keys/names that were not originally `set`.
MaximeLandon (Mon, 26 Jun 2017 16:34:20 GMT):
@jjason Understood a 100%, yes actually the potential lack of synchronisation between `populate` and `generate` was something I somehow identified. I understand that `create_batch` resolves this issue ! Thanks a lot for your help !
MaximeLandon (Mon, 26 Jun 2017 16:35:06 GMT):
I'll never be able to thank you guys enough for all the help you're providing to amateurs like me !
zac (Mon, 26 Jun 2017 16:42:29 GMT):
@boydjohnson TP --> Executor --> BatchTracker --> Client Handler --> REST API --> client
zac (Mon, 26 Jun 2017 16:43:38 GMT):
More specifically, the Executor notifies the Batch Tracker that there is an invalid transaction. The BatchTracker stores that information temporarily, and Client Handlers can query the BatchTracker for it.
boydjohnson (Mon, 26 Jun 2017 16:44:45 GMT):
What piece owns the BatchTracker?
zac (Mon, 26 Jun 2017 16:45:11 GMT):
No piece
zac (Mon, 26 Jun 2017 16:45:15 GMT):
It is its own piece
MaximeLandon (Mon, 26 Jun 2017 16:47:42 GMT):
@zac Actually I would like to know if there is some sort of doc about the precise functionning of the Transaction_Processor Part ? To illustrate, the Journal is very well explained in the Sawtooth Doc, so if something similar exists for the TP I would be glad to read it !
zac (Mon, 26 Jun 2017 16:49:11 GMT):
@MaximeLandon What language are you working in?
zac (Mon, 26 Jun 2017 17:09:10 GMT):
Python TP Guide is here: http://intelledger.github.io/_autogen/sdk_TP_tutorial_python.html
cianx (Mon, 26 Jun 2017 18:16:49 GMT):
@jjason Is this expected behavior ```test-dynamic-network_1 | [17:42:09.738 ERROR consensus_state] Validator validator-02cd2bca (ID=02cd2bca...0736b286): Committed in block 10, trying to claim block 11, must wait until block 12
test-dynamic-network_1 | [17:42:09.738 ERROR poet_block_publisher] Reject building on block 284fc9e5: Validator has not waited long enough since registering validator information.
```
cianx (Mon, 26 Jun 2017 18:16:49 GMT):
\
jjason (Mon, 26 Jun 2017 18:17:57 GMT):
Yes.
jjason (Mon, 26 Jun 2017 18:18:03 GMT):
That is the c-policy at work.
jjason (Mon, 26 Jun 2017 18:20:43 GMT):
If not in the settings on the blockchain, the default for `sawtooth.poet.block_claim_delay`is 1.
cianx (Mon, 26 Jun 2017 18:21:07 GMT):
So validators are expected to intentionally violate that policy??
jjason (Mon, 26 Jun 2017 18:21:32 GMT):
No, what you are seeing is a validator refusing to initialize a block because it knows that it _would_ violate the policy.
jjason (Mon, 26 Jun 2017 18:22:07 GMT):
We could change the "error" to an "info"
cianx (Mon, 26 Jun 2017 18:22:10 GMT):
So not actually errors, maybe the logging should be info?
cianx (Mon, 26 Jun 2017 18:22:25 GMT):
:)
jjason (Mon, 26 Jun 2017 18:23:26 GMT):
In `consensus_state` it would probably remain an "error" as that code is used by both the block publisher and the block verifier (where it truly is an error), but in `poet_block_publisher` it could be downgraded to an "infi"
jjason (Mon, 26 Jun 2017 18:23:26 GMT):
In `consensus_state` it would probably remain an "error" as that code is used by both the block publisher and the block verifier (where it truly is an error), but in `poet_block_publisher` it could be downgraded to an "info"
cianx (Mon, 26 Jun 2017 18:29:59 GMT):
it is only an error when validator_did_claim_block is called from the BlockVerifier, not when it is called from the BlockPublisher. It is not an error to detect that you would violate a policy.
benoit.razet (Mon, 26 Jun 2017 19:52:09 GMT):
Hi, I am looking into the supplychain family in sawtooth-core. I am trying to understand how the different pieces play together. Has anyone created a demo calling the various functions creating agents, records, and applications? Thanks!
benoit.razet (Mon, 26 Jun 2017 19:59:33 GMT):
Oops, I just found the `tests` folder. I am going to look into that :grin:
kelly_ (Mon, 26 Jun 2017 20:43:46 GMT):
hey @benoit.razet - @cianx created that and may be able to help
kelly_ (Mon, 26 Jun 2017 20:44:07 GMT):
There is not a public demo of that code specifically, but this is very similar - https://provenance.sawtooth.me/
benoit.razet (Mon, 26 Jun 2017 20:44:47 GMT):
I was hoping I could see the code that created https://provenance.sawtooth.me
benoit.razet (Mon, 26 Jun 2017 20:45:03 GMT):
the tests folder is helping
cianx (Mon, 26 Jun 2017 20:45:25 GMT):
@benoit.razet here are a couple of open PRs regarding supply chain:https://github.com/hyperledger/sawtooth-core/pull/668
cianx (Mon, 26 Jun 2017 20:45:38 GMT):
https://github.com/hyperledger/sawtooth-core/pull/652
cianx (Mon, 26 Jun 2017 20:46:25 GMT):
The first is documentation on the SupplyChain Transaction processor, the second is a CLI client for the SupplyChain TP.
cianx (Mon, 26 Jun 2017 20:46:25 GMT):
The first is documentation on the SupplyChain Transaction processor, the second is a CLI client for the SupplyChain.
benoit.razet (Mon, 26 Jun 2017 20:47:06 GMT):
Thanks! I'll look at these
cianx (Mon, 26 Jun 2017 20:48:07 GMT):
We probably won't be releasing the source for the WebPage on the current public demo page as it is against the 0.7 code base. We are working on and updated demo but that is a little ways out and I am not sure the complete form it will take yet.
mattalhonte (Mon, 26 Jun 2017 20:50:25 GMT):
I'm also interested in using Sawtooth for a Supply Chain application.
mattalhonte (Mon, 26 Jun 2017 20:50:46 GMT):
Especially in making a demo like one of those sweet ones on the site! :)
benoit.razet (Mon, 26 Jun 2017 20:56:37 GMT):
I tried to load the demo with test_tp_supplychain_python.yaml but I get the following message. Should I set those environment variables manually? Do I need register to be able to use repository sawtooth-tp_supplychain_python ? ``` WARNING: The SAWTOOTH_CORE variable is not set. Defaulting to a blank string.
WARNING: The ISOLATION_ID variable is not set. Defaulting to a blank string.
Pulling tp_supplychain_python (sawtooth-tp_supplychain_python:ISOLATION_ID)...
ERROR: repository sawtooth-tp_supplychain_python not found: does not exist or no pull access
```
cianx (Mon, 26 Jun 2017 21:06:49 GMT):
That docker runs the SupplyChain Transaction processor unit tests. You will need to setup an environment as described here :https://intelledger.github.io/core_developers_guide/environment_setup.html#build-components
cianx (Mon, 26 Jun 2017 21:07:58 GMT):
and run the "bin/build_all -l python" to create the docker images. AFAIK we are not publishing prebuilt docker images for the unit tests.
cianx (Mon, 26 Jun 2017 21:10:30 GMT):
That test compose file to be run in by it's self would be called via the run_docker_test script as follows 'bin/run_docker_test families/supplychain/python/tests/test_tp_supplychain_python.yaml'
benoit.razet (Mon, 26 Jun 2017 21:11:25 GMT):
I am building the image...
mattalhonte (Mon, 26 Jun 2017 21:24:52 GMT):
Do you need to use Vagrant to run the Demo code? I'm developing on an AWS instance, and Vagrant's giving me trouble (I guess it doesn't let you do Inception layers of VMs?)
toddojala (Mon, 26 Jun 2017 21:26:22 GMT):
@mattalhonte You should be able to run demo code in Docker, as the App Dev Guide outlines: http://intelledger.github.io/0.8/app_developers_guide/docker.html
mattalhonte (Mon, 26 Jun 2017 21:26:57 GMT):
Awesome, thanks!
benoit.razet (Mon, 26 Jun 2017 21:33:49 GMT):
Thanks too!
mattalhonte (Mon, 26 Jun 2017 21:46:58 GMT):
In docker, thought I set up the Genesis block and everything, but when I check connectivity...
```curl http://localhost:8080/blocks
{
"error": {
"code": 15,
"message": "The validator has no genesis block, and is not yet ready to be queried. Try your request again later.",
"title": "Validator Not Ready"
}
}```
cianx (Mon, 26 Jun 2017 21:47:51 GMT):
can you post the log from your validator instance and the command(s) you used to start it?
toddojala (Mon, 26 Jun 2017 21:49:07 GMT):
@mattalhonte If you use Docker (using the App Dev Guide flow), the genesis block should be created automatically. Are you creating your own docker containers or doing something different?
mattalhonte (Mon, 26 Jun 2017 21:50:15 GMT):
No, I was trying to follow the App Dev guide. But then it gave me the issue with the Genesis Block, so I ran a bunch of the commands from the Ubuntu one.
mattalhonte (Mon, 26 Jun 2017 21:50:25 GMT):
I'll tear it down and start again.
mattalhonte (Mon, 26 Jun 2017 21:54:07 GMT):
Hrm, same issue.
toddojala (Mon, 26 Jun 2017 21:55:07 GMT):
@mattalhonte Can you display the output you get when you run docker-compose, to start the containers?
mattalhonte (Mon, 26 Jun 2017 21:55:08 GMT):
I did
``docker-compose -f sawtooth-default.yaml down``
then
```docker-compose -f sawtooth-default.yaml up```
Then in a different window:
```docker exec -it sawtooth-client-default bash
root@ed6908272e85:/# curl http://rest_api:8080/blocks
{
"error": {
"code": 15,
"message": "The validator has no genesis block, and is not yet ready to be queried. Try your request again later.",
"title": "Validator Not Ready"
}
}```
mattalhonte (Mon, 26 Jun 2017 21:55:22 GMT):
k!
mattalhonte (Mon, 26 Jun 2017 21:55:53 GMT):
docker-compose -f sawtooth-default.yaml up
Creating network "sawtoothapp_default" with the default driver
Creating sawtooth-validator-default ...
Creating sawtooth-validator-default ... done
Creating sawtooth-rest_api-default ...
Creating sawtooth-tp_xo_python-default ...
Creating sawtooth-tp_intkey_python-default ...
Creating sawtooth-tp_settings-default ...
Creating sawtooth-rest_api-default
Creating sawtooth-tp_xo_python-default
Creating sawtooth-tp_intkey_python-default
Creating sawtooth-tp_intkey_python-default ... done
Creating sawtooth-client-default ...
Creating sawtooth-client-default ... done
Attaching to sawtooth-validator-default, sawtooth-rest_api-default, sawtooth-tp_xo_python-default, sawtooth-tp_intkey_python-default, sawtooth-tp_settings-default, sawtooth-client-default
mattalhonte (Mon, 26 Jun 2017 21:56:06 GMT):
sawtooth-validator-default | writing file: /etc/sawtooth/keys/validator.priv
sawtooth-validator-default | writing file: /etc/sawtooth/keys/validator.pub
sawtooth-validator-default | creating key directory: /root/.sawtooth/keys
sawtooth-validator-default | writing file: /root/.sawtooth/keys/my_key.priv
sawtooth-validator-default | writing file: /root/.sawtooth/keys/my_key.pub
sawtooth-validator-default | Generated config-genesis.batch
sawtooth-validator-default | Processing config-genesis.batch...
sawtooth-validator-default | Generating /var/lib/sawtooth/genesis.batch
sawtooth-validator-default | [21:53:33.496 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
sawtooth-validator-default | [21:53:33.496 INFO validator] Skipping validator config loading from non-existent config file: /etc/sawtooth/validator.toml
mattalhonte (Mon, 26 Jun 2017 21:56:08 GMT):
sawtooth-validator-default | [21:53:33.497 INFO keys] Loading signing key: /etc/sawtooth/keys/validator.priv
sawtooth-validator-default | [21:53:33.498 INFO cli] config [path]: config_dir = "/etc/sawtooth"
sawtooth-validator-default | [21:53:33.498 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
sawtooth-validator-default | [21:53:33.499 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
sawtooth-validator-default | [21:53:33.499 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
sawtooth-validator-default | [21:53:33.499 WARNING cli] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.
sawtooth-validator-default | [21:53:33.499 DEBUG core] database file is /var/lib/sawtooth/merkle-00.lmdb
sawtooth-validator-default | [21:53:33.500 DEBUG core] state delta store file is /var/lib/sawtooth/state-deltas-00.lmdb
sawtooth-validator-default | [21:53:33.500 DEBUG core] block store file is /var/lib/sawtooth/block-00.lmdb
sawtooth-validator-default | [21:53:33.503 DEBUG selector_events] Using selector: ZMQSelector
sawtooth-validator-default | [21:53:33.504 DEBUG dispatch] Added send_message function for connection ServerThread
sawtooth-validator-default | [21:53:33.505 DEBUG genesis] genesis_batch_file: /var/lib/sawtooth/genesis.batch
sawtooth-validator-default | [21:53:33.505 DEBUG genesis] block_chain_id: not yet specified
sawtooth-validator-default | [21:53:33.505 INFO genesis] Producing genesis block from /var/lib/sawtooth/genesis.batch
sawtooth-validator-default | [21:53:33.506 DEBUG genesis] Adding 1 batches
sawtooth-validator-default | [21:53:33.507 DEBUG executor] no transaction processors registered for processor type sawtooth_config: 1.0: application/protobuf
sawtooth-validator-default | [21:53:33.508 INFO executor] Waiting for transaction processor (sawtooth_config, 1.0, application/protobuf)
sawtooth-validator-default | [21:53:33.512 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 98 bytes
sawtooth-validator-default | [21:53:33.513 INFO processor_handlers] registered transaction processor: connection_id=32f0711b8b9678f867bdb4944b2a3eb74f738a1701dd0258129119e0a8f5adc426ee697a3e3de006fd9c908d6ca8cc35040ef78846cbebe5b26507937c8cdf0d, family=xo, version=1.0, encoding=csv-utf8, namespaces=['5b7349']
sawtooth-validator-default | [21:53:33.514 DEBUG interconnect] ServerThread sending TP_REGISTER_RESPONSE to b'489845cdf1264576'
sawtooth-validator-default | [21:53:33.554 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 110 bytes
sawtooth-validator-default | [21:53:33.555 INFO processor_handlers] registered transaction processor: connection_id=6549178205ec40ea010e063a0cdd3ae3050613020c09d8914230bf65a09de0f09e2a5d750c691349a4623b6c0805ea73051f10ff7b93444323d9b65e899d6118, family=intkey, version=1.0, encoding=application/cbor, namespaces=['1cf126']
sawtooth-validator-default | [21:53:33.556 DEBUG interconnect] ServerThread sending TP_REGISTER_RESPONSE to b'8ff6fa5c337147bc'
sawtooth-validator-default | [21:53:33.647 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 125 bytes
sawtooth-validator-default | [21:53:33.648 INFO processor_handlers] registered transaction processor: connection_id=5df42a397236f3f25a522f84c397433ee1b73d2be8eca8b9539e2f5253828c8f9c496e6c4ebf0ab866da49c5982c038b0975f5945910ea51a3a3390c7e138cd5, family=sawtooth_settings, version=1.0, encoding=application/protobuf, namespaces=['000000']
sawtooth-validator-default | [21:53:33.649 DEBUG interconnect] ServerThread sending TP_REGISTER_RESPONSE to b'ace0cad83f0d4ed1'
sawtooth-tp_xo_python-default | [21:53:33.516 INFO core] register attempt: OK
sawtooth-tp_intkey_python-default | [21:53:33.558 INFO core] register attempt: OK
sawtooth-tp_settings-default | [21:53:33 DEBUG selector_events] Using selector: ZMQSelector
sawtooth-tp_settings-default | [21:53:33 INFO core] register attempt: OK
sawtooth-client-default | creating key directory: /root/.sawtooth/keys
sawtooth-client-default | writing file: /root/.sawtooth/keys/root.priv
sawtooth-client-default | writing file: /root/.sawtooth/keys/root.pub
sawtooth-validator-default | [21:54:02.588 DEBUG interconnect] ServerThread receiving CLIENT_BLOCK_LIST_REQUEST message: 73 bytes
sawtooth-validator-default | [21:54:02.589 DEBUG client_handlers] Unable to get chain head from block store
sawtooth-validator-default | [21:54:02.590 DEBUG interconnect] ServerThread sending CLIENT_BLOCK_LIST_RESPONSE to b'3e873cd202fd4125'
toddojala (Mon, 26 Jun 2017 21:59:14 GMT):
@mattalhonte It looks like the genesis batch is generated and consumed properly: sawtooth-validator-default | Generated config-genesis.batch
sawtooth-validator-default | Processing config-genesis.batch...
sawtooth-validator-default | Generating /var/lib/sawtooth/genesis.batch
toddojala (Mon, 26 Jun 2017 21:59:54 GMT):
@mattalhonte Is it possible that a different validator container was left running? odd..
mattalhonte (Mon, 26 Jun 2017 22:00:03 GMT):
Possible!
mattalhonte (Mon, 26 Jun 2017 22:00:28 GMT):
Know offhand how one would fix that if that were the issue?
toddojala (Mon, 26 Jun 2017 22:01:13 GMT):
"docker-compose -f sawtooth-default.yaml down" should tear down all the containers, but...
mattalhonte (Mon, 26 Jun 2017 22:01:31 GMT):
Tried that. :
mattalhonte (Mon, 26 Jun 2017 22:01:33 GMT):
:/
toddojala (Mon, 26 Jun 2017 22:01:49 GMT):
Enter "docker ps" to see what is running.
mattalhonte (Mon, 26 Jun 2017 22:03:13 GMT):
Oh, hrm, looks like a lot of stuff. I was experimenting with Fabric before, I think I didn't kill all those VMs properly before switching over.
mattalhonte (Mon, 26 Jun 2017 22:03:51 GMT):
Thanks! Let's see if killing all those fixes things... :)
toddojala (Mon, 26 Jun 2017 22:03:53 GMT):
Maybe get rid of all of them before trying again? ;)
mattalhonte (Mon, 26 Jun 2017 22:06:00 GMT):
ugh, still the same issue
toddojala (Mon, 26 Jun 2017 22:06:17 GMT):
@mattalhonte I'm going to get the latest code and try it myself.
mattalhonte (Mon, 26 Jun 2017 22:06:22 GMT):
Thanks!
mattalhonte (Mon, 26 Jun 2017 22:07:55 GMT):
hrm, when I run `curl http://rest_api:8080/blocks`
on the window running Docker it says this:
```sawtooth-validator-default | [22:06:30.643 DEBUG interconnect] ServerThread receiving CLIENT_BLOCK_LIST_REQUEST message: 73 bytes
sawtooth-validator-default | [22:06:30.645 DEBUG client_handlers] Unable to get chain head from block store
sawtooth-validator-default | [22:06:30.645 DEBUG interconnect] ServerThread sending CLIENT_BLOCK_LIST_RESPONSE to b'f693f9af244c4309'
```
toddojala (Mon, 26 Jun 2017 22:09:46 GMT):
@mattalhonte When you say "the window running docker," do you mean a terminal running on the host OS?
toddojala (Mon, 26 Jun 2017 22:10:05 GMT):
@mattalhonte In that case, you would run: curl http://localhost:8080/blocks
mattalhonte (Mon, 26 Jun 2017 22:10:13 GMT):
the one where I ran `docker-compose -f sawtooth-default.yaml up`
mattalhonte (Mon, 26 Jun 2017 22:10:24 GMT):
it says that output
toddojala (Mon, 26 Jun 2017 22:10:36 GMT):
@mattalhonte From the host OS, the rest_api is reachable at http://localhost:8080/blocks
toddojala (Mon, 26 Jun 2017 22:11:06 GMT):
@mattalhonte Within the client docker container, it would be reachable at: curl http://rest_api:8080/blocks
toddojala (Mon, 26 Jun 2017 22:11:37 GMT):
Since you run docker-compose from the host-os command line, try the localhost option.
mattalhonte (Mon, 26 Jun 2017 22:11:57 GMT):
ohh, I see, thanks, I'll try that!
mattalhonte (Mon, 26 Jun 2017 22:12:49 GMT):
aaand same issue.
```curl http://localhost:8080/blocks
{
"error": {
"code": 15,
"message": "The validator has no genesis block, and is not yet ready to be queried. Try your request again later.",
"title": "Validator Not Ready"
}
```
toddojala (Mon, 26 Jun 2017 22:15:00 GMT):
@mattalhonte I get this:
toddojala (Mon, 26 Jun 2017 22:15:03 GMT):
curl http://rest_api:8080/blocks
{
"error": {
"code": 15,
"message": "The validator has no genesis block, and is not yet ready to be queried. Try your request again later.",
"title": "Validator Not Ready"
}
}root@3b9462d0961e:/#
mattalhonte (Mon, 26 Jun 2017 22:15:29 GMT):
Looks familiar! Heh
toddojala (Mon, 26 Jun 2017 22:15:59 GMT):
@mattalhonte So I've duplicated your issue.
mattalhonte (Mon, 26 Jun 2017 22:17:02 GMT):
So did I just contribute to Hyperledger? =D
toddojala (Mon, 26 Jun 2017 22:17:15 GMT):
Has anyone else seen this issue, with the validator missing a genesis block? The output from "docker-compose up" does not seem to have anything alarming.
toddojala (Mon, 26 Jun 2017 22:28:55 GMT):
@mattalhonte Removed some stale images, and retrying...
mattalhonte (Mon, 26 Jun 2017 22:29:16 GMT):
K, thanks again!
mattalhonte (Mon, 26 Jun 2017 22:30:24 GMT):
Not sure if this is helpful. Messed around with other commands in the Docker guide, this seemed interesting:
```sawtooth batch submit -f batches.intkey --url http://rest_api:8080
usage: sawtooth batch [-h] {list,show} ...
sawtooth batch: error: argument subcommand: invalid choice: 'submit' (choose from 'list', 'show')```
mattalhonte (Mon, 26 Jun 2017 22:30:52 GMT):
Maybe some subcommands got changed and it's not reflected in the docs?
toddojala (Mon, 26 Jun 2017 22:30:52 GMT):
It worked for me this time.
mattalhonte (Mon, 26 Jun 2017 22:31:04 GMT):
Interesting! What did you do, exactly?
mattalhonte (Mon, 26 Jun 2017 22:31:22 GMT):
Maybe I didn't flush my Docker images well enough
toddojala (Mon, 26 Jun 2017 22:31:36 GMT):
can you output the result of "docker images"?
mattalhonte (Mon, 26 Jun 2017 22:32:59 GMT):
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/sawtooth-tp_settings latest 25f39b57e9c6 7 hours ago 163 MB
hyperledger/sawtooth-validator latest d12a0519f996 2 weeks ago 167 MB
hyperledger/sawtooth-tp_xo_python latest b46e3845e32c 2 weeks ago 166 MB
hyperledger/sawtooth-tp_intkey_python latest cbd2bb272aa0 2 weeks ago 161 MB
hyperledger/sawtooth-rest_api latest 74ed5c778b8c 2 weeks ago 165 MB
hyperledger/sawtooth-all latest c0d471ead26b 2 weeks ago 183 MB
hyperledger/composer-playground latest 80eb4bf34c8d 3 weeks ago 337 MB
hyperledger/fabric-ca x86_64-1.0.0-alpha 35311d8617b4 3 months ago 240 MB
hyperledger/fabric-couchdb x86_64-1.0.0-alpha f3ce31e25872 3 months ago 1.51 GB
hyperledger/fabric-orderer x86_64-1.0.0-alpha 5685fd77ab7c 3 months ago 182 MB
hyperledger/fabric-peer x86_64-1.0.0-alpha 784c5d41ac1d 3 months ago 184 MB
hyperledger/fabric-ccenv x86_64-1.0.0-alpha 91792014b61f 3 months ago 1.29 GB
hyperledger/fabric-baseos x86_64-0.3.0 c3a4cf3b3350 5 months ago 161 MB
toddojala (Mon, 26 Jun 2017 22:33:18 GMT):
@mattalhonte What I did was run the command "docker rmi IMAGE_NAME" on all the images that started with hyperledger.
toddojala (Mon, 26 Jun 2017 22:33:37 GMT):
In your case, just run it on the "hyperledger/sawtooth*" images....
toddojala (Mon, 26 Jun 2017 22:34:06 GMT):
@mattalhonte Give that a try - remove the possibly stale images with "docker rmi"
mattalhonte (Mon, 26 Jun 2017 22:35:29 GMT):
so, `docker rmi $(docker images hyperledger/sawooth-* -q)` ?
mattalhonte (Mon, 26 Jun 2017 22:36:08 GMT):
err `docker rmi $(docker images hyperledger/sawtooth-* -q)` rather?
mattalhonte (Mon, 26 Jun 2017 22:37:00 GMT):
k, done!
mattalhonte (Mon, 26 Jun 2017 22:38:01 GMT):
huzzah! :)
mattalhonte (Mon, 26 Jun 2017 22:38:05 GMT):
Thanks so much!
mattalhonte (Mon, 26 Jun 2017 22:39:29 GMT):
hrm, maybe the official docs should recommend running `docker rmi $(docker images hyperledger/sawtooth-* -q)` after shutting down with `docker-compose -f sawtooth-default.yaml down` ?
mattalhonte (Mon, 26 Jun 2017 22:53:48 GMT):
Stupid question...now that I've got the Docker up and running, how do I run the demo code exactly?
boydjohnson (Mon, 26 Jun 2017 22:56:14 GMT):
Just a second.
boydjohnson (Mon, 26 Jun 2017 22:57:47 GMT):
`docker exec -it sawtooth-client-default bash` and then run `xo` or `intkey` commands. Query blocks through the rest api using `sawtooth block list --url http://rest_api:8080`.
mattalhonte (Mon, 26 Jun 2017 22:58:17 GMT):
Awesome, thanks!
boydjohnson (Mon, 26 Jun 2017 22:58:41 GMT):
No problem. Thanks for being engaged as we work out the kinks.
mattalhonte (Mon, 26 Jun 2017 22:59:29 GMT):
hrm :/
```docker exec -it sawtooth-client-default bash
root@bdd0cd71cfd1:/# xo
Error: invalid command: None
root@bdd0cd71cfd1:/# intkey
<_io.TextIOWrapper name='
boydjohnson (Mon, 26 Jun 2017 23:02:08 GMT):
try `xo -h`.
boydjohnson (Mon, 26 Jun 2017 23:03:08 GMT):
I'm going to make a Jira story about those commands, with no arguments, producing junk output.
boydjohnson (Mon, 26 Jun 2017 23:06:19 GMT):
Here is the jira story, mattalhonte, if you want to add anything: https://jira.hyperledger.org/browse/STL-509
mattalhonte (Mon, 26 Jun 2017 23:06:38 GMT):
Cool, thanks!
mattalhonte (Mon, 26 Jun 2017 23:07:50 GMT):
xo -h gives a Help output
boydjohnson (Mon, 26 Jun 2017 23:08:36 GMT):
Cool, then you can `xo init --url http://rest_api:8080` and then play through a game of xo.
mattalhonte (Mon, 26 Jun 2017 23:08:45 GMT):
huzzah, xo init works
boydjohnson (Mon, 26 Jun 2017 23:09:03 GMT):
Yay! Can you create a game?
mattalhonte (Mon, 26 Jun 2017 23:11:09 GMT):
Yup!
boydjohnson (Mon, 26 Jun 2017 23:12:11 GMT):
Sweet!
boydjohnson (Mon, 26 Jun 2017 23:13:13 GMT):
Good luck. Have fun.
mattalhonte (Mon, 26 Jun 2017 23:35:20 GMT):
How would one go about making a neat demo with a web frontend? Would really like to try n make a modified version of this awesome thing: https://provenance.sawtooth.me
mattalhonte (Tue, 27 Jun 2017 00:09:35 GMT):
Trying to run Tests.
```bin/run_docker_test families/supplychain/python/tests/test_tp_supplychain_python.yaml
/home/ubuntu/sawtooth-with-supply-chain/sawtooth-core
ERROR:__main__:Test service 'test-tp-supplychain-python' does not exist in compose file: 'families/supplychain/python/tests/test_tp_supplychain_python.yaml' ```
benoit.razet (Tue, 27 Jun 2017 02:32:05 GMT):
I ran into the same error
MaximeLandon (Tue, 27 Jun 2017 09:13:35 GMT):
@zac Hello ! Thanks for your answer yesterday, and yees you are right I'm working with Python. But I could have been more precise on my question: I am especially interested in the functionning of the `TransactionExecutor` part, which one is not explained or described in any Doc I have read. If you either know where to find that info, or mind explain this to me, I will be grateful ! Thanks !
MaximeLandon (Tue, 27 Jun 2017 09:32:05 GMT):
And also another question, maybe @benoit.razet @jjason or @jsmitchell may answer to me :
Are there advantages to use Sawtooth with Docker rather than "with Ubuntu" ? If yes, which ones ? Thanks a lot
FlyingTiger (Tue, 27 Jun 2017 10:47:01 GMT):
Hi everyone, I had a question. When I looked into the code of STL, I found here https://github.com/hyperledger/sawtooth-core/blob/master/validator/sawtooth_validator/journal/chain.py#L203 , it only uses genesis_consensus.BlockVerifier or dev_mode_consensus.BlockVerifier, it couldn't use poet_consensus.PoetBlockVerifier, Am I wrong? If I want to use poet_consensus.PoetBlockVerifier, how should I do? Thanks.
Ayushi (Tue, 27 Jun 2017 11:17:33 GMT):
Has joined the channel.
boydjohnson (Tue, 27 Jun 2017 12:46:00 GMT):
Hi @FlyingTiger It dynamically loads the consensus module based on on-chain configuration. Check out https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_poet_smoke.yaml#L32 where the config batch is made. This can be part of the genesis block, or can be sent to the validator later.
boydjohnson (Tue, 27 Jun 2017 12:50:08 GMT):
@MaximeLandon The /validator/sawtooth_validator/execution/executor.TransactionExecutor takes a scheduler and determines which transaction processor to send the transaction to. It allows for there to be processing of batches for both block publishing and block validation at the same time.
cianx (Tue, 27 Jun 2017 13:06:42 GMT):
@benoit.razet @mattalhonte That issue is fixed in this PR: https://github.com/hyperledger/sawtooth-core/pull/652 The test script has changed it's expectation of container names. There has to be a container in the compose file with a name that matches the compose file.
LoubnaBaroudi (Tue, 27 Jun 2017 13:26:05 GMT):
Hello everyone! When I launch an Intkey transaction and it's now on the transaction list, how can I see the payload of this transaction? To check for its value for instance. Thank you
boydjohnson (Tue, 27 Jun 2017 13:36:44 GMT):
@LoubnaBaroudi There is `sawtooth state list` which will show the opaque bytes stored in state.
LoubnaBaroudi (Tue, 27 Jun 2017 13:38:20 GMT):
yes I've seen it but there's no way I can check explicitly the value or the name
LoubnaBaroudi (Tue, 27 Jun 2017 13:38:28 GMT):
?
boydjohnson (Tue, 27 Jun 2017 13:42:09 GMT):
There currently isn't that functionality for the client. This https://jira.hyperledger.org/browse/STL-277 jira issue would do that.
LoubnaBaroudi (Tue, 27 Jun 2017 13:42:46 GMT):
Ok thank you @boydjohnson ! :)
boydjohnson (Tue, 27 Jun 2017 13:50:31 GMT):
You're welcome, @LoubnaBaroudi
toddojala (Tue, 27 Jun 2017 14:29:30 GMT):
@mattalhonte We will discuss the best way to deal with those "stale images" in the docs... ;)
MaximeLandon (Tue, 27 Jun 2017 14:47:57 GMT):
Ok got it @boydjohnson ! Then another question: From what I saw the `sawtooth config proposal create` generally bears 3 different key/value parameters (family, version, encoding), but let's suppose I want to cheat on my processor and change its logic. It would be very easy as there is only 3 parameters stored on-chain, and none of them relates to the inner content of this Transaction Family.
Is there a way to add parameters to the `sawtooth config proposal create` ?
Otherwise, what is the interest of transaction processors, if they can be changed with only weak control from the validator ? Why not putting all the code on-chain ?
Thanks for the answer !
MaximeLandon (Tue, 27 Jun 2017 14:49:03 GMT):
Actually I guess we can first of all submit this `config proposal create` to the vote of other validators on the network ?
MaximeLandon (Tue, 27 Jun 2017 14:49:12 GMT):
as a first clue...
boydjohnson (Tue, 27 Jun 2017 14:51:37 GMT):
@MaximeLandon There are several on-chain settings that are consumed by the validator. Right now they are poorly documented. There is a sawtooth.settings.vote.authorized_keys that can restrict who can vote on proposed changes to config settings.
zac (Tue, 27 Jun 2017 15:09:27 GMT):
A lot of it is here: http://intelledger.github.io/transaction_family_specifications/settings_transaction_family.html
jjason (Tue, 27 Jun 2017 15:38:59 GMT):
@MaximeLandon So, I don't use docker much because recently I have been working on PoET SGX, which requires direct access to hardware. However, as I see it the advantages of using docker are the convenience it gives you.
Docker images allow for all pre-requisites to be bundled together. If you were working directly in Ubuntu, then you have to install all necessary packages, set up Python paths, etc., etc. A pre-built validator docker image, for example, would have everything configured so that all you need to do was launch the image and you have a validator running.
Docker images can also make testing easier. When testing SGX, I usually have to either launch a bunch of shells or use something like tmux so that I can manage a validator, several transaction processors, the rest API, etc. Docker can make this much easier - for example, see the PoET smoke tests in the `sawtooth-core/integration/sawtooth_integration/docker/test_poet_smoke.yaml`. It launches three validators (these include, for each, rest API, intkey transaction processor, settings transaction processor, validator registry transaction processor, and core validator) and the test application, all on a single machine allowing a small validator network to be smoke tested.
I am sure that someone much smarter about docker can chime in. This is only my rudimentary understanding and probably only scratches the surface of the benefits.
MaximeLandon (Tue, 27 Jun 2017 23:10:19 GMT):
Okay I'll look at docker and how to use Sawtooth through it, thanks for the answer @jjason and also @boydjohnson
MaximeLandon (Wed, 28 Jun 2017 00:59:42 GMT):
When I launch `docker-compose -f sawtooth-default.yaml --version "2.0" up` , I have an error `docker-compose version 1.8.0, build unknown` . Does anyone knows why and what do I need to do ?
jjason (Wed, 28 Jun 2017 01:33:30 GMT):
Paging @adamludvik
benoit.razet (Wed, 28 Jun 2017 15:58:46 GMT):
@cianx @mattalhonte I pulled this morning and `bin/run_docker_test families/supplychain/python/tests/test_tp_supplychain_python.yaml` works just fine. Thanks!
mfford (Wed, 28 Jun 2017 20:29:53 GMT):
There will be a presentation and discussion of Composer + Hyperledger Sawtooth tomorrow (Thursday, June 29th) at 10am CDT.
For those interested in participating, the Zoom meeting link is provided below:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
mattalhonte (Wed, 28 Jun 2017 21:42:12 GMT):
@benoit.razet Hey, awesome!
mattalhonte (Wed, 28 Jun 2017 22:05:41 GMT):
What ever happened to Marketplace Navigator?
kelly_ (Wed, 28 Jun 2017 22:11:19 GMT):
It hasn't been brought forward to the .8 release
kelly_ (Wed, 28 Jun 2017 22:11:33 GMT):
though I'm sure we'd welcome anyone that wants to port it :)
mattalhonte (Wed, 28 Jun 2017 22:49:56 GMT):
Hrm, I do know a bit of ClojureScript. Uh, dumb question - any suggestions on where one would start off for such a task? Like, is there a record of what in particular broke in the move to .8?
kelly_ (Wed, 28 Jun 2017 22:51:38 GMT):
we'll probably the first thing is that we haven't ported the marketplace smart contract to .8
kelly_ (Wed, 28 Jun 2017 22:51:56 GMT):
thought @pschwarz may have some thoughts on some UI activities related to .8
mattalhonte (Wed, 28 Jun 2017 22:55:09 GMT):
Just so I've got it straight, my main goal is to make a sweet UI for a demo network like this: https://provenance.sawtooth.me/ Except, y'know, by editing existing templates instead of making it from scratch.
kelly_ (Wed, 28 Jun 2017 22:55:20 GMT):
got it
mattalhonte (Wed, 28 Jun 2017 22:55:32 GMT):
Helping port the marketplace Smart Contracts to .8 would be the most direct route to that?
kelly_ (Wed, 28 Jun 2017 22:55:50 GMT):
off the top of my head one possible route would be to modify the marketplace explorer to interact with the supply chain transaction family
kelly_ (Wed, 28 Jun 2017 22:56:03 GMT):
@cianx created the transaction family and is working on some rest API improvements
kelly_ (Wed, 28 Jun 2017 22:56:23 GMT):
@pschwarz created the marketplace explorer that integrated with the marketplace transaction family
kelly_ (Wed, 28 Jun 2017 22:56:51 GMT):
the .7 architecture and APIs were quite different I suspect, but @pschwarz may have some ideas to get you started
kelly_ (Wed, 28 Jun 2017 22:57:39 GMT):
Peter may be home for the day but hopefully he has some guidance for you
mattalhonte (Wed, 28 Jun 2017 22:57:52 GMT):
Awesome, thanks!
LoubnaBaroudi (Thu, 29 Jun 2017 09:05:15 GMT):
Is there a possibility to decode the data bytes given by the command sawtooth state show when it's a transaction I wrote and submitted myself?
LoubnaBaroudi (Thu, 29 Jun 2017 09:48:40 GMT):
Or is there a possibility to have messages in the processor just like InvalidTransaction for instance but without ending the process? Thank you!
pschwarz (Thu, 29 Jun 2017 13:12:08 GMT):
@mattalhonte I'm working on an example using the supply chain family, which incorporates the new way to consume state deltas into an off-chain database. This was something that was handled in a very proof-of-concept way in 0.7, but now should be a bit more stream-lined.
pschwarz (Thu, 29 Jun 2017 13:31:19 GMT):
@LoubnaBaroudi As far as the first question goes, `sawtooth state show` doesn't have any knowledge of how to decode the actual state values, really it can just tell you that the state was set, and give you the bytes. You can filter on address (e.g. only show the state entries that you created via your transaction processor). If you want to actually view the content of state, you'll need to build your own tool for that. A couple of examples would be a web page that calls out to the sawtooth rest api, and decodes the information, or a CLI tool that can print the values to the console.
There is an example of the former at https://github.com/IntelLedger/omi-summer-lab.
An example of the later is in the sawtooth-core repo, under the `sdk/examples/xo_python`
pschwarz (Thu, 29 Jun 2017 13:31:36 GMT):
Not entirely sure I understand your second question
LoubnaBaroudi (Thu, 29 Jun 2017 13:35:38 GMT):
Ok thank you I will look at it! I wanted my processor to raise some messages to keep me inform of the actual state of the transaction. Messages I would wrote myself in handler.py. But the only things I found are Error messages
pschwarz (Thu, 29 Jun 2017 13:43:02 GMT):
Ah, I see - you could just use the standard python logging for that. The log level might need to be increased in your implementation
benoit.razet (Thu, 29 Jun 2017 14:06:55 GMT):
I am reviewing the code for supplychain, I could not find a field in the Record to store information related to a good in the physical world. So I am guessing the intent is to store this information offchain, and the smart contract is controlling who can access the record. Or perhaps the idea is to extend the supplychain transaction processor to handle information on chain. Am I on the right path?
pschwarz (Thu, 29 Jun 2017 14:07:17 GMT):
@cianx :point_up:
zac (Thu, 29 Jun 2017 14:25:58 GMT):
@LoubnaBaroudi
> keep me inform of the actual state of the transaction
You are saying you want to get periodic updates while the Transaction is still working it's way through your processor?
zac (Thu, 29 Jun 2017 14:26:21 GMT):
i.e. Step 1 is complete . . . Step 2 is complete . . . etc?
zac (Thu, 29 Jun 2017 14:26:21 GMT):
i.e. TP handle step 1 is complete . . . TP handle step 2 is complete . . . etc?
LoubnaBaroudi (Thu, 29 Jun 2017 14:31:09 GMT):
yes kind of @zac
LoubnaBaroudi (Thu, 29 Jun 2017 14:32:31 GMT):
If I take for instance intkey, If I make an 'inc' transaction I would like to have : TP handle value was x ... TP handle value is now x+y
LoubnaBaroudi (Thu, 29 Jun 2017 14:33:50 GMT):
things like [ INFO CORE]
zac (Thu, 29 Jun 2017 14:36:55 GMT):
Hrmmm
zac (Thu, 29 Jun 2017 14:37:10 GMT):
Correct me if I'm wrong, but I think what can come out the TP is pretty limited
boydjohnson (Thu, 29 Jun 2017 14:37:11 GMT):
@LoubnaBaroudi https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/xo_python/sawtooth_xo/processor/handler.py#L223 This is an example of logging in xo, which displays the current game state.
zac (Thu, 29 Jun 2017 14:37:23 GMT):
You can set the data
zac (Thu, 29 Jun 2017 14:37:33 GMT):
And I could save a log in there I suppose
zac (Thu, 29 Jun 2017 14:37:33 GMT):
And you could save a log in there I suppose
zac (Thu, 29 Jun 2017 14:37:59 GMT):
But you are sending back either the data to be saved or an error message
zac (Thu, 29 Jun 2017 14:38:17 GMT):
On the Client side, you can do things like check values
zac (Thu, 29 Jun 2017 14:38:29 GMT):
You could also break it down into multiple transactions potentially
LoubnaBaroudi (Thu, 29 Jun 2017 14:39:07 GMT):
I think the link @boydjohnson gave me will help
zac (Thu, 29 Jun 2017 14:39:25 GMT):
yes, you can also log whatever
jsmitchell (Thu, 29 Jun 2017 14:39:30 GMT):
the current assumption is that apply() is a short-duration activity and that it either succeeds or fails
zac (Thu, 29 Jun 2017 14:39:38 GMT):
if that works for your use case
jsmitchell (Thu, 29 Jun 2017 14:39:44 GMT):
it is async to the client
jsmitchell (Thu, 29 Jun 2017 14:40:17 GMT):
logging in the tp is the right thing to do for the developer to get insight into what is happening
boydjohnson (Thu, 29 Jun 2017 14:40:31 GMT):
Also one thing to keep in mind is that what is being logged in apply may not be current for the chain, it could be done in block publishing for a block that never gets added to the chain.
toddojala (Thu, 29 Jun 2017 14:41:10 GMT):
@benoit.razet The record.proto file has a field, "identifier", that is the natural key of the record, serial number, or attached sensor info. Does that help?
LoubnaBaroudi (Thu, 29 Jun 2017 14:42:21 GMT):
I will try and see if it works for my case
benoit.razet (Thu, 29 Jun 2017 14:51:29 GMT):
I see the identifier is set when a record is created with the function `_record_create()`
benoit.razet (Thu, 29 Jun 2017 14:55:57 GMT):
but I don't see where the "identifier" is changed
benoit.razet (Thu, 29 Jun 2017 15:05:01 GMT):
@toddojala if I take the example of the identifier of the record being a sensor identifier. This identifier would indicate where to find the information, or the information itself (e.g. temperature)?
GhadiShayban (Thu, 29 Jun 2017 15:09:04 GMT):
Is there a description of the TX signing algorithm that is more detailed than https://intelledger.github.io/_autogen/txn_submit_tutorial.html#building-the-transaction and less detailed than reading the source?
I am trying to work STL-461 and cross validate the signing / verification between Python <-> JDK <-> Go <-> JavaScript SDKs
GhadiShayban (Thu, 29 Jun 2017 15:09:04 GMT):
Is there a description of the TX signing algorithm that is more detailed than https://intelledger.github.io/_autogen/txn_submit_tutorial.html#sign-the-header and less detailed than reading the source?
I am trying to work STL-461 and cross validate the signing / verification between Python <-> JDK <-> Go <-> JavaScript SDKs
GhadiShayban (Thu, 29 Jun 2017 15:10:13 GMT):
It looks like it's using the Bitcoin "compact signature" scheme of concat(32 bytes R + 32 Bytes S) ... but it's unclear whether to hash the message once or hash it twice
kelly_ (Thu, 29 Jun 2017 16:03:22 GMT):
@Dan ^^
Dan (Thu, 29 Jun 2017 16:32:47 GMT):
hi @GhadiShayban it should just be once if I understand your question right. some ECDSA Sign functions take the raw message and hash it for you, and others expect the hash.
Dan (Thu, 29 Jun 2017 16:33:49 GMT):
so if the library you are using looks like this `sign(key, message)` assume it is hashing for you and you should not also hash.
zac (Thu, 29 Jun 2017 16:34:04 GMT):
@GhadiShayban I'd be curious to hear what exactly you're using and how it is breaking
zac (Thu, 29 Jun 2017 16:35:16 GMT):
I wrote that documentation, and only understand half of what is going on under the hood myself. The idea behind that doc though is that it is enough for someone in your position to create a valid signature without having to get into the weeds.
zac (Thu, 29 Jun 2017 16:35:16 GMT):
I wrote that documentation, and only understand half of what is going on under the hood myself. But the idea behind that doc is that it's enough for someone in your position to create a valid signature in any language without understanding _every_ aspect of the process.
zac (Thu, 29 Jun 2017 16:35:51 GMT):
I only actually created signatures in Python and JS though, so there may be peculiarities in other languages I didn't anticipate.
sstone1 (Thu, 29 Jun 2017 16:37:28 GMT):
@here great call on Composer + Sawtooth today, here are the slides that I presented: https://www.slideshare.net/SimonStone8/introduction-to-hyperledger-composer
sstone1 (Thu, 29 Jun 2017 16:37:51 GMT):
Here's our website along with the tutorials/install guides: https://hyperledger.github.io/composer/
Dan (Thu, 29 Jun 2017 16:39:20 GMT):
@sstone1 thanks again for presenting!
tkuhrt (Thu, 29 Jun 2017 16:41:37 GMT):
And the video should now be available in both the Sawtooth and Composer Meeting Recordings folders
sstone1 (Thu, 29 Jun 2017 16:42:57 GMT):
great, and np :)
GhadiShayban (Thu, 29 Jun 2017 18:02:40 GMT):
@zac i want TX signing to be correct/consistent across all SDKs. Is a message byte[] or a utf-8 string, do you double hash...etc. you necessarily have to care about _every_ aspect, otherwise you'll spend a couple days debugging why this particular opaque string is not the correct opaque string =)
GhadiShayban (Thu, 29 Jun 2017 18:04:47 GMT):
my next task was to transplant the python test strings (pubkeys, etc.) into the go sdk to see if they check
GhadiShayban (Thu, 29 Jun 2017 18:06:11 GMT):
I'm gonna punt on implementing the Java signing until I can figure out whether the currently implemented sdks are consistent
GhadiShayban (Thu, 29 Jun 2017 18:08:15 GMT):
the old joke about AWS APIs resonates with pub key signing: just keep hitting it until it stops returning 400
Dan (Thu, 29 Jun 2017 18:11:56 GMT):
Hi @GhadiShayban was my explanation on the hashing clear?
If what you want to sign is a hash then you pass that into your signing API as the message ... `sign(key, message=tx_header_hash)`
Caveat is if your signing api is expecting the message hash rather than the message. In which case you would need what looks like a hash of a hash.
If you want to point me to the library you are using I can be more clear.
GhadiShayban (Thu, 29 Jun 2017 18:13:33 GMT):
thanks Dan -- absolutely clear. Yesterday I was trying to get something signed in Python to be verified on the JVM, and v.v.
GhadiShayban (Thu, 29 Jun 2017 18:13:50 GMT):
(so outside of a transaction, just signing a string)
zac (Thu, 29 Jun 2017 18:26:31 GMT):
Yeah, dealing with signature issues is a huge pain
zac (Thu, 29 Jun 2017 18:26:42 GMT):
And every library seems to implement things a little differently
GhadiShayban (Thu, 29 Jun 2017 18:26:50 GMT):
yeah not fun
zac (Thu, 29 Jun 2017 18:27:05 GMT):
Let me know if you discover anything that you think should be mentioned in that document but isn't
GhadiShayban (Thu, 29 Jun 2017 18:27:36 GMT):
seems like the bitcoin "compact sig" is what the underlying python lib is using... hopefully I can give back with a PR
zac (Thu, 29 Jun 2017 18:27:42 GMT):
And obviously, if there are any signing inconsistencies between the SDKs, we definitely want to push bug fixes for those
MaximeLandon (Thu, 29 Jun 2017 18:27:43 GMT):
Message Attachments
GhadiShayban (Thu, 29 Jun 2017 18:27:46 GMT):
all the bitcoin "standards" are super baroque
MaximeLandon (Thu, 29 Jun 2017 18:27:49 GMT):
Hello everyone, how can I solve this problem ? Thnaks
zac (Thu, 29 Jun 2017 18:28:13 GMT):
yes, "compact sig" is accurate
zac (Thu, 29 Jun 2017 18:28:32 GMT):
Though I am also not super clear on what that is, or how it differs from a non-compact sig
GhadiShayban (Thu, 29 Jun 2017 18:28:54 GMT):
64 or 65 bytes vs. 70 71 72 bytes on standard ECDSA
kelly_ (Thu, 29 Jun 2017 18:29:04 GMT):
that's the DER encoding right?
GhadiShayban (Thu, 29 Jun 2017 18:29:09 GMT):
the latter, yeah
zac (Thu, 29 Jun 2017 18:30:06 GMT):
Yeah, I tried to mention byte-lengths as much as possible in that document since there seems to be four different terms and loose specifications for everything
zac (Thu, 29 Jun 2017 18:30:22 GMT):
Byte-lengths feels nice and consistent and confirmable
pschwarz (Thu, 29 Jun 2017 18:30:36 GMT):
@MaximeLandon the `test_poet_smoke.yaml` is for local and CI server testing, so it's not relying on published docker images, but locally built ones. You would need to run `./bin/build_all` for that to work
boydjohnson (Thu, 29 Jun 2017 18:31:18 GMT):
@MaximeLandon and then `./bin/run_docker_test integration.....`
GhadiShayban (Thu, 29 Jun 2017 18:31:59 GMT):
@kelly_ @zac all of this is new to me, but is there a particular advantage to using bitcoin's variants vs other signing schemes? i don't know the archaeology, besides that one of the schemes allows you to extract the pubkey from the signature
zac (Thu, 29 Jun 2017 18:32:52 GMT):
My answer is just going to be "because that is what the library I was using output by default"
zac (Thu, 29 Jun 2017 18:33:11 GMT):
Some of the folks who worked more directly with the signing stuff may have better answers
MaximeLandon (Thu, 29 Jun 2017 18:33:45 GMT):
Thanks @pschwarz and @boydjohnson for your answers, however I have never used this `./bin/buil_all` command, where am I supposed to execute it ? Thanks a lot
zac (Thu, 29 Jun 2017 18:33:50 GMT):
I will say it is really tough to get away from the BitCoin standards in this space. Almost all existing libraries are designed with BC in mind.
boydjohnson (Thu, 29 Jun 2017 18:35:14 GMT):
If you have the hyperledger/sawtooth-core repo, it would be the file at sawtooth-core/bin/build_all. You should be in sawtooth-core.
MaximeLandon (Thu, 29 Jun 2017 18:35:42 GMT):
okkkkayyyy thanks a lot !!!
MaximeLandon (Thu, 29 Jun 2017 18:41:27 GMT):
Message Attachments
MaximeLandon (Thu, 29 Jun 2017 18:42:12 GMT):
What can I do about that ? If you may explain me briefly what is the "context", sorry I'm new to Docker...
pschwarz (Thu, 29 Jun 2017 18:43:04 GMT):
What OS are you on?
MaximeLandon (Thu, 29 Jun 2017 18:43:13 GMT):
linux
MaximeLandon (Thu, 29 Jun 2017 18:43:19 GMT):
ubuntu
boydjohnson (Thu, 29 Jun 2017 18:46:59 GMT):
I wouldn't do it from bin, I think that is why docker is getting confused. `cd ..` to sawtooth-core and then `./bin/build_all`.
MaximeLandon (Thu, 29 Jun 2017 19:00:59 GMT):
Thanks, it works
MaximeLandon (Thu, 29 Jun 2017 19:03:12 GMT):
By the way I have a Docker directory for my projects, would it have worked if I had done ` ../Sawtooth/bin/build_all` ?
MaximeLandon (Thu, 29 Jun 2017 19:03:29 GMT):
(Docker is the home directory like Sawtooth)
boydjohnson (Thu, 29 Jun 2017 19:04:33 GMT):
Hmm, not sure.
MaximeLandon (Thu, 29 Jun 2017 19:06:09 GMT):
And let me ask again a question left unanswered: From what I saw the `sawtooth config proposal create` generally bears 3 different key/value parameters (family, version, encoding), but let's suppose I want to cheat on my processor and change its logic. It would be very easy as there is only 3 parameters stored on-chain, and none of them relates to the inner content of this Transaction Family.
Is there a way to add parameters to the `sawtooth config proposal create` ?
Otherwise, what is the interest of transaction processors, if they can be changed with only weak control from the validator ? Why not putting all the code on-chain ?
Thanks for the answer !
MaximeLandon (Thu, 29 Jun 2017 19:07:07 GMT):
And more broadly, what is the security around the transaction processor ? or around the link processor-validator...
boydjohnson (Thu, 29 Jun 2017 19:09:21 GMT):
Ah, so what you are proposing is that what the validator itself consumes from the on-chain settings would be stored on-chain as well. Would this just be for which txn processors are supported by the validator?
boydjohnson (Thu, 29 Jun 2017 19:11:53 GMT):
https://jira.hyperledger.org/browse/STL-297 This issue is around designing permissioning for connecting with a validator. Right now it is assumed that whoever is setting up a node has control over networking rules on the server and might put the txn_processor on the same server as the validator.
MaximeLandon (Thu, 29 Jun 2017 19:13:12 GMT):
Well I mean that -from my understanding of sawtooth- the validator doesn't know what is the transaction processor logic, it just knows under which format transaction data is supposed to arrive, and assumes that this data is "correct" from the transaction processor point of view.
Which means that, in the case where there are only 3 parameters in the sawtooth config proposal create, I -malicious cracker- can modify the logic of the processor without changing these three parameters, so as not to submit another config proposal that would have to be accepted by potential other validators.
AlexanderGordon (Thu, 29 Jun 2017 19:13:50 GMT):
Has joined the channel.
AlexanderGordon (Thu, 29 Jun 2017 19:13:55 GMT):
hi
AlexanderGordon (Thu, 29 Jun 2017 19:14:10 GMT):
sawtooth can be run on private blockchain?
MaximeLandon (Thu, 29 Jun 2017 19:14:14 GMT):
Well, yet if I understood you correctly, that doesn't solve the problem.
MaximeLandon (Thu, 29 Jun 2017 19:14:52 GMT):
Because if you can get inside the server I guess you still can modify the transaction processor
boydjohnson (Thu, 29 Jun 2017 19:14:53 GMT):
Could you describe the scenario more completely?
MaximeLandon (Thu, 29 Jun 2017 19:14:57 GMT):
okay
zac (Thu, 29 Jun 2017 19:16:49 GMT):
@AlexanderGordon What is your definition of a private blockchain?
AlexanderGordon (Thu, 29 Jun 2017 19:17:18 GMT):
one run in house
AlexanderGordon (Thu, 29 Jun 2017 19:18:17 GMT):
from what I see behind all words - its simply a software for blockchain contracts?
zac (Thu, 29 Jun 2017 19:18:28 GMT):
Yep
zac (Thu, 29 Jun 2017 19:18:33 GMT):
You can deploy it however you like
zac (Thu, 29 Jun 2017 19:18:55 GMT):
There isn't one Sawtooth network like with Bitcoin or Ethereum
AlexanderGordon (Thu, 29 Jun 2017 19:19:54 GMT):
cool
zac (Thu, 29 Jun 2017 19:21:31 GMT):
You could build a big cryptocurrency network on top of Sawtooth if you wanted. But you can also do something like an internal banking network, that tracks exchanges between different banks that each run their own validator node which is not publicly visible.
AlexanderGordon (Thu, 29 Jun 2017 19:21:40 GMT):
oki
AlexanderGordon (Thu, 29 Jun 2017 19:22:01 GMT):
and how is security assured?
zac (Thu, 29 Jun 2017 19:22:13 GMT):
That is a big question
zac (Thu, 29 Jun 2017 19:22:36 GMT):
You mean, how is it kept private?
zac (Thu, 29 Jun 2017 19:22:59 GMT):
Or how is the blockchain kept secure/valid?
boydjohnson (Thu, 29 Jun 2017 19:23:22 GMT):
The three network cases are often called public, permissioned, and private blockchains. STL-297 that I posted above has a design task for on-chain permissioning.
MaximeLandon (Thu, 29 Jun 2017 19:23:50 GMT):
I have:
- A validator
- An intkey txn processor (let's imagine it is a bank software, maintaining bank accounts)
- A declaration of this processor to the validator, via the `sawtooth config proposal create .....{family, version, encoding}`
(Validator and processor can either be on two different machines, or on the same)
In this case, the validator accepts blocks from the transaction processor with only one concern: is the message format the good one ?
This is because the "correct" character of a transaction is determined by the transaction processor.
AlexanderGordon (Thu, 29 Jun 2017 19:23:57 GMT):
zac how is blockchain kept secure
zac (Thu, 29 Jun 2017 19:24:08 GMT):
_magic_
MaximeLandon (Thu, 29 Jun 2017 19:24:09 GMT):
No actually @boydjohnson I found the answer by myself when writing
AlexanderGordon (Thu, 29 Jun 2017 19:24:10 GMT):
from transactions been overwriten
AlexanderGordon (Thu, 29 Jun 2017 19:24:30 GMT):
zac in btc you need to maintain a lot of hash to prevent overwriting
AlexanderGordon (Thu, 29 Jun 2017 19:24:41 GMT):
how its solve in sawtooth?
zac (Thu, 29 Jun 2017 19:25:05 GMT):
I am not the person to give a thoroughly technical answer to this
zac (Thu, 29 Jun 2017 19:25:09 GMT):
But it is similar
MaximeLandon (Thu, 29 Jun 2017 19:25:12 GMT):
Because if you add a valid action like erase, that is possible if ou have access to the processor. But then you would have to get various keys for sending transactions on the good addresses, etc etc
zac (Thu, 29 Jun 2017 19:25:37 GMT):
Hashes are maintained, everything is signed
AlexanderGordon (Thu, 29 Jun 2017 19:25:50 GMT):
zac also whoever supplies computational power will want $$ for it
AlexanderGordon (Thu, 29 Jun 2017 19:26:01 GMT):
now I can transact via SEPA and likes very cheaply
MaximeLandon (Thu, 29 Jun 2017 19:26:06 GMT):
And you would have a very short time, because the firm may able to controlvery quickly if files have been modified, and could very quickly reconfigure a new transaction processor and remove the old one.
zac (Thu, 29 Jun 2017 19:26:37 GMT):
Ah, so unlike you bitcoin you do not need Proof of Work algorithms for consensus
zac (Thu, 29 Jun 2017 19:27:14 GMT):
Sawtooth features pluggable consensus, so you _could_ use that if you wanted, but the most interesting option is Proof of Elapsed Time, or PoET
Dan (Thu, 29 Jun 2017 19:27:20 GMT):
@GhadiShayban @zac short answer is we went with compact signature because they were small.
Largely the roots of that path were from the original research which started looking at bitcoin. That led up to present day where we were still using the bitcoin curve, and then a fast library from the bitcoin people for that curve. And then from that the kind of signature formats that were options compact was the best. We decided against using PK recovery in this version so that lopped off one format variation too where you don't need to hang onto some extra bits that let you help recover the pubkey.
AlexanderGordon (Thu, 29 Jun 2017 19:27:39 GMT):
hows does PoET works?
MaximeLandon (Thu, 29 Jun 2017 19:27:40 GMT):
So actually the blockchain itself is not really providing good security around the transaction processor, it seems that the complexity of the structure (firm, bank, governement, whatever) would the real protection against an attack on the transaction processor
zac (Thu, 29 Jun 2017 19:27:59 GMT):
Once again, not the guy to get too technical here, but basically you are replacing the complex hashing function with a hardware solution
MaximeLandon (Thu, 29 Jun 2017 19:28:05 GMT):
@boydjohnson I hope I am right on what I just said...
zac (Thu, 29 Jun 2017 19:28:15 GMT):
validators wait a random amount of time before claiming a block
zac (Thu, 29 Jun 2017 19:28:28 GMT):
that wait time is signed by the hardware, the Trusted Execution Environment
AlexanderGordon (Thu, 29 Jun 2017 19:28:58 GMT):
hmm
zac (Thu, 29 Jun 2017 19:29:01 GMT):
This verifies the validator actually waited, and didn't just claim the block after 1ms
zac (Thu, 29 Jun 2017 19:29:17 GMT):
Whichever validator happens to go first, gets the block
zac (Thu, 29 Jun 2017 19:29:33 GMT):
You can also do some statistical modeling to complement the hardware signature
AlexanderGordon (Thu, 29 Jun 2017 19:29:46 GMT):
sounds fun
AlexanderGordon (Thu, 29 Jun 2017 19:29:47 GMT):
:)
zac (Thu, 29 Jun 2017 19:29:55 GMT):
if one validator is claiming all the blocks, they are bad
zac (Thu, 29 Jun 2017 19:29:59 GMT):
but anyway
AlexanderGordon (Thu, 29 Jun 2017 19:30:04 GMT):
it can replace swift for example
zac (Thu, 29 Jun 2017 19:30:07 GMT):
this means there is no significant energy cost
AlexanderGordon (Thu, 29 Jun 2017 19:30:11 GMT):
for participating banks
AlexanderGordon (Thu, 29 Jun 2017 19:30:35 GMT):
if some banks choose to issue own e currencies they can use sawtooth to transact :)
AlexanderGordon (Thu, 29 Jun 2017 19:30:46 GMT):
bypassing basel and likes :)
boydjohnson (Thu, 29 Jun 2017 19:30:49 GMT):
@MaximeLandon For the transaction processor, which is just a stateless process that validates txns and has some access to state on the validator, I think you are right, you would have to trust your hardware. You don't have to trust other people's hardware, and that is where the blockchain and consensus comes in.
zac (Thu, 29 Jun 2017 19:30:50 GMT):
yeah
AlexanderGordon (Thu, 29 Jun 2017 19:31:02 GMT):
interesting
zac (Thu, 29 Jun 2017 19:31:38 GMT):
really, anywhere you have a monolithic mediator negotiating between different parties that don't trust each other
AlexanderGordon (Thu, 29 Jun 2017 19:31:39 GMT):
for a momen in my view biggest weakest points of all crypto coins, they are not allowed to be backed by fiat directly, 1:1
AlexanderGordon (Thu, 29 Jun 2017 19:31:48 GMT):
moment
zac (Thu, 29 Jun 2017 19:31:48 GMT):
you could potentially replace it with a blockchain
zac (Thu, 29 Jun 2017 19:31:59 GMT):
and that blockchain could be Sawtooth
AlexanderGordon (Thu, 29 Jun 2017 19:32:04 GMT):
alibaba coiuld invest in it :)
AlexanderGordon (Thu, 29 Jun 2017 19:32:08 GMT):
*could
AlexanderGordon (Thu, 29 Jun 2017 19:32:20 GMT):
to add it to their alipay solution
zac (Thu, 29 Jun 2017 19:33:03 GMT):
sure, potentially
AlexanderGordon (Thu, 29 Jun 2017 19:34:10 GMT):
so now banks transact via clearing house - central bank
AlexanderGordon (Thu, 29 Jun 2017 19:34:15 GMT):
they can use sawtooth instead?
AlexanderGordon (Thu, 29 Jun 2017 19:34:23 GMT):
not saying they would but :)
AlexanderGordon (Thu, 29 Jun 2017 19:34:37 GMT):
also trading shares
AlexanderGordon (Thu, 29 Jun 2017 19:34:47 GMT):
to guarantee counterparty perfomance
zac (Thu, 29 Jun 2017 19:36:44 GMT):
yes, I think that is the big potential
zac (Thu, 29 Jun 2017 19:36:58 GMT):
blockchains can force trust algorithmically
zac (Thu, 29 Jun 2017 19:37:06 GMT):
you don't need middlemen to mediate
zac (Thu, 29 Jun 2017 19:38:54 GMT):
So for anyone who relies on something like a big central bank, there is potentially a lot of autonomy and profit to be gained by getting rid of the mediator and going with a distributed ledger like Sawtooth
AlexanderGordon (Thu, 29 Jun 2017 19:39:02 GMT):
yes
AlexanderGordon (Thu, 29 Jun 2017 19:39:13 GMT):
I say penny stocks
zac (Thu, 29 Jun 2017 19:39:16 GMT):
You can imagine something like real estate sales too
AlexanderGordon (Thu, 29 Jun 2017 19:39:17 GMT):
its better than ICO :)
AlexanderGordon (Thu, 29 Jun 2017 19:39:23 GMT):
real estate sales no
zac (Thu, 29 Jun 2017 19:39:29 GMT):
Where normally a bank holds everything in escrow while the sale is resolved
AlexanderGordon (Thu, 29 Jun 2017 19:39:38 GMT):
for 1 reason - person under duress may sign contract to sell
zac (Thu, 29 Jun 2017 19:39:53 GMT):
Potentially the escrow process could be replaced
AlexanderGordon (Thu, 29 Jun 2017 19:40:06 GMT):
escrow yes
AlexanderGordon (Thu, 29 Jun 2017 19:40:29 GMT):
I would say transfer of company shares and real estate should still be done in person
AlexanderGordon (Thu, 29 Jun 2017 19:40:41 GMT):
so u cant be kidnapped and forced to sign all over
AlexanderGordon (Thu, 29 Jun 2017 19:40:42 GMT):
:)
zac (Thu, 29 Jun 2017 19:41:00 GMT):
Maybe
zac (Thu, 29 Jun 2017 19:41:07 GMT):
I'm not sure how much of a risk that is
zac (Thu, 29 Jun 2017 19:41:21 GMT):
Potentially a court could order it be signed back as well
zac (Thu, 29 Jun 2017 19:41:47 GMT):
The chain can't be undone, but you can submit a transaction which reverses the effects of a previous transactions
AlexanderGordon (Thu, 29 Jun 2017 19:41:54 GMT):
yep
MaximeLandon (Thu, 29 Jun 2017 19:42:38 GMT):
@boydjohnson I don't understand, if that can happen to my processor, how could I trust other's one ?
zac (Thu, 29 Jun 2017 19:44:52 GMT):
@MaximeLandon You can't. That's why you're using a blockchain :wink:
boydjohnson (Thu, 29 Jun 2017 19:45:27 GMT):
Well, if you trust your own, then the blockchain and consensus should be able to weed out validators with bad txn processors. If you don't trust your txn processor, then you really can't trust your own validator.
MaximeLandon (Thu, 29 Jun 2017 19:46:21 GMT):
well if someone else can change its transaction processor and my validator not to see it, the state I share with him is endangered
MaximeLandon (Thu, 29 Jun 2017 19:47:33 GMT):
No actually let me think about it, I may be wrong
zac (Thu, 29 Jun 2017 19:47:40 GMT):
Looking at the network as a whole, you would have to corrupt 51% of the transaction processors
boydjohnson (Thu, 29 Jun 2017 19:47:47 GMT):
The state hash at the end of processing a block is stored on the block header, so you can make state assertions: that your state is the same as their state, or if it is isn't there is a problem.
zac (Thu, 29 Jun 2017 19:48:07 GMT):
Which maybe could be done through some sort of compromised distribution service or something
zac (Thu, 29 Jun 2017 19:48:26 GMT):
It would be quite the hack though
MaximeLandon (Thu, 29 Jun 2017 19:52:32 GMT):
Ok let me give you an example (@boydjohnson has the beggining of the story):
If there are 2 validators and only one of them is connected to an intkey processor, that this processor is known from both validators (thanks to `proposal create`),
and that now the processor logic is changed without having to modify the parameters of the `config proposal create`, then validators will accepts peacefully all the transactions submitted, and the nude validator will then share a state that he may not want
MaximeLandon (Thu, 29 Jun 2017 19:53:16 GMT):
and by "want", I mean you rely on the fact that the processor is not corrupted
zac (Thu, 29 Jun 2017 19:54:34 GMT):
all validators must have all transaction processors locally
agunde (Thu, 29 Jun 2017 19:54:41 GMT):
Each validator needs to have its own intkey transaction processor
MaximeLandon (Thu, 29 Jun 2017 19:54:50 GMT):
but that is not convenient at all
boydjohnson (Thu, 29 Jun 2017 19:54:57 GMT):
So @MaximeLandon is that a validator without intkey when intkey is specified? If so it will pause in all processing of txns until it has an intkey processor attached. If the settings are changed so that intkey is no longer required, all intkey txns will be dropped by the validators.
MaximeLandon (Thu, 29 Jun 2017 19:55:04 GMT):
it kills all the beauty of sawtooth
zac (Thu, 29 Jun 2017 19:55:09 GMT):
How can you trust a transaction processed by someone else?
MaximeLandon (Thu, 29 Jun 2017 19:55:35 GMT):
okkkkkkkkkkkkkkkkk
MaximeLandon (Thu, 29 Jun 2017 19:55:39 GMT):
I understoooood
MaximeLandon (Thu, 29 Jun 2017 19:56:04 GMT):
but, that makes the system not convenient at all
zac (Thu, 29 Jun 2017 19:56:52 GMT):
If you are able to trust the other validators than a blockchain probably is a less convenient solution
zac (Thu, 29 Jun 2017 19:57:03 GMT):
You could just use a database
MaximeLandon (Thu, 29 Jun 2017 19:57:12 GMT):
because if you need to check every single transaction (which may be passing through a lot of code, in a complete application structure), then the validator package you have to bear is way too big and/or slow isn't it ?
zac (Thu, 29 Jun 2017 19:57:27 GMT):
The problem blockchains solve is a lack of trust between parties
zac (Thu, 29 Jun 2017 19:58:20 GMT):
Which comes with a certain amount of overhead
MaximeLandon (Thu, 29 Jun 2017 19:58:37 GMT):
(I smiled)
MaximeLandon (Thu, 29 Jun 2017 19:59:40 GMT):
But then this means running an eco system of validators and all the firm structure around them (represented by txn processors) will be very heavy
zac (Thu, 29 Jun 2017 20:00:00 GMT):
Perhaps
zac (Thu, 29 Jun 2017 20:00:12 GMT):
But I think the CPU time will be much cheaper than the people time it replaces
MaximeLandon (Thu, 29 Jun 2017 20:00:18 GMT):
Isn't it a major brake to scalability ?
MaximeLandon (Thu, 29 Jun 2017 20:00:36 GMT):
Well that is right
boydjohnson (Thu, 29 Jun 2017 20:00:53 GMT):
There is some thought on processing txns within sgx and then emitting a signature if it is valid. Then other validators would only need to process the signature verification.
AlexanderGordon (Thu, 29 Jun 2017 20:01:11 GMT):
it seems like an amazing tech
boydjohnson (Thu, 29 Jun 2017 20:01:17 GMT):
In general blockchains are all processing each txn on each node.
adamludvik (Thu, 29 Jun 2017 20:01:47 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=54eJvxdSXQuTcgRrn) @zac @MaximeLandon This is true at the moment, but may not always be true. @amundson and I have been doing some brainstorming around heterogenous networks.
adamludvik (Thu, 29 Jun 2017 20:02:12 GMT):
Where not every validator needs to run every transaction processor. But that is a ways off still.
AlexanderGordon (Thu, 29 Jun 2017 20:02:39 GMT):
is there an image to show transactions flow?
to illustrate entire concept
zac (Thu, 29 Jun 2017 20:06:23 GMT):
I don't know of one off the top of my head. I think there are some architecture diagrams out there somewhere . . .
boydjohnson (Thu, 29 Jun 2017 20:09:00 GMT):
I think this is a decent diagram at a high level, but it isn't txn/batch specific: https://www.altoros.com/blog/wp-content/uploads/2017/02/Hyperledger-Intel-Sawtooth-Lake-Transaction-Family.jpg
zac (Thu, 29 Jun 2017 20:11:33 GMT):
So on that diagram, the left side of the Network is transactions and blocks coming in from other validators, and the right side is transactions submitted locally?
MaximeLandon (Thu, 29 Jun 2017 20:12:10 GMT):
Well then @adamludvik would you have the courage to read a bit my questions above ? I would be grateful !!! The question doesn't leave me
boydjohnson (Thu, 29 Jun 2017 20:12:34 GMT):
You can get batches from the wider network. The left side is blocks from the network, and the right side is batches for publishing.
MaximeLandon (Thu, 29 Jun 2017 20:13:38 GMT):
an to give me your mind @adamludvik actually that is what I want :)
kelly_ (Thu, 29 Jun 2017 20:38:45 GMT):
@MaximeLandon have you looked into 'sharding'
kelly_ (Thu, 29 Jun 2017 20:39:24 GMT):
sharding is one mechanism where not everyone validates every transaction, but just some %
MaximeLandon (Thu, 29 Jun 2017 20:39:45 GMT):
tell me more ! :D
kelly_ (Thu, 29 Jun 2017 20:39:50 GMT):
the other option is to leverage trusted hardware, so the the transaction is run in a trusted environement, and a "proof" is delievered to the rest of the network
MaximeLandon (Thu, 29 Jun 2017 20:39:54 GMT):
seems smart
kelly_ (Thu, 29 Jun 2017 20:40:12 GMT):
this is similar to zero-knowledge proofs, but focuses on trusted hardware instead of advanced cryptography
MaximeLandon (Thu, 29 Jun 2017 20:41:11 GMT):
yes but doesn't change the problem, just adds a new one which is the need for hardware (another dictatorship from chips firms)
MaximeLandon (Thu, 29 Jun 2017 20:41:22 GMT):
I'll look at sharding
kelly_ (Thu, 29 Jun 2017 20:41:31 GMT):
there are a number of trusted hardware solutions
AlexanderGordon (Thu, 29 Jun 2017 20:41:46 GMT):
why dictatorship?
kelly_ (Thu, 29 Jun 2017 20:41:51 GMT):
ARM TrustZone, IBM CryptoCards, Intel SGX, and even some software based solutions
AlexanderGordon (Thu, 29 Jun 2017 20:42:01 GMT):
exactly
MaximeLandon (Thu, 29 Jun 2017 20:42:27 GMT):
well I missed an occasion to shut the **** up
MaximeLandon (Thu, 29 Jun 2017 20:42:34 GMT):
;)
AlexanderGordon (Thu, 29 Jun 2017 20:43:09 GMT):
vigorous questioning is good :)
MaximeLandon (Thu, 29 Jun 2017 20:43:31 GMT):
ahahah yes best weapon
GhadiShayban (Thu, 29 Jun 2017 20:44:12 GMT):
https://chat.hyperledger.org/channel/sawtooth?msg=odTE2zneSDS3vkecF
GhadiShayban (Thu, 29 Jun 2017 20:44:57 GMT):
@kelly_ are there examples or prior art of this? I have seen several SGX papers lately, was wondering about the most promising lead for this ('proof of execution/computation')
GhadiShayban (Thu, 29 Jun 2017 20:46:49 GMT):
AFAICT the other alternative to running the same transaction processors everywhere is to install bytecode in the merkle state, then have one transaction processor call `eval()` on the bytecode
GhadiShayban (Thu, 29 Jun 2017 20:47:05 GMT):
One TP to Rule Them All
jsmitchell (Thu, 29 Jun 2017 20:47:25 GMT):
@GhadiShayban sawtooth is a platform
jsmitchell (Thu, 29 Jun 2017 20:47:47 GMT):
a smart contract vm is certainly possible in a transaction processor
jsmitchell (Thu, 29 Jun 2017 20:48:27 GMT):
for example - https://github.com/hyperledger/sawtooth-core/tree/master/families/burrow_evm/src/sawtooth_burrow_evm
kelly_ (Thu, 29 Jun 2017 20:48:41 GMT):
@GhadiShayban maybe check out 'proof-of-useful-work'
kelly_ (Thu, 29 Jun 2017 20:48:53 GMT):
it's a similar concept in some ways
kelly_ (Thu, 29 Jun 2017 20:49:13 GMT):
https://eprint.iacr.org/2017/203.pdf
GhadiShayban (Thu, 29 Jun 2017 20:49:49 GMT):
cool, thanks!
GhadiShayban (Thu, 29 Jun 2017 20:50:08 GMT):
the sawtooth evm stuff is pretty exciting =)
kelly_ (Thu, 29 Jun 2017 20:50:15 GMT):
wrong link!
kelly_ (Thu, 29 Jun 2017 20:50:17 GMT):
try this - https://eprint.iacr.org/2017/179.pdf
AlexanderGordon (Thu, 29 Jun 2017 20:50:34 GMT):
:)
AlexanderGordon (Thu, 29 Jun 2017 20:50:42 GMT):
kelly are you one of the developers?
kelly_ (Thu, 29 Jun 2017 20:54:55 GMT):
I participate in the project but don't write code for it
GhadiShayban (Thu, 29 Jun 2017 20:58:24 GMT):
been mulling `wasm` or jvm bytecode in a VM transaction processor. mainly because a) their bytecodes are designed to be verified b) rich ecosystem
GhadiShayban (Thu, 29 Jun 2017 20:58:37 GMT):
*designed to be _quickly_ verified
GhadiShayban (Thu, 29 Jun 2017 20:58:44 GMT):
in the case of wasm
kelly_ (Thu, 29 Jun 2017 20:59:04 GMT):
yea, have you checked out our java transaction processor?
kelly_ (Thu, 29 Jun 2017 20:59:16 GMT):
@amundson probably could give you some details on it
GhadiShayban (Thu, 29 Jun 2017 20:59:33 GMT):
I only started looking after 0.8... is that a 0.7 thing?
jsmitchell (Thu, 29 Jun 2017 21:00:14 GMT):
https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples/intkey_jvm_sc
amundson (Thu, 29 Jun 2017 21:00:22 GMT):
@GhadiShayban there is a JVM-SC transaction family in sdk/examples/intkey_jvm_sc that is a quick proof-of-concept in executing on-chain JVM bytecode
amundson (Thu, 29 Jun 2017 21:00:28 GMT):
it could use a maintainer
GhadiShayban (Thu, 29 Jun 2017 21:00:43 GMT):
oh yeah -- i forgot about that one
amundson (Thu, 29 Jun 2017 21:00:46 GMT):
which is to say, it probably works ? :)
amundson (Thu, 29 Jun 2017 21:01:47 GMT):
there are a lot of areas of work there, like trying to execute within a restricted jvm environment
GhadiShayban (Thu, 29 Jun 2017 21:02:42 GMT):
like a security manager/
GhadiShayban (Thu, 29 Jun 2017 21:02:42 GMT):
like a security manager?
GhadiShayban (Thu, 29 Jun 2017 21:02:59 GMT):
or isolated classloaders?
amundson (Thu, 29 Jun 2017 21:03:07 GMT):
well, whatever it would take to convince you that you could safely run untrusted jvm bytecode :)
GhadiShayban (Thu, 29 Jun 2017 21:04:13 GMT):
you want more trust than doing `docker pull`?
GhadiShayban (Thu, 29 Jun 2017 21:04:15 GMT):
=)
GhadiShayban (Thu, 29 Jun 2017 21:04:39 GMT):
ostensibly there'd be some governance about what bytecode is allowed to run
GhadiShayban (Thu, 29 Jun 2017 21:05:46 GMT):
as in a bytecode payload (delivery format TBD) would be proposed for members, then approved, then executed...
GhadiShayban (Thu, 29 Jun 2017 21:09:25 GMT):
I work on the clojure compiler in my copious free time - we have `eval` at the clojure level then classloading at the jvm level. wasm or EVM is definitely more self contained (don't have to worry about transitive dependencies)
GhadiShayban (Thu, 29 Jun 2017 21:11:02 GMT):
any governance scheme to do eval() from sawtooth would need to represent, sign, and approve the full transitive dep set for a program. jvm bytecode doesn't exist in isolation
GhadiShayban (Thu, 29 Jun 2017 21:11:24 GMT):
...anyways I'm rambling. Sawtooth is fricking awesome
jsmitchell (Thu, 29 Jun 2017 21:11:42 GMT):
:sunglasses:
MaximeLandon (Thu, 29 Jun 2017 21:14:29 GMT):
@boydjohnson One last question and I stop bothering you with all my questions: Is the EVM put on a transaction processor somehow a solution against the issue we discussed ?
boydjohnson (Thu, 29 Jun 2017 21:15:07 GMT):
I don't think so.
MaximeLandon (Thu, 29 Jun 2017 21:15:14 GMT):
ok
adamludvik (Thu, 29 Jun 2017 21:34:58 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=pnD6govDHH4FdpcPY) @MaximeLandon I'm not ignoring you just sidetracked. I left myself a note to circle back and read through your questions.
AlexanderGordon (Thu, 29 Jun 2017 21:41:04 GMT):
:)
AlexanderGordon (Thu, 29 Jun 2017 21:41:12 GMT):
yes its raw tech
AlexanderGordon (Thu, 29 Jun 2017 21:41:15 GMT):
so a lot to do
MaximeLandon (Thu, 29 Jun 2017 21:42:10 GMT):
@adamludvik thanks a lot for this it's very kind !
MaximeLandon (Thu, 29 Jun 2017 21:45:54 GMT):
https://chat.hyperledger.org/channel/sawtooth?msg=JvvnL6v3XYNSG6FtA
MaximeLandon (Thu, 29 Jun 2017 21:46:10 GMT):
It starts here
MaximeLandon (Thu, 29 Jun 2017 21:46:44 GMT):
the conversation is mostly between me and @boydjohnson
jsmitchell (Thu, 29 Jun 2017 21:46:54 GMT):
In answer to your question - the only person you are cheating is yourself
jsmitchell (Thu, 29 Jun 2017 21:47:25 GMT):
you will not be able to convince other validators with non-modified logic that you are correct
jsmitchell (Thu, 29 Jun 2017 21:47:38 GMT):
and so you will be on a very sad fork of your own
MaximeLandon (Thu, 29 Jun 2017 21:48:58 GMT):
ahahah yes then the conversation told me that every validator should have a transaction processor attached to it in order to fully check blocks
MaximeLandon (Thu, 29 Jun 2017 21:52:44 GMT):
But then what is the advantage of having transaction processors when you can put the code on-chain ?
MaximeLandon (Thu, 29 Jun 2017 21:53:15 GMT):
I would say it saves a bit of space because you don't need to put all the code once again each time there is an upgrade
MaximeLandon (Thu, 29 Jun 2017 21:53:36 GMT):
Would you have other reasons ?
jsmitchell (Thu, 29 Jun 2017 21:54:06 GMT):
what if you want to change the capabilities of the VM which runs the on-chain code?
jsmitchell (Thu, 29 Jun 2017 21:54:30 GMT):
what if you want to run two different types of on-chain bytecode on the same instance of the blockchain?
jsmitchell (Thu, 29 Jun 2017 21:55:16 GMT):
these ideas are _also_ implemented as transaction processors in sawtooth
jsmitchell (Thu, 29 Jun 2017 21:56:13 GMT):
so if you want on-chain code execution only, write (or wait for) a transaction processor that implements a VM with characteristics you need
jsmitchell (Thu, 29 Jun 2017 21:56:42 GMT):
the difference with sawtooth is that that piece is replaceable
jsmitchell (Thu, 29 Jun 2017 21:57:00 GMT):
and with every other system I am aware of, that piece is tightly coupled into the core of the platform
MaximeLandon (Thu, 29 Jun 2017 21:59:21 GMT):
@jsmitchell these last six lignes are gold to me
MaximeLandon (Thu, 29 Jun 2017 21:59:37 GMT):
thanks very much
jsmitchell (Thu, 29 Jun 2017 21:59:58 GMT):
:thumbsup:
MaximeLandon (Thu, 29 Jun 2017 22:00:21 GMT):
You gave me the answer I was somehow searching for since a week, night and day
MaximeLandon (Thu, 29 Jun 2017 22:00:42 GMT):
devs in my firm are going to appreciate :)
gen_el (Fri, 30 Jun 2017 14:55:12 GMT):
Has joined the channel.
gen_el (Fri, 30 Jun 2017 14:55:20 GMT):
Hi! I just looked at Sawtooth. So i am wondering, what are the limitations of Sawtooth compared to Fabric?
jsmitchell (Fri, 30 Jun 2017 14:57:24 GMT):
@gen_el Fabric provides more out of the box 'ecosystem' pieces (e.g. x500 certificate support, side-chain 'channels'). Sawtooth is focused more on the core platform concepts.
jsmitchell (Fri, 30 Jun 2017 14:58:48 GMT):
We ship with a consensus that scales like Bitcoin's proof-of-work, for example
jsmitchell (Fri, 30 Jun 2017 14:59:24 GMT):
Whereas I believe current Fabric ordering services are based on a Kafka cluster (small number of nodes)
jsmitchell (Fri, 30 Jun 2017 15:03:57 GMT):
fabric deploys go chaincode in docker containers for transaction invocation. we provide a wire protocol and sdks for transaction processor development and currently support python, java, javascript, go, and c++ transaction processor SDKs
gen_el (Fri, 30 Jun 2017 15:04:44 GMT):
@jsmitchell Let say my selection criteria are "Faster Development Time", "Scalability", "Low maintenance cost" and "modularity". Which would score higher?
jsmitchell (Fri, 30 Jun 2017 15:04:59 GMT):
all this stuff is moving fast, so I may have old knowledge. You should check with the folks in #fabric on current state
jsmitchell (Fri, 30 Jun 2017 15:05:05 GMT):
Well, I am biased. :)
zac (Fri, 30 Jun 2017 15:06:33 GMT):
I think it's worth mentioning scalability and modularity in particular
Dan (Fri, 30 Jun 2017 15:06:34 GMT):
Sawtooth will score higher ;)
zac (Fri, 30 Jun 2017 15:06:41 GMT):
IN ALL THE THINGS
zac (Fri, 30 Jun 2017 15:07:22 GMT):
Not sure what Fabric's ecosystem is like these days. They may have tools that help you get up and running with something basic faster.
gen_el (Fri, 30 Jun 2017 15:07:23 GMT):
@jsmitchell Fabric currently provides sdk (in go, javascript, java, python) for channel creation, chain code deployment, executing a function (be it a query or update)
jsmitchell (Fri, 30 Jun 2017 15:07:50 GMT):
@gen_el oh, nice!
gen_el (Fri, 30 Jun 2017 15:08:01 GMT):
@Dan @zac Ok.
zac (Fri, 30 Jun 2017 15:08:15 GMT):
We just saw a presentation on #composer for example
zac (Fri, 30 Jun 2017 15:08:18 GMT):
Impressive stuff
gen_el (Fri, 30 Jun 2017 15:08:37 GMT):
Also, how soon will Sawtooth get to v1.0?
gen_el (Fri, 30 Jun 2017 15:09:05 GMT):
Generally, the lines seem blurred to me.
zac (Fri, 30 Jun 2017 15:09:32 GMT):
Lines between versions or projects?
gen_el (Fri, 30 Jun 2017 15:09:51 GMT):
@zac Between projects
Dan (Fri, 30 Jun 2017 15:10:02 GMT):
Sawtooth targets 1.0 by end of summer. Definition of what each project means by 1.0 is probably ... blurry. :)
zac (Fri, 30 Jun 2017 15:10:30 GMT):
They solve similar problems
gen_el (Fri, 30 Jun 2017 15:10:44 GMT):
Seems like Fabric is aiming for better developer ux
Dan (Fri, 30 Jun 2017 15:10:54 GMT):
Sawtooth focuses on important concepts like state agreement, scalability / distributed arch, and making smart contracts safe.
zac (Fri, 30 Jun 2017 15:11:24 GMT):
I would say Fabric may have a head start on developer ux
zac (Fri, 30 Jun 2017 15:11:31 GMT):
But it is a goal of both projects
Dan (Fri, 30 Jun 2017 15:12:16 GMT):
There is also the question of what that UX enables.
gen_el (Fri, 30 Jun 2017 15:12:26 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=cZJuxmvDBk4Lrqx4L) @Dan Ok. I'll probably take a dive just to quantify the difference.
gen_el (Fri, 30 Jun 2017 15:12:26 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=cZJuxmvDBk4Lrqx4L) @Dan Ok. I probably take a dive just to quantify the difference.
Dan (Fri, 30 Jun 2017 15:12:51 GMT):
For sawtooth, we believe that the outcome of your development efforts is that you have a properly distributed solution.
gen_el (Fri, 30 Jun 2017 15:13:05 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=tQ4smX4WfoF3rWxv4) @Dan True. Critical for me.
gen_el (Fri, 30 Jun 2017 15:13:05 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=tQ4smX4WfoF3rWxv4) @Dan True.
zac (Fri, 30 Jun 2017 15:13:54 GMT):
You might bug `@JonathanLevi` too. He has developed for both projects, and is not directly associated with either.
gen_el (Fri, 30 Jun 2017 15:14:47 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=B4dBYoZSa4Z3ZBtyu) @zac Thanks.
jsmitchell (Fri, 30 Jun 2017 15:14:47 GMT):
heh
Dan (Fri, 30 Jun 2017 15:14:58 GMT):
well Jonathan is a Fabric maintainer.
zac (Fri, 30 Jun 2017 15:15:06 GMT):
Oh is he?
zac (Fri, 30 Jun 2017 15:15:10 GMT):
I didn't know
Dan (Fri, 30 Jun 2017 15:15:12 GMT):
I think he is very objective, but it would be incorrect to say he isn't associated. :)
zac (Fri, 30 Jun 2017 15:15:16 GMT):
Nevermind, listen to us
gen_el (Fri, 30 Jun 2017 15:15:23 GMT):
lol
zac (Fri, 30 Jun 2017 15:16:19 GMT):
I do think that Sawtooth made a number of good design decisions up front that simplify development
zac (Fri, 30 Jun 2017 15:18:44 GMT):
Everything is really nicely modularized and you can focus just on the components that are important for your use case
gen_el (Fri, 30 Jun 2017 15:20:31 GMT):
ok
gen_el (Fri, 30 Jun 2017 15:24:06 GMT):
Thanks guys. @zac @Dan @jsmitchell Definitely looks like i need to take a look. The promise of better modularity, scalability and security of smart contracts is appealing.
zac (Fri, 30 Jun 2017 15:27:58 GMT):
python3
MaximeLandon (Fri, 30 Jun 2017 17:16:19 GMT):
https://guardtime.com/
MaximeLandon (Fri, 30 Jun 2017 17:16:55 GMT):
Has someone heard of this firm ? and knows about the Keyless Signature Infrastructure (KSI) ?
kellyo (Fri, 30 Jun 2017 17:33:00 GMT):
It's a centralized time stamping service as I understand
benoit.razet (Fri, 30 Jun 2017 18:03:52 GMT):
I am trying to test the xo commands following the documentation. I am getting the following error message:```root@22b969e98db4:/# xo create game1
Error: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /batches (Caused by NewConnectionError('
boydjohnson (Fri, 30 Jun 2017 18:09:21 GMT):
If you are in docker, do `xo init --url http://rest_api:8080` before the xo create.
benoit.razet (Fri, 30 Jun 2017 18:13:00 GMT):
Here is what I get now: ```~/MySawTooth/sawtooth-core$ docker exec -it sawtooth-client-default bash
root@9cf984387f93:/# xo init --url http://rest_api:8080`
> ^C
root@9cf984387f93:/# xo init --url http://rest_api:8080
set username: root
set url: http://rest_api:8080
root@9cf984387f93:/# xo init --username ben1
set username: ben1
set url: http://rest_api:8080
writing file: /root/.sawtooth/keys/ben1.priv
writing file: /root/.sawtooth/keys/ben1.addr
root@9cf984387f93:/# xo init --username ben2
set username: ben2
set url: http://rest_api:8080
writing file: /root/.sawtooth/keys/ben2.priv
writing file: /root/.sawtooth/keys/ben2.addr
root@9cf984387f93:/# xo init --username ben1
set username: ben1
set url: http://rest_api:8080
root@9cf984387f93:/# xo create game1
Error: HTTPConnectionPool(host='http', port=80): Max retries exceeded with url: //rest_api:8080/batches (Caused by NewConnectionError('
benoit.razet (Fri, 30 Jun 2017 18:15:56 GMT):
In contrast, intkey seems to work well
boydjohnson (Fri, 30 Jun 2017 18:16:09 GMT):
with the --url parameter to intkey?
benoit.razet (Fri, 30 Jun 2017 18:16:30 GMT):
```root@9cf984387f93:/# intkey create_batch --count 10
Writing to batches.intkey...
root@9cf984387f93:/# intkey load -f batches.intkey -U http://rest_api:8080
batches: 11 batch/sec: 94.10176792605223
root@9cf984387f93:/# sawtooth block list --url http://rest_api:8080
NUM BLOCK_ID BATS TXNS SIGNER
1 08e51be610c9e9b88f588bfe2c7000991f6861118c46011b2d0bf6f9289debd04e81cd338bba35a1f7e8888b4bcbc28fb851da2ae800e2ce2ec57a41f1591205 11 205 023911...
0 d5092fa895a67edb3293756cc28964cdcf29f61c71ef30cd4014fe582533882b7a9fd1015e0abece04b5118f6925b13bc040ee860d860f6c6c022de8f31b1f0c 1 1 023911...```
benoit.razet (Fri, 30 Jun 2017 18:17:20 GMT):
It looks like it is the same, right?
boydjohnson (Fri, 30 Jun 2017 18:18:48 GMT):
Just a second, I'm going to run through some xo locally.
boydjohnson (Fri, 30 Jun 2017 18:25:00 GMT):
Hmm, `plasmon:sawtooth-core bjohnson$ docker exec -it sawtooth-client-default bash
root@e54e1c98f79e:/# xo init --url http://rest_api:8080
set username: root
set url: http://rest_api:8080
root@e54e1c98f79e:/# ^C
root@e54e1c98f79e:/# xo init --url http://rest_api:8080`
> ^C
root@e54e1c98f79e:/# xo init --url http://rest_api:8080
set username: root
set url: http://rest_api:8080
root@e54e1c98f79e:/# xo init --username ben1
set username: ben1
set url: http://rest_api:8080
writing file: /root/.sawtooth/keys/ben1.priv
writing file: /root/.sawtooth/keys/ben1.addr
root@e54e1c98f79e:/# xo init --username ben2
set username: ben2
set url: http://rest_api:8080
writing file: /root/.sawtooth/keys/ben2.priv
writing file: /root/.sawtooth/keys/ben2.addr
root@e54e1c98f79e:/# xo init --username ben1
set username: ben1
set url: http://rest_api:8080
root@e54e1c98f79e:/# xo create game1
Response: {
"link": "http://rest_api:8080/batch_status?id=0862a4a19337847aeece3486a4c97d39672e87378516f177038b996298e2e134178be4dbd9c830c3707e2e0edf642be0685e5090158cd78085e5c68e340de946"
}
`
boydjohnson (Fri, 30 Jun 2017 18:25:00 GMT):
Hmm, ```plasmon:sawtooth-core bjohnson$ docker exec -it sawtooth-client-default bash
root@e54e1c98f79e:/# xo init --url http://rest_api:8080
set username: root
set url: http://rest_api:8080
root@e54e1c98f79e:/# ^C
root@e54e1c98f79e:/# xo init --url http://rest_api:8080`
> ^C
root@e54e1c98f79e:/# xo init --url http://rest_api:8080
set username: root
set url: http://rest_api:8080
root@e54e1c98f79e:/# xo init --username ben1
set username: ben1
set url: http://rest_api:8080
writing file: /root/.sawtooth/keys/ben1.priv
writing file: /root/.sawtooth/keys/ben1.addr
root@e54e1c98f79e:/# xo init --username ben2
set username: ben2
set url: http://rest_api:8080
writing file: /root/.sawtooth/keys/ben2.priv
writing file: /root/.sawtooth/keys/ben2.addr
root@e54e1c98f79e:/# xo init --username ben1
set username: ben1
set url: http://rest_api:8080
root@e54e1c98f79e:/# xo create game1
Response: {
"link": "http://rest_api:8080/batch_status?id=0862a4a19337847aeece3486a4c97d39672e87378516f177038b996298e2e134178be4dbd9c830c3707e2e0edf642be0685e5090158cd78085e5c68e340de946"
}
```
boydjohnson (Fri, 30 Jun 2017 18:25:49 GMT):
I'm not sure. It works for me.
benoit.razet (Fri, 30 Jun 2017 18:25:57 GMT):
Hummm
boydjohnson (Fri, 30 Jun 2017 18:56:30 GMT):
The error seems like a clue. host=http and port 80 for url //rest_api:8080/batches .... Somehow the address got mangled so the protocol was interpreted as the host.
zac (Fri, 30 Jun 2017 18:57:30 GMT):
need some quotes
zac (Fri, 30 Jun 2017 18:57:44 GMT):
`:` is a significant character in the command line
zac (Fri, 30 Jun 2017 18:58:20 GMT):
`--url "http://rest_api:8080"
zac (Fri, 30 Jun 2017 18:58:20 GMT):
`--url "http://rest_api:8080"`
zac (Fri, 30 Jun 2017 18:59:41 GMT):
Hrmm I'm thinking of `&` actually
zac (Fri, 30 Jun 2017 19:00:17 GMT):
Maybe the `:` is significant for some reason in your case @benoit.razet. I'd try it with quotes
benoit.razet (Fri, 30 Jun 2017 20:39:27 GMT):
I removed the http:// and it worked :)
benoit.razet (Fri, 30 Jun 2017 20:39:44 GMT):
```root@91af4498c16f:/# xo init --url "rest_api:8080"
set username: ben1
set url: rest_api:8080
root@91af4498c16f:/# xo init --username ben1
set username: ben1
set url: rest_api:8080
root@91af4498c16f:/# xo init --username ben2
set username: ben2
set url: rest_api:8080
root@91af4498c16f:/# xo create game1
Response: {
"link": "http://rest_api:8080/batch_status?id=a032903523501d33625763ae99afd1fd89f174bf30863350c3a25147b9057f21397a55557605cc274551a3fe0bf7d31749e5a359863a895e2360d4ae28ac2a6e"
}
```
benoit.razet (Fri, 30 Jun 2017 20:40:24 GMT):
Thanks! @boydjohnson @zac
benoit.razet (Fri, 30 Jun 2017 21:01:24 GMT):
actually I am stuck on the next step. It looks like the block was not accepted: ```sawtooth-validator-default | [20:50:45.296 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1144 bytes
sawtooth-validator-default | [20:50:45.300 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'de7fa6887df545f8'
sawtooth-validator-default | [20:50:45.404 INFO executor] Exception creating context: Address or namespace 5b73490e15daa1bd461b5231a033bc75105036a98dda907d24786c84421ac3b5f519bd31a6fe39accf74b9c0de9a789e789206a07e6748c0260ed955bf5ac7690342a3 listed in inputs is not valid
sawtooth-validator-default | [20:50:45.405 DEBUG publisher] Batch 9d3187814921c779184828a22d8d97dad5acae79a84de031501175475cf37ef94a8fcfd41a851df876025839e9cad1a80260ce96fa86b6b4af3a493b2d4ddd43 invalid, not added to block.
sawtooth-validator-default | [20:50:45.406 DEBUG publisher] Abandoning block (1, S:, P:afabb585): no batches added```
benoit.razet (Fri, 30 Jun 2017 21:02:02 GMT):
on the client side: ```root@91af4498c16f:/# xo list
GAME PLAYER 1 PLAYER 2 BOARD STATE```
boydjohnson (Fri, 30 Jun 2017 21:03:49 GMT):
When did you ```docker-compose up``` first with that yaml file? Do ```docker images```.
benoit.razet (Fri, 30 Jun 2017 21:13:34 GMT):
```docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sawtooth-dev-javascript latest 2c04beacf43e 3 days ago 407 MB
sawtooth-tp_intkey_javascript latest 2c04beacf43e 3 days ago 407 MB
sawtooth-tp_xo_javascript latest 2c04beacf43e 3 days ago 407 MB
sawtooth-dev-java latest 7f3a81eb2772 3 days ago 620 MB
sawtooth-tp_intkey_java latest 7f3a81eb2772 3 days ago 620 MB
sawtooth-tp_xo_java latest 7f3a81eb2772 3 days ago 620 MB
sawtooth-dev-go latest 7956bc652829 3 days ago 689 MB
sawtooth-tp_burrow_evm latest 7956bc652829 3 days ago 689 MB
sawtooth-tp_intkey_go latest 7956bc652829 3 days ago 689 MB
sawtooth-tp_xo_go latest 7956bc652829 3 days ago 689 MB
sawtooth-dev-cxx latest bf1d16984b59 3 days ago 589 MB
sawtooth-tp_validator_registry latest 883adc405289 3 days ago 734 MB
sawtooth-tp_xo_python latest 883adc405289 3 days ago 734 MB
sawtooth-validator latest 883adc405289 3 days ago 734 MB
sawtooth-dev-python latest 883adc405289 3 days ago 734 MB
sawtooth-rest_api latest 883adc405289 3 days ago 734 MB
sawtooth-tp_intkey_python latest 883adc405289 3 days ago 734 MB
sawtooth-tp_settings latest 883adc405289 3 days ago 734 MB
sawtooth-tp_supplychain_python latest 883adc405289 3 days ago 734 MB
apache-basic_auth_proxy latest 9a177041459d 4 days ago 256 MB
hyperledger/sawtooth-validator latest f5dbf2fa92b3 4 days ago 168 MB
hyperledger/sawtooth-tp_xo_python latest 5e6fc1a5dffb 4 days ago 166 MB
hyperledger/sawtooth-tp_intkey_python latest 68a8edcf823f 4 days ago 162 MB
hyperledger/sawtooth-tp_settings latest 25f39b57e9c6 4 days ago 163 MB
hyperledger/sawtooth-rest_api latest e416907f35ff 4 days ago 166 MB```
benoit.razet (Fri, 30 Jun 2017 21:14:44 GMT):
the intkey commands are working fine, creating blocks and validating blocks
boydjohnson (Fri, 30 Jun 2017 21:27:32 GMT):
So I would remove the 'hyperledger/*' images since we pushed two updates 4 days ago to the docker images: https://hub.docker.com/r/hyperledger/sawtooth-tp_xo_python/tags/
benoit.razet (Fri, 30 Jun 2017 21:30:39 GMT):
ok, will do
benoit.razet (Fri, 30 Jun 2017 21:37:56 GMT):
it is a separate question but would it be possible to use local images, built from the sdk. I am thinking, if I want to modify intkey or xo, or build my own application, is there a document describing the workflow to do that?
benoit.razet (Fri, 30 Jun 2017 21:41:56 GMT):
Everything works well with xo now! I can play the game and all that! Thank you very much!
boydjohnson (Fri, 30 Jun 2017 21:49:51 GMT):
Sweet! The non hyperledger/* images that you had in the ```docker images``` output are from the ./bin/build_all script. The default for python is that the current code in the sawtooth-core repo is mounted into the container when a container based on say the sawtooth-tp-intkey image is run. To run them make a docker-compose yaml file similar to the ones in sawtooth-core/integration/sawtooth_integration/docker/*.
boydjohnson (Fri, 30 Jun 2017 21:51:34 GMT):
I'm going to take off. It was good chatting with you, and I'm glad I got you going with xo.
benoit.razet (Fri, 30 Jun 2017 21:57:33 GMT):
Thanks for your help!
mjtodd (Mon, 03 Jul 2017 14:01:22 GMT):
Has joined the channel.
tkuhrt (Mon, 03 Jul 2017 22:12:57 GMT):
Following https://intelledger.github.io/core_developers_guide/environment_setup.html. On `/project/sawtooth-core/bin/build_all` step, I get the following error:
```
# cd .; git clone https://gopkg.in/fatih/set.v0 /go/src/gopkg.in/fatih/set.v0
Cloning into '/go/src/gopkg.in/fatih/set.v0'...
fatal: unable to access 'https://gopkg.in/fatih/set.v0/': Failed to connect to gopkg.in port 443: Network is unreachable
package gopkg.in/fatih/set.v0: exit status 128
```
tkuhrt (Mon, 03 Jul 2017 22:13:49 GMT):
When I go to https://gopkg.in/fatih/set.v0/, this does not seem to be the github location. Instead, when I click on the "Github Source", I am directed to: https://github.com/fatih/set/tree/v0.1.1
tkuhrt (Mon, 03 Jul 2017 22:14:28 GMT):
It also looks like we could use:
```
go get gopkg.in/fatih/set.v0
```
dashengSun (Tue, 04 Jul 2017 07:50:59 GMT):
Has joined the channel.
mattalhonte (Tue, 04 Jul 2017 08:00:51 GMT):
If I downgraded to a previous version of Sawtooth, would I be able to run one of those cool Demos?
boydjohnson (Wed, 05 Jul 2017 01:25:09 GMT):
@mattalhonte The 0.7 branch on github has both bond and marketplace. The fish supply chain one is not open source IIRC. https://github.com/hyperledger/sawtooth-core/tree/0-7/extensions
toddojala (Wed, 05 Jul 2017 15:11:32 GMT):
@adamludvik might have some input into @tkuhrt 's issue with that Go path... ?
adamludvik (Wed, 05 Jul 2017 15:13:13 GMT):
I am already trying to reproduce it. We are already using `go get` though, which uses git under the hood I believe.
adamludvik (Wed, 05 Jul 2017 15:15:52 GMT):
@tkuhrt Do you use a proxy for HTTPS? I followed the steps above and did not reproduce the issue.
tkuhrt (Wed, 05 Jul 2017 18:47:03 GMT):
@adamludvik : no proxy
tkuhrt (Wed, 05 Jul 2017 18:47:18 GMT):
I will try to run again and see if the same happens.
tkuhrt (Wed, 05 Jul 2017 19:00:15 GMT):
Looks like it must have been a temporary glitch. This time it worked.
mattalhonte (Thu, 06 Jul 2017 03:00:52 GMT):
Hello. Trying to run one of the Demos from 0.7. Does it need to be run in the Vagrant environment? I'm running this on an AWS server so I can't use Vagrant.
Vthot4 (Thu, 06 Jul 2017 08:20:55 GMT):
Has joined the channel.
FlyingTiger (Thu, 06 Jul 2017 11:51:44 GMT):
Is there a concrete javascript example using client functionality that Javascript sdk does provide?
cianx (Thu, 06 Jul 2017 12:41:43 GMT):
@pschwarz ^
pschwarz (Thu, 06 Jul 2017 14:28:14 GMT):
@FlyingTiger checkout the example work we did with the OMI summer lab project: https://github.com/IntelLedger/omi-summer-lab
benoit.razet (Thu, 06 Jul 2017 15:00:33 GMT):
I am testing the supplychain family and run into a problem when I run the following sequence of commands. The problem arises only at the last command entered. It looks like a protobuf type error related to ApplicationAcceptPayload.timestamp
benoit.razet (Thu, 06 Jul 2017 15:00:55 GMT):
```supplychain init --username alice --url "restapi:8080"
supplychain agent create alice
supplychain init --username bob --url "restapi:8080"
supplychain agent create bob
supplychain agent list
supplychain record create pizza
supplychain record create bread
supplychain record list
supplychain init --username alice --url "restapi:8080"
supplychain application create bread --type CUSTODIAN
supplychain application list
supplychain init --username bob --url "restapi:8080"
supplychain application accept bread --applicant alice --type CUSTODIAN
```
benoit.razet (Thu, 06 Jul 2017 15:01:32 GMT):
the error message is:
benoit.razet (Thu, 06 Jul 2017 15:01:55 GMT):
```root@59e9f7f1f76f:/project/sawtooth-core# supplychain application accept bread --applicant alice --type CUSTODIAN
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/google/protobuf/internal/python_message.py", line 524, in init
setattr(self, field_name, field_value)
File "/usr/lib/python3/dist-packages/google/protobuf/internal/python_message.py", line 660, in field_setter
new_value = type_checker.CheckValue(new_value)
File "/usr/lib/python3/dist-packages/google/protobuf/internal/type_checkers.py", line 133, in CheckValue
raise TypeError(message)
TypeError: 1499353109.1411014 has type
benoit.razet (Thu, 06 Jul 2017 15:03:08 GMT):
Is there anyone who could help me figure out what is the problem with this sequence of commands?
boydjohnson (Thu, 06 Jul 2017 15:05:05 GMT):
@cianx ^
tkuhrt (Thu, 06 Jul 2017 18:58:25 GMT):
I am looking for an email list for the Sawtooth maintainers. Is there a list like that anywhere? The closest I found was https://github.com/hyperledger/sawtooth-core/blob/master/COMMITTERS, but this does not contain email addresses.
tkuhrt (Thu, 06 Jul 2017 18:59:00 GMT):
Also, I would like to contact just the maintainers and not use the mailing list at lists.hyperledger.org.
Dan (Thu, 06 Jul 2017 19:26:00 GMT):
Hi Tracy, no we don't have a maintainers email list.
Dan (Thu, 06 Jul 2017 19:43:40 GMT):
@tkuhrt I'll volunteer @TomBarnes :) If you send him an email he will do a good job replying back adding the rest of the maintainers.
tkuhrt (Thu, 06 Jul 2017 19:52:24 GMT):
Thanks, @Dan
TomBarnes (Thu, 06 Jul 2017 21:01:18 GMT):
Ha!
TomBarnes (Thu, 06 Jul 2017 21:01:32 GMT):
will send that list presently...
Dan (Thu, 06 Jul 2017 21:03:25 GMT):
thx
mattalhonte (Thu, 06 Jul 2017 22:09:33 GMT):
Got the Bond UI demo running from 0.7. Well, "running" in the sense that the Figwheel server is running and I can see it. It can't talk to the server, though, for reasons unknown. I thought I had it right - I ran the Validator, Ledger Sync, Server, and Client. And tried to load in data.
mattalhonte (Thu, 06 Jul 2017 22:13:12 GMT):
specifically it says
```Unable to Load Transaction History
Failed to load the transaction history
due to an unknown server error.
Unable to fetch organizations
An unknown error occurred while
attempting to fetch organizations.```
kelly_ (Thu, 06 Jul 2017 22:18:54 GMT):
that's probably a question for @pschwarz . he may be done for the day though
benoit.razet (Thu, 06 Jul 2017 22:27:53 GMT):
@boydjohnson @cianx I found the problem, it was a missing type conversion of time.time() to int in `sawtooth-core/families/supplychain/python/sawtooth_supplychain/client.py` in the function `application_accept()` the line `timestamp=timestamp or time.time()` should be `timestamp=timestamp or int(time.time())` around line 200
jjason (Thu, 06 Jul 2017 22:56:41 GMT):
Anyone seen an issue when destroying vagrant VM and re-creating it causes vagrant VM without docker installed?????????
jjason (Fri, 07 Jul 2017 03:18:27 GMT):
I seem to have gotten past the problem. After destroying the VM, I needed to delete all of the go libraries. When `install_go_tools.sh` was run it complained about locally-changed files when trying to merge with git.
FlyingTiger (Fri, 07 Jul 2017 07:11:30 GMT):
@pschwarz Thanks. :)
gcarrerat (Fri, 07 Jul 2017 10:35:53 GMT):
Has joined the channel.
pschwarz (Fri, 07 Jul 2017 13:54:16 GMT):
@mattalhonte What is the environment that you are running all of your processes?
cianx (Fri, 07 Jul 2017 14:05:03 GMT):
@benoit.razet Good find, Are you planning to submit a patch?
benoit.razet (Fri, 07 Jul 2017 14:07:27 GMT):
if you think that's worth it, I'd be happy to do so
kelly_ (Fri, 07 Jul 2017 19:49:58 GMT):
@benoit.razet thanks for the PR
benoit.razet (Fri, 07 Jul 2017 19:56:11 GMT):
I am having a good time looking into the supplychain family. Thanks!
zac (Mon, 10 Jul 2017 15:06:35 GMT):
Those who are waiting on the Sawtooth Sprint Planning meeting that was supposed to start 6 minutes ago!
zac (Mon, 10 Jul 2017 15:06:55 GMT):
We are having some technical issues with Zoom, and are switching to Uberconference
zac (Mon, 10 Jul 2017 15:07:05 GMT):
A new link will be posted here shortly
mfford (Mon, 10 Jul 2017 15:10:32 GMT):
https://www.uberconference.com/hyperledger-community
mfford (Mon, 10 Jul 2017 15:10:52 GMT):
This is for the Sprint Planning Meeting
visualops (Tue, 11 Jul 2017 07:33:10 GMT):
Has joined the channel.
visualops (Tue, 11 Jul 2017 07:40:00 GMT):
This is just a "Hi community" from myself. I'm working on a startup to build some applications on top of the blockchain (operations) and I've jumped onto sawtooth and hyperledger as a way to start. The ubuntu build was a doddle, as was the full build on my platform, OS X using the docker stuff. I also got the validator, rest-api and the python intkey and settings TP's running natively on my mac if anybody is interested (I'm sure everything else will run too). Just a few extra commands to run to install various needed things and it runs beautifully. I had to make a 1 liner change to the source of the validator to stop it creating 3 1TB files :-), but I'll work out how to correctly detect the problem (no sparse files) and I'll contribute the change back. It's only early days for me but I'm excited at how quick it's been to get a look at this. Bravo.
visualops (Tue, 11 Jul 2017 07:40:46 GMT):
I literally started this morning and I have a blockchain on my mac :-)
toddojala (Tue, 11 Jul 2017 14:06:32 GMT):
@visualops That's really cool. And welcome.
Dan (Tue, 11 Jul 2017 14:31:19 GMT):
Welcome to the sawtooth community, @visualops !
Dan (Tue, 11 Jul 2017 15:39:05 GMT):
anyone have example code for deleting a record from state?
boydjohnson (Tue, 11 Jul 2017 15:55:20 GMT):
@Dan That is an issue that might not be able to be done right now. Both the wire protocol for deletion and the actual backend/context manager doesn't support it.
Dan (Tue, 11 Jul 2017 16:00:20 GMT):
Hrmmm. I was assuming I could do something like `set(addr, None)`
Dan (Tue, 11 Jul 2017 16:01:05 GMT):
?
boydjohnson (Tue, 11 Jul 2017 16:06:26 GMT):
So protobuf has no None or null. The sdks may not be handling this. I have tasks to update the sdks for this and to update the context manager.
boydjohnson (Tue, 11 Jul 2017 16:07:17 GMT):
Try set(addr, b'') as a None for right now. It is not good at all, but may work.
Dan (Tue, 11 Jul 2017 16:32:19 GMT):
Seems like the a transaction family could define a message that was like ```verb = 'delete'; addr='abc321...'``` and then a python transaction processor can interpret that as `set('abc321...', None)`. Or at least that's what I'm planning to do for now.
boydjohnson (Tue, 11 Jul 2017 16:36:46 GMT):
Yeah, the transaction family should be able to call something on the State object that is passed in that would delete from state.
pschwarz (Tue, 11 Jul 2017 17:11:52 GMT):
Let's make sure there's a story for a proper delete
boydjohnson (Tue, 11 Jul 2017 17:14:55 GMT):
STL-399 is for updating the sdks. I can't find the context manager story but will keep on looking.
boydjohnson (Tue, 11 Jul 2017 17:20:05 GMT):
Thinking about it there are two different issues. That a value is null needs to be handled. Right now it comes back as empty bytes. And then being able to delete, which would be new methods on the sdk state objects and also functionality from the context manager.
usanyal (Tue, 11 Jul 2017 18:52:51 GMT):
Has joined the channel.
usanyal (Tue, 11 Jul 2017 18:54:25 GMT):
What are the softwares required for development in blockchain? I'm confused.
pschwarz (Tue, 11 Jul 2017 19:03:38 GMT):
Do you mean from a starting standpoint?
GhadiShayban (Tue, 11 Jul 2017 19:09:49 GMT):
Has sawtooth been tested against something > Ubuntu 16.04?
Dan (Tue, 11 Jul 2017 19:17:09 GMT):
not that I'm aware of @GhadiShayban
GhadiShayban (Tue, 11 Jul 2017 19:28:24 GMT):
thanks dan
AgustinCroce (Tue, 11 Jul 2017 19:42:37 GMT):
Has joined the channel.
AgustinCroce (Tue, 11 Jul 2017 19:43:37 GMT):
Hi i have a doubt. What storage does sawtooth use to store the state?
GhadiShayban (Tue, 11 Jul 2017 19:45:31 GMT):
From what I've seen @AgustinCroce it's LMDB
pschwarz (Tue, 11 Jul 2017 19:47:00 GMT):
Yes, it's LMDB
GhadiShayban (Tue, 11 Jul 2017 19:47:06 GMT):
But the Merkle tree could be implemented on top of just about anything. It's a minimal API surface
pschwarz (Tue, 11 Jul 2017 19:47:18 GMT):
More less, yes
pschwarz (Tue, 11 Jul 2017 19:48:13 GMT):
There are several alternative implementations left over from the early experimentation phases before settling on LMDB. None of the others are selectable, however
pschwarz (Tue, 11 Jul 2017 19:48:46 GMT):
There's is a well-defined interface for a database implementation
GhadiShayban (Tue, 11 Jul 2017 19:48:56 GMT):
(Curious, what are the old impls?)
pschwarz (Tue, 11 Jul 2017 19:50:06 GMT):
A locking LMDB implementation, an in-memory version (still used a lot for testing), and Shelf
jsmitchell (Tue, 11 Jul 2017 19:50:10 GMT):
I think we did dict, shelve (persisted dict, basically), postgresql
pschwarz (Tue, 11 Jul 2017 19:50:16 GMT):
Nope, looks like the locking one is gone
AgustinCroce (Tue, 11 Jul 2017 19:53:54 GMT):
Thx a lot, i have another question. I read in the docs that i can use --config and pass a config file to the validator. I didn't find the specifications of that file in the docs
pschwarz (Tue, 11 Jul 2017 20:54:24 GMT):
@agunde :point_up:
agunde (Tue, 11 Jul 2017 21:37:27 GMT):
@AgustinCroce What section of the doc are you referring to? There is an example validator config file for 0.8 here https://github.com/hyperledger/sawtooth-core/blob/master/validator/packaging/validator.toml.example
agunde (Tue, 11 Jul 2017 21:37:56 GMT):
This file should be placed in the config dir defined in this file https://github.com/hyperledger/sawtooth-core/blob/master/validator/packaging/path.toml.example
huizar_mx (Wed, 12 Jul 2017 00:20:29 GMT):
Has joined the channel.
huizar_mx (Wed, 12 Jul 2017 00:34:06 GMT):
Hi Everyone! I have a question, Is there a limit on the amount of information that can be stored in a single address?
jsmitchell (Wed, 12 Jul 2017 01:02:13 GMT):
I'm not aware of any specific limit
jsmitchell (Wed, 12 Jul 2017 01:02:23 GMT):
How much were you thinking?
Audrius (Wed, 12 Jul 2017 08:00:21 GMT):
Has joined the channel.
randombishop (Wed, 12 Jul 2017 10:37:53 GMT):
Has joined the channel.
randombishop (Wed, 12 Jul 2017 10:42:34 GMT):
Hi, big thanks to the team for the doc of the project, it's so instructive for a newcomer like me and the instructions actually work straight away, bravo !
randombishop (Wed, 12 Jul 2017 10:49:14 GMT):
I have questions please regarding the POET : i'd like to understand it deeper than the doc description. How does the community of validators check that the attestation of execution comes from a trusted enclave ? How to set up such an enclave ? Does it come by default with Intel processors ?
Is there a standard set of trusted Intel signatures like the ones that come with the internet browsers ? How do the different nodes organize the vote to select the leader based on their different enclaves ?
randombishop (Wed, 12 Jul 2017 11:03:47 GMT):
Is there such a vote process or do validators just pick the shortest PoET after a while ? What happens if two nodes end up selecting two different leaders for the same block because the attestations of execution did't reach them in time ?
adamludvik (Wed, 12 Jul 2017 13:22:17 GMT):
@randombishop We are in the process of publishing more information regarding PoET right now. I have a PR up right now that gives a very terse overview of PoET, and I also have more information about PoET and SGX in an internal doc I am hoping to publish soon. (PR link: https://github.com/hyperledger/sawtooth-core/pull/697)
adamludvik (Wed, 12 Jul 2017 13:26:16 GMT):
Message Attachments
zac (Wed, 12 Jul 2017 14:19:43 GMT):
@randombishop Some quick answers I happen to know off the top of my head:
- The SGX component is a "trusted execution environment" (i.e. enclave), and comes with most (all?) newer Intel CPUs.
- The nodes don't really vote. They all agree that the node with the shortest wait time is the block winner.
- If two different leaders are selected in different parts of the network, you will have a fork in the chain. There are mechanisms to resolve forks, which I don't actually know the details of, but my assumption is the leader with the shorter wait time will eventually win out if everything is working properly.
randombishop (Wed, 12 Jul 2017 16:05:44 GMT):
Thanks @zac , very clear answers !
randombishop (Wed, 12 Jul 2017 16:11:12 GMT):
Thanks @adamludvik, sweet docs, was looking for that exactly !
GhadiShayban (Wed, 12 Jul 2017 16:51:33 GMT):
@adamludvik what's the relation with PoET & SGX2? afaict SGX2 is about dynamic memory mgmt inside the enclave, and it isn't out yet. (There's a reference to SGX2 in the pdf)
GhadiShayban (Wed, 12 Jul 2017 16:55:11 GMT):
PoET clearly doesn't need SGX2, just wondering whether there was significance to the reference
adamludvik (Wed, 12 Jul 2017 16:57:26 GMT):
The SGX section of that doc is a general primer on SGX and isn't all PoET specific. I was paraphrasing the section 1.1 Overview in this doc, which references SGX2: https://software.intel.com/sites/default/files/managed/48/88/329298-002.pdf
GhadiShayban (Wed, 12 Jul 2017 16:57:38 GMT):
cool
AntonOyung (Wed, 12 Jul 2017 17:37:37 GMT):
Has joined the channel.
GhadiShayban (Wed, 12 Jul 2017 17:39:42 GMT):
speaking of SGX -- does docker need special capabilities to launch the real SGX PoET?
jsmitchell (Wed, 12 Jul 2017 17:45:02 GMT):
apparently it doesn't require anythin special other than passing the device down to the container
jsmitchell (Wed, 12 Jul 2017 17:45:02 GMT):
apparently it doesn't require anything special other than passing the device down to the container
jsmitchell (Wed, 12 Jul 2017 17:45:12 GMT):
https://github.com/tozd/docker-sgx
jsmitchell (Wed, 12 Jul 2017 17:45:25 GMT):
@rbuysse any more clues? ^
jsmitchell (Wed, 12 Jul 2017 17:45:48 GMT):
i don't think we've tried that yet
rbuysse (Wed, 12 Jul 2017 17:46:00 GMT):
I haven't tested it yet
rbuysse (Wed, 12 Jul 2017 17:47:18 GMT):
I'll try and get to it this week
GhadiShayban (Wed, 12 Jul 2017 18:12:07 GMT):
rbuysse is that https://jira.hyperledger.org/browse/STL-594 ?
Dan (Wed, 12 Jul 2017 20:01:22 GMT):
I've never tried sgx with docker. so far we've only run poet on bare metal so to speak.
Dan (Wed, 12 Jul 2017 21:30:48 GMT):
@adamludvik in order to delete a field from state I intend to write `None` to a radix address. To get that through the unit test it looks like I'll need to make a new message factory method like this one "consensus.poet.families.tests.validator_reg_message_factory.ValidatorRegistryMessageFactory#create_set_request_validator_info" that supports `None`. Before I dig a layer deeper, can you explain how the merkle store is/isn't mocked? Is it actually using the merklix object?
Dan (Wed, 12 Jul 2017 21:36:44 GMT):
Hi @FlyingTiger. Is everything well? Are you getting the right attention on your PR's?
zac (Wed, 12 Jul 2017 21:44:32 GMT):
@FlyingTiger ^
AntonOyung (Wed, 12 Jul 2017 21:45:02 GMT):
Hey all, I'm an undergraduate fairly new to blockchain. I've read through the documentation and was wondering once the rest client sends a get request, where is the request received and processed/how does it eventually interact with the DB? Thanks!
zac (Wed, 12 Jul 2017 21:46:20 GMT):
```
Client --HTTP--> REST API --ZMQ--> Validator
```
zac (Wed, 12 Jul 2017 21:46:57 GMT):
The Validator stores a copy of blockchain state in LMDB
zac (Wed, 12 Jul 2017 21:47:54 GMT):
Some clients may use ZMQ directly
AntonOyung (Wed, 12 Jul 2017 21:52:35 GMT):
This may be more of a general blockchain question, but when you say the state is stored in LMDB, are just the transactions/batches stored or is there also some sort of table that stores the balance for each user?
boydjohnson (Wed, 12 Jul 2017 21:54:30 GMT):
@AntonOyung In sawtooth, state and the block store are separate. The state is checkpointed with a merkle root that is stored in the block header.
adamludvik (Wed, 12 Jul 2017 22:00:10 GMT):
@Dan The merkle store isn't really mocked. Roughly speaking, the testing library just let's you send and receive validator messages to and from the tp. There are some extra methods that let you make assertions about the message received by constructing and providing the message yourself. The message factory and the family specific message factories that use it are there to make creating messages easier.
AntonOyung (Wed, 12 Jul 2017 22:00:42 GMT):
So I see that in the block header we are able to verify the version of the state, but are we also able to actually derive the state? Thanks for your answers!
adamludvik (Wed, 12 Jul 2017 22:01:13 GMT):
If you are trying to delete entries from state, I think there are some state delete messages too..
boydjohnson (Wed, 12 Jul 2017 22:01:34 GMT):
Yeah, the state is stored in an LMDB database and can be accessed by merkle root.
AntonOyung (Wed, 12 Jul 2017 22:12:13 GMT):
So if I'm understanding this correctly, the validator receives the get request and then directly accesses the DB?
zac (Wed, 12 Jul 2017 22:14:28 GMT):
yes
zac (Wed, 12 Jul 2017 22:14:44 GMT):
though strictly speaking it won't be a GET request once it gets to the Validator
zac (Wed, 12 Jul 2017 22:14:51 GMT):
since that is an HTTP verb
zac (Wed, 12 Jul 2017 22:14:57 GMT):
But the idea is the same
AntonOyung (Wed, 12 Jul 2017 22:15:31 GMT):
does the tp_state_handler receive/process the request?
zac (Wed, 12 Jul 2017 22:17:09 GMT):
no
zac (Wed, 12 Jul 2017 22:17:26 GMT):
look at the client request handlers
zac (Wed, 12 Jul 2017 22:17:44 GMT):
they will take the request and direct it accordingly
zac (Wed, 12 Jul 2017 22:18:18 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/validator/sawtooth_validator/state/client_handlers.py
zac (Wed, 12 Jul 2017 22:19:19 GMT):
In the case of state, they will access the Merkle trie directly, in the case of block information, the Block Store
randombishop (Wed, 12 Jul 2017 22:21:54 GMT):
I want to implement a land property database based on a sawtooth ledger. Sawtooth, its docs, and the provided examples in sawtooth-arcade are really perfect material to build it, but I have an extra general question please : how would the nodes be remunerated for participating to the blockchain ? What is the best practice ? Does it always involve creating a cryptocurrency associated with this database ? Are there any source code examples that illustrate how to implement participant nodes remuneration ?
zac (Wed, 12 Jul 2017 22:22:10 GMT):
Those are instantiated here:
https://github.com/hyperledger/sawtooth-core/blob/master/validator/sawtooth_validator/server/core.py#L127
And here:
https://github.com/hyperledger/sawtooth-core/blob/master/validator/sawtooth_validator/server/core.py#L147
zac (Wed, 12 Jul 2017 22:25:48 GMT):
@randombishop That's not a question Sawtooth inherently answers. You could do a cryptocurrency if you needed to. The prevailing assumption is that a blockchain like that will be managed by interested parties. The agents, real estate websites, possibly regulatory agencies. They all have an interest in it running, and thanks to PoET the costs of doing so is comparable to a DB they would have to maintain anyway, so there is no need for remuneration.
randombishop (Wed, 12 Jul 2017 22:31:21 GMT):
Thanks you @zac for free consulting :)
randombishop (Wed, 12 Jul 2017 22:33:28 GMT):
Do you know any sawtooth cryptocurrency project with node remuneration on github ?
zac (Wed, 12 Jul 2017 22:33:55 GMT):
As far as I know, no one is working on that at the moment
AkarshaMahadeva (Wed, 12 Jul 2017 22:35:04 GMT):
Has joined the channel.
AntonOyung (Wed, 12 Jul 2017 23:46:20 GMT):
@zac @boydjohnson Thanks for answering my questions, I really appreciate it! It really helped my understanding of the subject!
FlyingTiger (Thu, 13 Jul 2017 11:04:41 GMT):
@Dan Hi, everything is fine. And I'm trying to use the Javascript SDK now.
FlyingTiger (Thu, 13 Jul 2017 12:00:07 GMT):
Hi, everyone. I looked into the javascript SDK, and found 'Building and Submitting Transactions' on the web http://intelledger.github.io/_autogen/sdk_submit_tutorial_js.html. I think 'const encoder = new TransactionEncoder(privateKey, { ... inputs: ['1cf12650d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c']' is not a good example, we need to show how to calculate the inputs. What's your point?
randombishop (Thu, 13 Jul 2017 12:48:52 GMT):
Also trying to complete the Javascript SDK now. How can I start the xo transaction processor please ? (Sorry if it's already in the docs but I could not find it)
zac (Thu, 13 Jul 2017 14:13:20 GMT):
@FlyingTiger The inputs are Transaction Family specific. IntKey does it differently than Xo, etc. So that document is not the place to explain it. Though it could probably do a better job of explaining that point.
zac (Thu, 13 Jul 2017 14:15:09 GMT):
@randombishop There are CLI commands to get it running in few languages. `xo-tp-python`, and `xo-tp-javascript` for example
zac (Thu, 13 Jul 2017 14:15:45 GMT):
Note that, if you are writing a JS client, you don't need to talk to a JS TP. You could run either.
zac (Thu, 13 Jul 2017 14:16:14 GMT):
I recommend the `-vv` flag if you want to see everything that's going on too:
zac (Thu, 13 Jul 2017 14:16:32 GMT):
```
xo-tp-python -vv
```
zac (Thu, 13 Jul 2017 14:16:32 GMT):
```
$ xo-tp-python -vv
```
zac (Thu, 13 Jul 2017 14:17:04 GMT):
Not sure if that works with the JS one or not...
pschwarz (Thu, 13 Jul 2017 14:17:30 GMT):
the `-vv` options are not yet available on the xo-tp-javascript command
pschwarz (Thu, 13 Jul 2017 14:18:32 GMT):
If you are using the example docker compose file, xo-tp-python is started along with the validator, rest api, settings transaction processor and the intkey transaction family (all of which are the python variants).
randombishop (Thu, 13 Jul 2017 14:45:48 GMT):
cool, thanks a lot
mfford (Thu, 13 Jul 2017 14:46:26 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, July 13th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Agenda:
1. Introductions-Mark Ford
2. Serial & Parallel Scheduler-Boyd Johnson
3. Open Forum
Using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
Dan (Thu, 13 Jul 2017 15:11:34 GMT):
Audio ok for everyone?
Dan (Thu, 13 Jul 2017 15:12:39 GMT):
@FlyingTiger can you send @mfford some times that would work for you to join forums like this?
svasilyev (Thu, 13 Jul 2017 15:20:02 GMT):
Has joined the channel.
AkarshaMahadeva (Thu, 13 Jul 2017 15:33:51 GMT):
Hello, I have a doubt regarding the number of tables stored in the database. Is Merkle tree constructed for every block? Or one Merkle tree for the entire block chain?
C0rWin (Thu, 13 Jul 2017 15:35:05 GMT):
Has left the channel.
toddojala (Thu, 13 Jul 2017 15:54:16 GMT):
@AkarshaMahadeva There is a new Merkle trie root for each new block, but the old root still exists...
toddojala (Thu, 13 Jul 2017 15:54:58 GMT):
@AkarshaMahadeva Please read the Architecture documentation, including http://intelledger.github.io/architecture/global_state.html
AkarshaMahadeva (Thu, 13 Jul 2017 15:55:16 GMT):
Thank u so much.
jsmitchell (Thu, 13 Jul 2017 18:12:47 GMT):
@FlyingTiger what's the status of https://github.com/hyperledger/sawtooth-core/pull/644
jsmitchell (Thu, 13 Jul 2017 18:32:21 GMT):
The recordings of this morning's tech forum on serial and parallel scheduling have been uploaded: https://drive.google.com/drive/folders/0B_NJV6eJXAA1VnFUakRzaG1raXc
danielhex (Thu, 13 Jul 2017 23:51:42 GMT):
Has joined the channel.
FlyingTiger (Fri, 14 Jul 2017 07:05:45 GMT):
@jsmitchell I finished all installed python commands, 'sawtooth, sawtooth-validator, sawtooth-rest-api, all the TPs.'
FlyingTiger (Fri, 14 Jul 2017 08:54:44 GMT):
@Dan 10:00 Am CDT is 11:00 PM Local Time, it's ok for me. I'll join forums next time.
FlyingTiger (Fri, 14 Jul 2017 09:40:46 GMT):
@zac Yes, but '1cf12650d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c' isn't the address of 'foo' named by the example. and is different from the below example.
FlyingTiger (Fri, 14 Jul 2017 09:44:16 GMT):
And when I used the example, I got an error "Invalid Transaction Tried to get unauthorized address".
FlyingTiger (Fri, 14 Jul 2017 09:46:14 GMT):
That example is user-unfriendly.
ssaddem (Fri, 14 Jul 2017 09:54:45 GMT):
Has joined the channel.
zac (Fri, 14 Jul 2017 14:50:22 GMT):
ah
zac (Fri, 14 Jul 2017 14:50:28 GMT):
that's a typo then
zac (Fri, 14 Jul 2017 14:50:39 GMT):
It _should_ be the address for 'foo'
zac (Fri, 14 Jul 2017 14:51:05 GMT):
Pretty sure it used to be
zac (Fri, 14 Jul 2017 14:53:12 GMT):
Ah, I see, it was changed for one example but not another
zac (Fri, 14 Jul 2017 14:54:12 GMT):
For these example it would make more sense if they were different . . .
zac (Fri, 14 Jul 2017 14:54:45 GMT):
@jsmitchell Does address wildcarding work for inputs/outputs at this point?
zac (Fri, 14 Jul 2017 14:55:59 GMT):
Can you set inputs to `['1cf126']` to access all of the IntKey namespace for example?
boydjohnson (Fri, 14 Jul 2017 14:59:41 GMT):
Wildcarding does work.
zac (Fri, 14 Jul 2017 15:01:43 GMT):
kewl
zac (Fri, 14 Jul 2017 15:02:30 GMT):
I'll use the wildcard for one example, full address for the other, and add a note about addressing generally with links to the relevant documents
zac (Fri, 14 Jul 2017 15:03:05 GMT):
@boydjohnson Is there an official warning about the downsides of wildcarding?
zac (Fri, 14 Jul 2017 15:03:22 GMT):
I get the sense it is generally not encouraged, even if it is possible.
boydjohnson (Fri, 14 Jul 2017 15:03:48 GMT):
It will reduce parallelism when using the parallel scheduler, but it should still be correct.
zac (Fri, 14 Jul 2017 16:25:38 GMT):
@FlyingTiger @boydjohnson
https://github.com/hyperledger/sawtooth-core/pull/713
trojan295 (Fri, 14 Jul 2017 18:29:25 GMT):
Has joined the channel.
trojan295 (Fri, 14 Jul 2017 18:33:29 GMT):
hey, I have a question about the transaction processors. Let's say I have an app, which is storing in the global state some data. Now a client sends a transaction, that he wants to store something under an address, but he would like to make this address only editable by himself (eg. only by the client, that uses the same private key, that was used for the initial write)
trojan295 (Fri, 14 Jul 2017 18:35:09 GMT):
OK, I can write a processor, what does this check and denies not authorized transactions, but what's, if someone runs a malicious processor, which allows such to action?
trojan295 (Fri, 14 Jul 2017 18:36:28 GMT):
Will this be somehow checked by other processor (that follow the protocol) or would someone need to check the whole blockchain for the history?
pschwarz (Fri, 14 Jul 2017 18:37:16 GMT):
That malicious processor would result in a different state root hash in the block (if it were to claim the block). The remainder of the network would find the block to be invalid and drop them.
pschwarz (Fri, 14 Jul 2017 18:37:16 GMT):
That malicious processor would result in a different state root hash in the block (if it were to claim the block). The remainder of the network would find the block to be invalid and drop it.
pschwarz (Fri, 14 Jul 2017 18:38:11 GMT):
When a block is claimed by a validator, it is sent to the rest of the network, where it is validated by it's peers.
pschwarz (Fri, 14 Jul 2017 18:39:24 GMT):
You can manage the authorization by using the transaction signer's public key (which is part of the header), which you would probably want to story with the data you are initially writing at the address
pschwarz (Fri, 14 Jul 2017 18:39:24 GMT):
You can manage the authorization by using the transaction signer's public key (which is part of the header), which you would probably want to store with the data you are initially writing at the address
trojan295 (Fri, 14 Jul 2017 18:44:59 GMT):
so simply, if such malicious processor would process a block, then the other peer's would see, that it's wasn't processed the way it should and would drop the block?
napapu (Fri, 14 Jul 2017 18:45:53 GMT):
Has joined the channel.
napapu (Fri, 14 Jul 2017 18:51:58 GMT):
Hi all, I have a question about submitting transactions to the chain. I'm a Java developer and I'm essentially trying to replicate sawtooth-core/sdk/examples/xo_python/sawtooth_xo/xo_client.py in Java. However, on setting everything up and making a POST I get the error *signature_verifier] batch failed signature validation*. I'm assuming I'm going wrong somewhere around creating TransactionHeader and BatchHeader signatures. I was wondering if there are any examples of this being done so I can take a gander at? I'm currently using the org.bitcoinj libraries for key creation and signing. I'm not sure how to go from the libraries's ECDSASignature class to something that the validator will accept. Thanks in advance!
kelly_ (Fri, 14 Jul 2017 18:52:38 GMT):
@trojan295 yes that is correct
kelly_ (Fri, 14 Jul 2017 18:53:28 GMT):
@Dan is there information on how to construct the signature for the block header?
trojan295 (Fri, 14 Jul 2017 18:53:58 GMT):
@pschwarz @kelly_ thx!
kelly_ (Fri, 14 Jul 2017 18:57:48 GMT):
@napapu have you seen this - http://intelledger.github.io/architecture/transactions_and_batches.html
kelly_ (Fri, 14 Jul 2017 18:58:40 GMT):
and/or this: http://intelledger.github.io/_autogen/sdk_TP_tutorial_java.html
kelly_ (Fri, 14 Jul 2017 18:59:01 GMT):
I assume yes, I think the issue is that the signature encoding with bitcoinj may be different than the one that we use
Dan (Fri, 14 Jul 2017 18:59:17 GMT):
@kelly_ @napapu This might help: http://intelledger.github.io/_autogen/txn_submit_tutorial.html
napapu (Fri, 14 Jul 2017 18:59:47 GMT):
@kelly_ Yes I have. Yes, my question is more around the submission side not the TP side
Dan (Fri, 14 Jul 2017 18:59:54 GMT):
signatures are notoriously difficult to get right the first time. you have to be bit for bit exact with what is expected.
kelly_ (Fri, 14 Jul 2017 19:00:31 GMT):
@dan should we add a specification for the signature?
napapu (Fri, 14 Jul 2017 19:00:38 GMT):
@Dan I have as well. I have read the strict criteria on the signature but haven't been able to produce it. I'll dig around further
kelly_ (Fri, 14 Jul 2017 19:00:51 GMT):
e.g. how key_handler.ecdsa_sign differ from the sign function in bitcoinj?
kelly_ (Fri, 14 Jul 2017 19:01:09 GMT):
i know there are different encodings, so may be good to specify that
Dan (Fri, 14 Jul 2017 19:01:45 GMT):
I'll have to look at what bicoinj is likely to give you. Do you have a link?
napapu (Fri, 14 Jul 2017 19:01:51 GMT):
@Dan @kelly_ There is more on the signature on http://intelledger.github.io/0.8/core_developers_guide/signing_transactions.html but people might assume that they aren't core developers and wouldn't try to look
kelly_ (Fri, 14 Jul 2017 19:02:10 GMT):
https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/crypto/TransactionSignature.java
kelly_ (Fri, 14 Jul 2017 19:03:04 GMT):
bitcoin uses DER encoding @Dan
Dan (Fri, 14 Jul 2017 19:03:22 GMT):
well won't that be fun
zac (Fri, 14 Jul 2017 19:03:33 GMT):
@trojan295 It's difficult because every language is going to have their own idiosyncrasies. I would read the document @Dan linekd to if you haven't already (http://intelledger.github.io/_autogen/txn_submit_tutorial.html). It goes through the process manually, and should cover most of the specifications.
kelly_ (Fri, 14 Jul 2017 19:03:41 GMT):
Bitcoin encoding is DER signature + sighash byte.
zac (Fri, 14 Jul 2017 19:04:02 GMT):
It is written around Python signatures, so you will have to do some translating.
zac (Fri, 14 Jul 2017 19:04:57 GMT):
Definitely let us know if there are any aspects of Java signing that the document misses. The goal is for that document to be as generic as possible, and to help people in exactly your situation regardless of what language they are using.
kelly_ (Fri, 14 Jul 2017 19:06:02 GMT):
@Dan I would think since we are using SECP256k1 that the signing woudl be the same in bitcoinj as they are both for bitcoin
kelly_ (Fri, 14 Jul 2017 19:06:18 GMT):
or are we using the library functions before the der encoding
Dan (Fri, 14 Jul 2017 19:07:14 GMT):
@napapu can you link me to the library you are using or link me to a code snippet you are using? We use 'compact encoding'. I'm not sure if what it says is DER is actually DER without looking at their code and I want to make sure I'm looking at the same code you are.
zac (Fri, 14 Jul 2017 19:07:21 GMT):
Did any write any actual Java clients?
zac (Fri, 14 Jul 2017 19:07:21 GMT):
Did anyone write any actual Java clients?
zac (Fri, 14 Jul 2017 19:07:39 GMT):
Or is all the example code Transaction Processors?
kelly_ (Fri, 14 Jul 2017 19:09:33 GMT):
Message Attachments
kelly_ (Fri, 14 Jul 2017 19:09:39 GMT):
@Dan ^ that is bitcoin's
napapu (Fri, 14 Jul 2017 19:12:16 GMT):
@Dan https://github.com/bitcoinj/bitcoinj/blob/master/core/src/main/java/org/bitcoinj/core/ECKey.java line 633. I'm using the *sign* method to takes the SHA256 hash of the header byteArray and returns the ECDSASignature object, then I'm using the hash512 method on the SDK Utils on the DER. That last step I think is certainly wrong but not sure what to do instead
zac (Fri, 14 Jul 2017 19:13:38 GMT):
can you get just the bytes for the ECDSASignature object?
Dan (Fri, 14 Jul 2017 19:13:47 GMT):
@kelly_ where does bitcoin use compact, since it was them that defined "compact" in the first place?
zac (Fri, 14 Jul 2017 19:14:04 GMT):
Off the top of my head, you just want to take those and format them in a hex string
zac (Fri, 14 Jul 2017 19:14:24 GMT):
Er yes, compact bytes
zac (Fri, 14 Jul 2017 19:14:24 GMT):
Er yes, raw bytes for the "compact" signature
zac (Fri, 14 Jul 2017 19:15:02 GMT):
But you definitely don't want to hash it again or anything
napapu (Fri, 14 Jul 2017 19:16:14 GMT):
@zac that class doesn't expose the raw bytes
kelly_ (Fri, 14 Jul 2017 19:17:29 GMT):
@Dan it looks like what @napapu is using returns the r and s values, do those just get concatenated for a 'compact' signature?
napapu (Fri, 14 Jul 2017 19:18:25 GMT):
@kelly_ that's what http://intelledger.github.io/core_developers_guide/signing_transactions.html says, so I can give that a try
kelly_ (Fri, 14 Jul 2017 19:19:23 GMT):
that seems right to be, but i'm neither a programmer nor a crypto expert :x
Dan (Fri, 14 Jul 2017 19:19:25 GMT):
be aware you might be given bigint objects rather than byte strings of those r, s values
Dan (Fri, 14 Jul 2017 19:19:33 GMT):
``` BigInteger[] components = signer.generateSignature(input.getBytes());
return new ECDSASignature(components[0], components[1]).toCanonicalised();```
kelly_ (Fri, 14 Jul 2017 19:19:48 GMT):
ah yes, @Dan it does say that in the bitcoin j library
kelly_ (Fri, 14 Jul 2017 19:22:12 GMT):
@Dan would line #87 here be better to use for java signing? - https://github.com/bitcoin-core/secp256k1/blob/master/src/java/org/bitcoin/NativeSecp256k1.java
Dan (Fri, 14 Jul 2017 19:23:24 GMT):
yeah that might be a better path @kelly_
kelly_ (Fri, 14 Jul 2017 19:23:43 GMT):
I don't think that is doing the encoding either, but could be wrong
zac (Fri, 14 Jul 2017 19:26:44 GMT):
I think you should be able to convert the _r_ and _s_ big ints to their hex byte representation and concatenate them
zac (Fri, 14 Jul 2017 19:27:04 GMT):
That is the impression I get from a quick googling anyway
Dan (Fri, 14 Jul 2017 19:27:31 GMT):
yes there are different biginteger methods to do that, but that could get messy.
zac (Fri, 14 Jul 2017 19:27:43 GMT):
If NativeSecp256k1.java can just spit out the compact sig bytes on its own, that would certainly be easier
Dan (Fri, 14 Jul 2017 19:28:56 GMT):
@napapu do you want to give that path a shot? use that bitcoin core library instead of bitcoinj. Your goal is to get a byte array for r and s values of the signature and no fancy encoding.
Dan (Fri, 14 Jul 2017 19:30:09 GMT):
In the sawtooth core we are using the same underlying library that bitcoin core is relying on so I'd wager the format of that byte array coming out of the bitcoin core java class is probably going to be the same format we are expecting.
napapu (Fri, 14 Jul 2017 19:30:28 GMT):
@Dan will do, thank you
zac (Fri, 14 Jul 2017 19:30:50 GMT):
Might be worth adding something about manually encoding r and s values to that txn submit document at some point
zac (Fri, 14 Jul 2017 19:31:11 GMT):
Not sure how often that will come up
kelly_ (Fri, 14 Jul 2017 19:31:14 GMT):
@zac agreed. maybe just a quick section on crypto expectations of validator
zac (Fri, 14 Jul 2017 19:31:41 GMT):
Both the Python and JS libraries I used returned the compact sig with built in methods
kelly_ (Fri, 14 Jul 2017 19:31:58 GMT):
does the javasdk have a java library in it for signing?
Dan (Fri, 14 Jul 2017 19:32:02 GMT):
disagree. we want to update the SDKs so people don't have to do this themselves.
zac (Fri, 14 Jul 2017 19:32:16 GMT):
well, that too
kelly_ (Fri, 14 Jul 2017 19:32:20 GMT):
@Dan well more for the 'developing without a sdk' section
zac (Fri, 14 Jul 2017 19:32:31 GMT):
I don't know if we will every have 100% coverage though
zac (Fri, 14 Jul 2017 19:32:31 GMT):
I don't know if we will ever have 100% coverage though
zac (Fri, 14 Jul 2017 19:33:23 GMT):
A lot of our current SDKs are missing a signing module, and even when those get added, there will always be languages people are using that we don't have an SDK for
Dan (Fri, 14 Jul 2017 19:34:27 GMT):
Ok, it shouldn't be a big deal to add an encoding link to that choose your own adventure doc.
zac (Fri, 14 Jul 2017 19:35:58 GMT):
@kelly_ I think that txn submit document should have every relevant cryptographic detail in it. Maybe there is another place to just list them out as a reference. But for me, cryptography is so foreign I wouldn't know what to do with the information if it was just listed out. I would need to follow a guide that showed me every implementation detail.
zac (Fri, 14 Jul 2017 19:35:58 GMT):
@kelly_ I think that txn submit document should have every relevant cryptographic detail in it. Maybe there is another place to just list them out as a reference too. But for me, cryptography is so foreign I wouldn't know what to do with the information if it was just listed out. I would need to follow a guide that showed me every implementation detail.
Dan (Fri, 14 Jul 2017 19:38:12 GMT):
Maybe the advice from today is on par though, that you need to use bitcoin's secp library. We can link to the compact signature definition in so far as that is formally specified. If you use a different library or that library doesn't support your language of choice then you are in unsupported territory.
kelly_ (Fri, 14 Jul 2017 19:38:52 GMT):
@Dan secp256k1 libraries aren't available for a lot of languages though
kelly_ (Fri, 14 Jul 2017 19:39:13 GMT):
at the same time, I think many libraries include the encodings
kelly_ (Fri, 14 Jul 2017 19:39:31 GMT):
for example, i think openSSL (which was before secp256k1) did the encoding
kelly_ (Fri, 14 Jul 2017 19:39:45 GMT):
i'm not sure about other popular crypto libraries like bouncy castle
Dan (Fri, 14 Jul 2017 19:39:54 GMT):
but you'll see where in bitcoin it complains about the openssl encoding as breaking with DER
Dan (Fri, 14 Jul 2017 19:40:24 GMT):
we can't support everything. where we've indicated we have support like Java we need a clean and easy to use mechanism.
Dan (Fri, 14 Jul 2017 19:40:41 GMT):
where people want to hack in uncharted territory, that's cool, but its not something that we would support.
kelly_ (Fri, 14 Jul 2017 19:41:24 GMT):
sure, in advance of us including them in the sdk, we could also just say 'these libraries should give you the write format' and link to the ones that we know of
kelly_ (Fri, 14 Jul 2017 19:41:30 GMT):
right now that is just secp256k1
Dan (Fri, 14 Jul 2017 19:41:32 GMT):
We might also want to get make a clear division of TP SDK vs. Client SDK
Dan (Fri, 14 Jul 2017 19:42:18 GMT):
for the TP side, it's really easy because you aren't dealing with any of this signing. the difficulty comes in on the client side.
amundson (Fri, 14 Jul 2017 19:42:41 GMT):
@Dan no need to package them separately (that I've thought of yet), but the package hierarchy within the sdk should be clear
Dan (Fri, 14 Jul 2017 19:42:58 GMT):
you mean client vs. tp?
amundson (Fri, 14 Jul 2017 19:43:18 GMT):
yes, and maybe other things that aren't specifically in one of those two
Dan (Fri, 14 Jul 2017 19:44:24 GMT):
I can see wanting to write a client for an existing TP in a different language. For example, there's a bond family running on the network written in python. my company joins the network and its our preference to write our trading front end with java.
amundson (Fri, 14 Jul 2017 19:45:03 GMT):
yeah, so you pull in sawtooth-sdk.jar (or whatever it is called)
amundson (Fri, 14 Jul 2017 19:45:15 GMT):
doesn't force you to start a TP
Dan (Fri, 14 Jul 2017 19:45:20 GMT):
sure.
amundson (Fri, 14 Jul 2017 19:46:13 GMT):
(I could argue the counter point that maybe they should be separate packages, but the complexity probably isn't worth it.)
Dan (Fri, 14 Jul 2017 19:46:19 GMT):
if we felt there wasn't a big overlap in backend vs front end languages then we might want a different mix.
amundson (Fri, 14 Jul 2017 19:46:45 GMT):
yeah, JS might be a specific exception where you don't want to pull TP code into the browser
kelly_ (Fri, 14 Jul 2017 19:47:08 GMT):
looks like bouncy castle returns r and s and big integers too
kelly_ (Fri, 14 Jul 2017 19:47:35 GMT):
as bigints*
Dan (Fri, 14 Jul 2017 19:48:02 GMT):
right. the bitcoinj library looked like it was using spongycastle which appears to be an offshoot of bouncycastle.
kelly_ (Fri, 14 Jul 2017 19:48:28 GMT):
lol
kelly_ (Fri, 14 Jul 2017 19:48:53 GMT):
here from stack overflow '''The expected ECDSA signature format that the BC (and other provider) implementations work with is a DER-encoded ASN.1 sequence containing two integer values r and s. This signature format has been specified in ANSI X9.62. This is the format in the first set of data you give (note that signature is a total of 70 bytes).'''
zac (Fri, 14 Jul 2017 19:49:51 GMT):
Message Attachments
Dan (Fri, 14 Jul 2017 19:50:14 GMT):
nice
Dan (Fri, 14 Jul 2017 19:50:32 GMT):
@kelly_ if you are bored you should figure out where bitcoin uses the compact format.
zac (Fri, 14 Jul 2017 19:50:39 GMT):
I think that should be added to our docs
zac (Fri, 14 Jul 2017 19:50:45 GMT):
I will submit a PR
kelly_ (Fri, 14 Jul 2017 19:51:16 GMT):
@Dan are you sure that it does?
zac (Fri, 14 Jul 2017 19:51:27 GMT):
Also, as far as packaging TP vs client, I think there is some shared code
Dan (Fri, 14 Jul 2017 19:51:46 GMT):
no. but they bothered to put it in the secp library so I figured there was a good chance someone had a use for it.
zac (Fri, 14 Jul 2017 19:51:49 GMT):
It's not an entirely clean division
kelly_ (Fri, 14 Jul 2017 19:52:50 GMT):
Everything in the Bitcoin protocol, including transaction signatures and alert signatures, uses DER encoding. This results in 71 bytes signatures (on average), as there are several header bytes, and the R and S valued are variable length.
For message signatures, a custom encoding is used which is more compact (and more recent) and supports public key recovery (given a message and a signature, find which public key would have created it). The code you're referring to in the question is for creating such signatures.
kelly_ (Fri, 14 Jul 2017 19:54:30 GMT):
message signatures are probably not used very often, the bitcoin client (bitcoin qt) allows you to sign and verify messages
kelly_ (Fri, 14 Jul 2017 19:54:41 GMT):
a pgp type of thing
Dan (Fri, 14 Jul 2017 20:01:27 GMT):
interesting. thanks.
GhadiShayban (Fri, 14 Jul 2017 20:19:07 GMT):
I spent an afternoon trying to make compact signatures with bitcoinj, and then validating them with python sawtooth_signing -- total fail
GhadiShayban (Fri, 14 Jul 2017 20:19:56 GMT):
A specification would certainly help... code would be even better
GhadiShayban (Fri, 14 Jul 2017 20:22:49 GMT):
personally i'd rather not have to do it through JNI with libsecp256k1
GhadiShayban (Fri, 14 Jul 2017 20:25:34 GMT):
https://jira.hyperledger.org/browse/STL-461
kelly_ (Fri, 14 Jul 2017 21:09:31 GMT):
@GhadiShayban maybe this - https://github.com/web3j/web3j/blob/master/src/main/java/org/web3j/crypto/Sign.java
kelly_ (Fri, 14 Jul 2017 21:09:32 GMT):
line 38
kelly_ (Fri, 14 Jul 2017 21:09:57 GMT):
'''
kelly_ (Fri, 14 Jul 2017 21:10:02 GMT):
'''
// 1 header + 32 bytes for R + 32 bytes for S
byte v = (byte) headerByte;
byte[] r = Numeric.toBytesPadded(sig.r, 32);
byte[] s = Numeric.toBytesPadded(sig.s, 32);
'''
kelly_ (Fri, 14 Jul 2017 21:10:36 GMT):
@Dan is that the same as libsecp256k1? or does it not even do the 1 byte for the header
Dan (Fri, 14 Jul 2017 21:12:24 GMT):
you would have to trim off that v byte
kelly_ (Fri, 14 Jul 2017 21:13:04 GMT):
@Dan the other option would be to just adopt the asn.1 der encoding
kelly_ (Fri, 14 Jul 2017 21:13:12 GMT):
if that is what openssl, bouncy castle, etc do
kelly_ (Fri, 14 Jul 2017 21:13:20 GMT):
but then you can't do pub key recovery, is that right?
Dan (Fri, 14 Jul 2017 21:14:00 GMT):
I think those are separate issues
Dan (Fri, 14 Jul 2017 21:14:52 GMT):
we could adopt der, but that would be a significant change because it would break everyone else's stuff that was relying on compact sigs
kelly_ (Fri, 14 Jul 2017 21:15:35 GMT):
right
Dan (Fri, 14 Jul 2017 21:15:43 GMT):
And I'd have to look again, but there were complaints about openssl's handling of der as out of spec, so that might not be quite as broad as one would think.
kelly_ (Fri, 14 Jul 2017 21:21:28 GMT):
the other option is this - https://stackoverflow.com/questions/34063694/fixed-length-64-bytes-ec-p-256-signature-with-jce
kelly_ (Fri, 14 Jul 2017 21:21:44 GMT):
which would be providing advice on how to take a der encoded signature and parse it to create a compact sig
napapu (Fri, 14 Jul 2017 21:45:25 GMT):
@kelly_ following that last example, I seem to have got it working with bitcoinj and ECDSASignature class, trim the R and S to fit into the 64 byte array and then Hex.encode the resulting array
kelly_ (Fri, 14 Jul 2017 22:45:46 GMT):
@napapu that's awesome!
jiun-siang (Sat, 15 Jul 2017 18:37:03 GMT):
Has joined the channel.
Dan (Sun, 16 Jul 2017 23:55:42 GMT):
awesome!
cre8bidio (Mon, 17 Jul 2017 00:45:15 GMT):
Has joined the channel.
FlyingTiger (Mon, 17 Jul 2017 01:32:59 GMT):
@zac :thumbsup: https://github.com/hyperledger/sawtooth-core/pull/713
AlexGvozden (Mon, 17 Jul 2017 06:44:19 GMT):
Has joined the channel.
usanyal (Mon, 17 Jul 2017 17:23:11 GMT):
hi
usanyal (Mon, 17 Jul 2017 17:23:50 GMT):
Can someone help?
usanyal (Mon, 17 Jul 2017 17:27:54 GMT):
$ sudo apt-get install -y sawtooth -- I'm getting an error: Unable to locate package
jsmitchell (Mon, 17 Jul 2017 17:28:36 GMT):
@rbuysse @adamludvik ^
rbuysse (Mon, 17 Jul 2017 17:30:27 GMT):
Have you already added the repository?
rbuysse (Mon, 17 Jul 2017 17:32:26 GMT):
try rerunning these to make sure they succeeded.
rbuysse (Mon, 17 Jul 2017 17:32:34 GMT):
```
rbuysse (Mon, 17 Jul 2017 17:32:38 GMT):
```$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8AA7AF1F1091A5FD
$ sudo add-apt-repository 'deb http://repo.sawtooth.me/ubuntu/0.8/stable xenial universe'
$ sudo apt-get update```
usanyal (Mon, 17 Jul 2017 17:35:47 GMT):
yes
usanyal (Mon, 17 Jul 2017 17:41:55 GMT):
Is the package present in this repository?
Dan (Mon, 17 Jul 2017 17:46:29 GMT):
sometimes I've had proxy issues where I cannot reach the key server and I do not notice that error.
usanyal (Mon, 17 Jul 2017 17:47:50 GMT):
There maybe a proxy issue. Could you tell me how to overcome?
usanyal (Mon, 17 Jul 2017 17:50:52 GMT):
i could fetch key server,
usanyal (Mon, 17 Jul 2017 17:51:26 GMT):
but do I cannot use $ sudo apt-get update
usanyal (Mon, 17 Jul 2017 17:51:48 GMT):
there are error: -5 host name cannot be resolved
Dan (Mon, 17 Jul 2017 17:53:22 GMT):
This is what it looks like on my system...
```ubuntu@ubuntu-xenial:/project/sawtooth-core$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8AA7AF1F1091A5FD
Executing: /tmp/tmp.6QFq8kQbbR/gpg.1.sh --keyserver
hkp://keyserver.ubuntu.com:80
--recv-keys
8AA7AF1F1091A5FD
gpg: requesting key 1091A5FD from hkp server keyserver.ubuntu.com
gpg: key 1091A5FD: "Hyperledger Sawtooth Signing Key
Dan (Mon, 17 Jul 2017 17:54:11 GMT):
If you are getting a host name error that could be a couple issues including proxy.
Dan (Mon, 17 Jul 2017 17:54:30 GMT):
I think we have some proxy hints in our docs... let me look ...
Dan (Mon, 17 Jul 2017 17:56:24 GMT):
There's a couple places, but let me get you pointed to the right ones.
Dan (Mon, 17 Jul 2017 17:56:46 GMT):
Are you following the app developers guide or core developers guide? or what is it you are trying to follow?
usanyal (Mon, 17 Jul 2017 18:07:55 GMT):
app developers guide
usanyal (Mon, 17 Jul 2017 18:09:09 GMT):
sudo apt-get update is not working properly
usanyal (Mon, 17 Jul 2017 18:09:38 GMT):
my network is failing
usanyal (Mon, 17 Jul 2017 18:09:43 GMT):
I think that is the issue
Dan (Mon, 17 Jul 2017 18:09:48 GMT):
ok, we might be missing some help on proxy in that doc, but what you probably want to do is set environment variables for `http_proxy` and `https_proxy`
Dan (Mon, 17 Jul 2017 18:10:40 GMT):
I'm assuming you are using the ubuntu section of the app dev guide? http://intelledger.github.io/app_developers_guide/ubuntu.html
Dan (Mon, 17 Jul 2017 18:11:57 GMT):
if so you'll want to set the variables something like this:
`export http_proxy=http://your.proxy.server:123`
Dan (Mon, 17 Jul 2017 18:12:10 GMT):
and replace 123 with the actual proxy port.
usanyal (Mon, 17 Jul 2017 18:12:47 GMT):
yes
usanyal (Mon, 17 Jul 2017 18:12:49 GMT):
I have tried this though
Dan (Mon, 17 Jul 2017 18:19:24 GMT):
can you reach other sites? Like what does this do?
`curl https://www.yahoo.com/ | head`
usanyal (Mon, 17 Jul 2017 18:20:26 GMT):
I'll have to check it tomm
usanyal (Mon, 17 Jul 2017 18:20:39 GMT):
i am using it in my office desktop
e-johnson (Tue, 18 Jul 2017 01:24:32 GMT):
Has joined the channel.
haridhakshini (Tue, 18 Jul 2017 14:37:51 GMT):
Hi!
I was going through the intkey_python transaction processor code. I don't seem to understand the usage of CBOR in it. It would be great if someone can throw some light on this. Thanks!
Dan (Tue, 18 Jul 2017 14:48:11 GMT):
@toddojala ^
toddojala (Tue, 18 Jul 2017 14:51:51 GMT):
@haridhakshini Hello there... Let's see if I can help you. FYI I have a computer hardware issue, so may be delayed in responding at times.
toddojala (Tue, 18 Jul 2017 14:52:19 GMT):
@haridhakshini Basically, the encoding used for the stored data in the ledger is arbitrary, and can be anything.
toddojala (Tue, 18 Jul 2017 14:53:33 GMT):
@haridhakshini CBOR is one way of serializing data, and is based on JSON. Other transaction families, such as XO, use different formats to serialize & store the data.
toddojala (Tue, 18 Jul 2017 14:54:25 GMT):
@haridhakshini The important thing is that the way the data is stored should be deterministic - that is, the same intkey key-value pairs are always stored the exact same way. Does that help?
toddojala (Tue, 18 Jul 2017 15:00:24 GMT):
@haridhakshini A different example is XO (tic-tac-toe), which simply uses a CSV utf-8 encoded string to store the data in state: https://github.com/ojalatodd/sawtooth-core/blob/master/sdk/examples/xo_python/sawtooth_xo/processor/handler.py
haridhakshini (Tue, 18 Jul 2017 15:03:50 GMT):
@toddojala Ohh yea! Got that. I will look into the use of CSV in the xo processor as well.
Thanks a lot! :)
toddojala (Tue, 18 Jul 2017 15:04:33 GMT):
@haridhakshini You are welcome. Keep the questions coming. If I can't answer them, someone else surely can.
haridhakshini (Tue, 18 Jul 2017 15:05:18 GMT):
Sure! Thank you!
AntonOyung (Tue, 18 Jul 2017 18:33:05 GMT):
If I'd like to import a python package to use where do I need to update the dependencies to ensure it's imported properly? I'm looking at install_packaging_deps but it doesn't seem to be working.
kelly_ (Tue, 18 Jul 2017 18:34:10 GMT):
@rbuysse
kelly_ (Tue, 18 Jul 2017 18:34:24 GMT):
may know
pschwarz (Tue, 18 Jul 2017 19:07:55 GMT):
@AntonOyung What are you trying to do? There are possibly a lot of answers to that question, so it might help narrow it down
kelly_ (Tue, 18 Jul 2017 22:23:22 GMT):
@AkarshaMahadeva hey!
haridhakshini (Wed, 19 Jul 2017 08:28:58 GMT):
Can someone explain the role of populate.py and generate.py from the client_cli in the intkey processor? Why is this needed when create_batch.py exists?
Thank You!
haridhakshini (Wed, 19 Jul 2017 12:40:30 GMT):
^Just saw that a similar question was posted before. Got it. Please ignore. Thanks!
Dan (Wed, 19 Jul 2017 14:49:51 GMT):
After speaking with @haridhakshini I'm looking at the thread with jjason on June 26th. It looks like there's some overlap between create_batch, populate, and generate. And maybe @toddojala is the man with the answers :) ? if create_batch supplants populate and generate can those be removed?
More generally what is our example for introducing a new user to make a very simple client / transaction submission? I gather most of our docs talk about the transaction processor, the server-side part of transaction families.
toddojala (Wed, 19 Jul 2017 14:51:44 GMT):
create_batch was meant to simplify things and combine the "populate" and "generate" functions, as I recall. Unless particular use cases require doing populate and generate separately, I would suggest that they can be removed.
toddojala (Wed, 19 Jul 2017 14:54:46 GMT):
@Dan In this doc/section we show how to create Intkey transactions and submit them with "intkey load," and we go into more a more complete description of the whole process in the "Intro to the XO Transaction Family. "
toddojala (Wed, 19 Jul 2017 14:54:46 GMT):
@Dan In this doc/section we show how to create Intkey transactions and submit them with "intkey load": http://intelledger.github.io/app_developers_guide/docker.html#using-the-cli-commands
toddojala (Wed, 19 Jul 2017 14:54:46 GMT):
@Dan In this doc/section we show how to create Intkey transactions and submit them with "intkey loadz and we go into more a more complete description of the whole process in the "Intro to the XO Transaction Family. "
toddojala (Wed, 19 Jul 2017 14:54:46 GMT):
@Dan In this doc/section we show how to create Intkey transactions and submit them with "intkey load": http://intelledger.github.io/app_developers_guide/docker.html#using-the-cli-commands and we go into more a more complete description of the whole process in the "Intro to the XO Transaction Family. "
Dan (Wed, 19 Jul 2017 14:58:58 GMT):
"This doc"? Were you sending a link?
toddojala (Wed, 19 Jul 2017 14:59:16 GMT):
I tried. Let's try that again.
toddojala (Wed, 19 Jul 2017 15:00:56 GMT):
and we go into more a more complete description of the whole process in the "Intro to the XO Transaction Family. "
tim-d-blue (Wed, 19 Jul 2017 15:03:26 GMT):
Has joined the channel.
Dan (Wed, 19 Jul 2017 15:27:21 GMT):
@haridhakshini you'll see in create_batch.py the protobufs we talked about. They are like envelopes. There's one for the batch. And the batch wraps a protobuf for the transaction(s). Within the transaction there is a payload. In this case the payload is serialized using cbor, but the concept is similar to using protobuf. Both the client and the server processes have the same way to interpret the data sent over the wire.
haridhakshini (Wed, 19 Jul 2017 16:18:39 GMT):
@Dan ^That makes it clear. Thank you! :)
GhadiShayban (Wed, 19 Jul 2017 16:55:10 GMT):
```
(ns sawtooth-signing
(:import org.bitcoinj.core.ECKey
org.bitcoinj.core.DumpedPrivateKey
org.bitcoinj.core.Sha256Hash
org.bitcoinj.core.Utils
org.bitcoinj.params.MainNetParams))
(def ^{:doc "generates an in-memory priv key representation from the .wif"}
wif->key
(let [MAINNET (MainNetParams/get)]
(fn [^String s]
(-> (DumpedPrivateKey/fromBase58 MAINNET s)
(.getKey)))))
;; https://bitcoin.stackexchange.com/a/19539
(defn priv->pub
"Returns the compressed format public key (65 bytes) from the uncompressed hex (130 bytes)"
[^ECKey private-key]
(let [uncompressed (.getPublicKeyAsHex private-key)]
(str "03" (subs uncompressed 2 66))))
(defn sign
"sign a byte array and return a hex representation of the bitcoin 'compact signature'"
[^ECKey pk ^bytes data]
(let [h (Sha256Hash/of data)
sig (.sign pk h)
arr (byte-array 64)]
(System/arraycopy (Utils/bigIntegerToBytes (.-r sig) 32) 0 arr 0 32)
(System/arraycopy (Utils/bigIntegerToBytes (.-s sig) 32) 0 arr 32 32)
(.encode Utils/HEX arr)))
```
GhadiShayban (Wed, 19 Jul 2017 16:55:29 GMT):
example clojure code to sign transactions ^. I'll transliterate to straight up Java and make a PR =)
jsmitchell (Wed, 19 Jul 2017 16:55:39 GMT):
heh, thanks!
zac (Wed, 19 Jul 2017 17:15:07 GMT):
@GhadiShayban Nice.
AkarshaMahadeva (Wed, 19 Jul 2017 18:25:34 GMT):
Hello, If I need to commit a transaction to genesis block once the block chain has further blocks ahead of it is it possible?
For instance I need to maintain an hierarchical db. Where in a few transactions come into existence later in time. Is it still possible to do so?
GhadiShayban (Wed, 19 Jul 2017 18:48:06 GMT):
@Dan https://github.com/hyperledger/sawtooth-core/pull/720 prelim
toddojala (Wed, 19 Jul 2017 18:51:44 GMT):
@AkarshaMahadeva Once a block has been committed to the block chain, it won't be possible to "update" it. However, you could store and update objects/data in state, which would be reflected in the blockchain in later blocks.
AkarshaMahadeva (Wed, 19 Jul 2017 18:52:38 GMT):
Thank you
AkarshaMahadeva (Wed, 19 Jul 2017 18:59:17 GMT):
If we consider a use case where in one transaction is dependent on other but happens in other time period wide apart. What would be the best way to maintain relation between them. Such that using the most recent transaction , a very old transaction can be tracked.
usanyal (Wed, 19 Jul 2017 19:06:47 GMT):
What is the difference between a block and batch?
jsmitchell (Wed, 19 Jul 2017 19:07:59 GMT):
@AkarshaMahadeva what do you mean by 'tracked'?
jsmitchell (Wed, 19 Jul 2017 19:08:35 GMT):
@usanyal blocks contain an ordered list of batches. batches contain an ordered list of transactions.
usanyal (Wed, 19 Jul 2017 19:09:27 GMT):
Ok, thank you
jsmitchell (Wed, 19 Jul 2017 19:10:46 GMT):
all the transactions in a batch must succeed in order, otherwise the batch is considered invalid. If the batch is invalid none of the transactions are applied. If the batch is invalid during block publishing, then the batch will not be included in the block. If the batch is invalid during block validation, then the whole block will be considered invalid.
usanyal (Wed, 19 Jul 2017 19:12:01 GMT):
ok, i understand
usanyal (Wed, 19 Jul 2017 19:12:26 GMT):
How is this implemented in Java? Is there a simpler code than the tic-tac-toe?
jsmitchell (Wed, 19 Jul 2017 19:21:58 GMT):
the tic-tac-toe transaction processor code is only determining whether a given transaction is valid and then changes the global state. The concerns of block publishing and block validation are in the core validator code (Python).
jsmitchell (Wed, 19 Jul 2017 19:22:20 GMT):
If you want to see a simpler transaction family than tic-tac-toe, take a look at intkey
usanyal (Wed, 19 Jul 2017 19:30:09 GMT):
There is no code which does the entire work? creation of transaction and validation and then updation for Java?
usanyal (Wed, 19 Jul 2017 19:30:29 GMT):
*updation of global state
zac (Wed, 19 Jul 2017 19:39:16 GMT):
@usanyal What is your use case? The concerns have been separated here. Validating of blocks, batches, and transactions is generalized and all happens in the core code. Validating of the _payload_ in an individual transaction, and applying the necessary state changes, is handled by transaction processors like _IntKey_ and the tic-tac-toe family.
zac (Wed, 19 Jul 2017 19:49:37 GMT):
So for a specific blockchain, you should not have to modify the core code at all. You will only need to write code that handles transaction payloads.
zac (Wed, 19 Jul 2017 19:49:37 GMT):
So for a specific blockchain application, you should not have to modify the core code at all. You will only need to write code that handles transaction payloads.
usanyal (Wed, 19 Jul 2017 19:50:10 GMT):
Such as the intKey one?
zac (Wed, 19 Jul 2017 19:51:59 GMT):
Yes. The IntKey "Transaction Family" is made up primarily of a _Transaction Processor_ which does the actual work of reading payloads and modifying state.
zac (Wed, 19 Jul 2017 19:52:50 GMT):
You could also say the family includes some concepts like namespacing state, or the CLI clients that know how to build an IntKey payload properly.
zac (Wed, 19 Jul 2017 19:53:32 GMT):
But the Transaction Processor is the major thing you will need to build for a specific application.
usanyal (Wed, 19 Jul 2017 19:54:58 GMT):
Transaction processor for IntKey is not provided in the documentation?
zac (Wed, 19 Jul 2017 19:59:08 GMT):
Well, the processor the processor is a piece of example code. It is not included in the documentation in its entirety, but is [publicly available](https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples/intkey_java).
zac (Wed, 19 Jul 2017 19:59:08 GMT):
Well, the processor is a piece of example code. It is not included in the documentation in its entirety, but is [publicly available](https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples/intkey_java).
usanyal (Wed, 19 Jul 2017 20:00:17 GMT):
ok, thank you
zac (Wed, 19 Jul 2017 20:00:25 GMT):
But you might be more interested in either the [IntKey Transaction Family Specification](http://intelledger.github.io/transaction_family_specifications/integerkey_transaction_family.html) or the [Java Transaction Processor Tutorial](http://intelledger.github.io/_autogen/sdk_TP_tutorial_java.html)
usanyal (Wed, 19 Jul 2017 20:01:51 GMT):
Ok, I will go through these
GhadiShayban (Thu, 20 Jul 2017 20:37:29 GMT):
Currently the Java SDK does not contain any tests, nor test framework. I'd like to add some as part of a PR. Does anyone have strong opinions on what testing framework or just KISS with JUnit?
jordan.k.miles (Thu, 20 Jul 2017 20:41:35 GMT):
Has joined the channel.
jordan.k.miles (Thu, 20 Jul 2017 20:42:23 GMT):
hi guys. I'm looking at several different hyperledger projects. I've been looking at fabric for a while and now sawtooth. is it fair to say that sawtooth "Transaction Handlers" are similar to smart contracts?
zac (Thu, 20 Jul 2017 20:47:41 GMT):
The term "smart contract" gets thrown around a lot
zac (Thu, 20 Jul 2017 20:47:51 GMT):
I'm not sure there is a really clearly definition
zac (Thu, 20 Jul 2017 20:48:25 GMT):
A Transaction Handler would be what executed the logic of your smart contracts
zac (Thu, 20 Jul 2017 20:49:10 GMT):
It is not itself one contract
zac (Thu, 20 Jul 2017 20:49:23 GMT):
More like an application that can run contracts
pschwarz (Thu, 20 Jul 2017 21:05:09 GMT):
@GhadiShayban It is tested tangentially, via integration tests that are written in python, but you are correct that there are no unit tests per se. I'd be happy with JUnit, personally (though a more recent version, or course)
jordan.k.miles (Thu, 20 Jul 2017 21:23:04 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=hYQMpLHxpQF5SNziZ) @zac I get how sawtooth is an application that can run contracts. but is the transaction handler itself designed to operate like chaincode? it looks to me like it is.
zac (Thu, 20 Jul 2017 21:24:01 GMT):
You can think of the Transaction Handler as an application
zac (Thu, 20 Jul 2017 21:24:10 GMT):
Though obviously it can't be run outside of Sawtooth
zac (Thu, 20 Jul 2017 21:24:56 GMT):
But it will take in each Transaction payload submitted
zac (Thu, 20 Jul 2017 21:25:12 GMT):
And then can run whatever logic on that payload you need, including modifying the blockchain state
zac (Thu, 20 Jul 2017 21:26:08 GMT):
So say you want a "smart contract" that stipulates people should be able to send each other money, but only if they have that money in their account
jordan.k.miles (Thu, 20 Jul 2017 21:26:11 GMT):
ahh ok. so the handler takes everything and the logic determines what/if it should do anything.
zac (Thu, 20 Jul 2017 21:27:04 GMT):
youwould send a payload that looks something like:
```
{
action: send
from: Bob
to: Jane
amount: 1000
}
```
zac (Thu, 20 Jul 2017 21:27:28 GMT):
(this is arbitrary pseudocode, you could define it however you like)
zac (Thu, 20 Jul 2017 21:28:32 GMT):
The handler would look at that code, see that it is a "send" action, check that Bob has 1000 funds, and if so, remove 1000 from Bob's account, and add 1000 to Jane's
zac (Thu, 20 Jul 2017 21:28:32 GMT):
The handler would look at that payload, see that it is a "send" action, check that Bob has 1000 funds, and if so, remove 1000 from Bob's account, and add 1000 to Jane's
jordan.k.miles (Thu, 20 Jul 2017 21:29:08 GMT):
Ok. I think I'm with you now.
jordan.k.miles (Thu, 20 Jul 2017 21:29:35 GMT):
but you can partition these handlers by namespace, correct?
zac (Thu, 20 Jul 2017 21:29:43 GMT):
Yes
zac (Thu, 20 Jul 2017 21:31:25 GMT):
You could also define more robust Transaction payloads that include code to be executed. The Handler would then be the interpreter for that payload code. This is closer to what people are usually talking about when they refer to "smart contracts"
zac (Thu, 20 Jul 2017 21:31:59 GMT):
The Sawtooth Burrow does this using EVM synbtax
zac (Thu, 20 Jul 2017 21:31:59 GMT):
Sawtooth Burrow does this using EVM syntax
zac (Thu, 20 Jul 2017 21:32:44 GMT):
For a lot of use cases though, it would be faster and more secure to let the logic be fixed and live in the Transaction Processor
jordan.k.miles (Thu, 20 Jul 2017 21:33:16 GMT):
cool. I started out looking at fabric and chaincode, so it can be confusing trying to figure out what, exactly, people are referring to.
jordan.k.miles (Thu, 20 Jul 2017 21:33:22 GMT):
a lot of abstract terms.
zac (Thu, 20 Jul 2017 21:33:29 GMT):
yes
zac (Thu, 20 Jul 2017 21:33:53 GMT):
chaincode is not exactly analogous to anything in Sawtooth, but does perform some of the same functions as Transaction Processors
zac (Thu, 20 Jul 2017 21:34:58 GMT):
The Sawtooth documentation isn't quite complete yet, I don't think there is just an overview for Transaction Processors
zac (Thu, 20 Jul 2017 21:35:19 GMT):
But there is a tutorial for writing one, which should cover a lot of the concepts
zac (Thu, 20 Jul 2017 21:35:35 GMT):
http://intelledger.github.io/_autogen/sdk_TP_tutorial_python.html
jordan.k.miles (Thu, 20 Jul 2017 21:35:40 GMT):
yeah, I'm just playing around with it right now. I noticed the SDK isn't in maven central yet.
jordan.k.miles (Thu, 20 Jul 2017 21:35:56 GMT):
yep, went through the Java tutorial.
zac (Thu, 20 Jul 2017 21:36:03 GMT):
ah, cool
jordan.k.miles (Thu, 20 Jul 2017 21:36:43 GMT):
but yeah. thanks for the info. I'm going to keep playing around with it.
zac (Thu, 20 Jul 2017 21:37:30 GMT):
no problem
Dan (Fri, 21 Jul 2017 13:01:31 GMT):
@jordan.k.miles you might glean something from this post: https://www.hyperledger.org/blog/2017/06/22/whats-a-transaction-family
Dan (Fri, 21 Jul 2017 13:02:35 GMT):
as far as terms Transaction Family is the concept of related transaction types that get deployed together. The embodiment in server-side code is Transaction Processors. The handler is the heart of the Transaction Processor that will interpret the guts of the transaction.
AkarshaMahadeva (Fri, 21 Jul 2017 15:54:56 GMT):
Hello, Whenever a new user is created in the xo game using xo init --username x, an address and a link is generated. What does this address indicate and what does the link point to
zac (Fri, 21 Jul 2017 16:26:18 GMT):
Good you post some example output?
boydjohnson (Fri, 21 Jul 2017 16:36:48 GMT):
The url generated points to the rest api. So in docker it needs to be set to rest_api:8080 or if your rest api container is named rest_api.
jaredcorduan (Fri, 21 Jul 2017 19:33:46 GMT):
can you currently use the settings transaction family to control allowable versions of the other transaction families, or is that an upcoming feature? if so, what is the key name for the proposal?
boydjohnson (Fri, 21 Jul 2017 19:38:35 GMT):
`sawtooth.validator.transaction_families` I'll get you some docs on that.
jaredcorduan (Fri, 21 Jul 2017 19:39:29 GMT):
thank you!
jaredcorduan (Fri, 21 Jul 2017 19:41:10 GMT):
ah yea, I see it in `sawtooth_validator/execution/executor.py`, I'm gtg, thanks again
boydjohnson (Fri, 21 Jul 2017 19:41:25 GMT):
http://intelledger.github.io/app_developers_guide/docker.html?highlight=sawtooth%20validator%20transaction_families#settings-transaction-family-usage Here is an example.
ponle (Sat, 22 Jul 2017 03:12:32 GMT):
Has joined the channel.
ponle (Sat, 22 Jul 2017 03:12:44 GMT):
Please can anyone explain the difference between Hyperledger Fabric and Hyper ledger Sawtooth.
And for a beginner which of the two options will be better for starting out with simple blockchain
jordan.k.miles (Sat, 22 Jul 2017 15:58:44 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Qhbzy6hajKqDHatTL) @Dan Thanks! I'll check it out.
byscuellar (Mon, 24 Jul 2017 04:02:24 GMT):
Has joined the channel.
zac (Mon, 24 Jul 2017 13:34:05 GMT):
@ponle I haven't used Fabric a ton, but most of the differences I know of are somewhat technical. At the broad level, they both seek to solve the same problem: creating a general purpose, scalable, enterprise blockchain, which is highly modular and secure.
zac (Mon, 24 Jul 2017 13:34:05 GMT):
@ponle I haven't used Fabric a ton. Most of the differences I know of are somewhat specific implementation details. At the broad level, they both seek to solve the same problem: creating a general purpose, scalable, enterprise blockchain, which is highly modular and secure.
zac (Mon, 24 Jul 2017 13:36:16 GMT):
In my opinion, Sawtooth does a better job at solving this problem. It is less opinionated than Fabric, so you have more freedom to implement whatever you need your blockchain app to do. It also isolates logic better, which should be both more secure and more performant.
zac (Mon, 24 Jul 2017 13:39:04 GMT):
I also think a lot of those modular design choices have also had the consequence of making development easier. The concerns are better separated, so you mostly only have to worry about the mechanics of your use case.
zac (Mon, 24 Jul 2017 13:39:17 GMT):
BUT, I would talk to the #fabric folks too. See what they have to say.
zac (Mon, 24 Jul 2017 13:39:31 GMT):
I am a _little_ biased.
Dan (Mon, 24 Jul 2017 13:42:00 GMT):
@ponle Sawtooth provides global state agreement. I do not believe that is supported by Fabric. http://intelledger.github.io/architecture/global_state.html
jordan.k.miles (Mon, 24 Jul 2017 23:05:04 GMT):
does the SDK provide a way to create a 64-bit signature for EC? I'm having trouble finding a way to do it. Using java BouncyCastle with the ECDSA algorithm and secp256k1 curve.
jordan.k.miles (Mon, 24 Jul 2017 23:05:46 GMT):
I'm seeing in the docs the `key_handler.ecdsa_serialize_compact(batch_signature)` but bouncycastle doesn't have anything like that that I've seen.
Dan (Mon, 24 Jul 2017 23:10:17 GMT):
hey @jordan.k.miles, @GhadiShayban just put up a PR to add java signing support
Dan (Mon, 24 Jul 2017 23:10:57 GMT):
And @jsmitchell just merged it.. https://github.com/hyperledger/sawtooth-core/pull/720
Dan (Mon, 24 Jul 2017 23:11:44 GMT):
if you are working with the published builds you won't see this immediately. If you are building everything from source though, it should be in a core pull.
jordan.k.miles (Mon, 24 Jul 2017 23:18:35 GMT):
cool! I'll pull it and try it out. thanks!
randombishop (Tue, 25 Jul 2017 10:25:54 GMT):
Hi, a general question please because I couldn't google it : if I use simple python dicts as payloads in my transaction processor, with cbor encoding, will cbor.dumps() always generate the same bytes consistently accross different python versions/platforms/etc. ? Is that somehow guaranteed by cbor format ? And if not, what is the way to achieve this condition ? Tks !
Dan (Tue, 25 Jul 2017 13:44:09 GMT):
@amundson ^
amundson (Tue, 25 Jul 2017 14:16:45 GMT):
@randombishop we have stayed away from cbor in payloads for the most part because of the differences in language bindings (languages can add tags, and thus produce serialized bytes that are not the same). We instead use protobuf more often; in protobuf, you can't use the map type as it is unordered, so we instead use a list of key, value pairs. There is an example of that here - https://github.com/hyperledger/sawtooth-core/blob/master/protos/setting.proto . If you want to stick with cbor, the 0.7 branch has some code for serializing that might be helpful to look at. See https://github.com/hyperledger/sawtooth-core/blob/0-7/validator/gossip/common.py, "dict2cbor". The sort_keys=True options will cause the dict() to be ordered prior to serialization
amundson (Tue, 25 Jul 2017 14:19:00 GMT):
Not sure if the unicode/ascii stuff is interesting (seems bad to me). I think that was a workaround for a cross-language compatibility issue at the time.
randombishop (Tue, 25 Jul 2017 14:25:38 GMT):
Thanks a lot @amundson
pschwarz (Tue, 25 Jul 2017 14:46:59 GMT):
There were also some issues with floats, particularly if coming from JavaScript
pschwarz (Tue, 25 Jul 2017 14:47:15 GMT):
Though, avoid those too :)
GhadiShayban (Tue, 25 Jul 2017 15:00:17 GMT):
@amundson @randombishop I've been modifying the python cbor2 library to support what CBOR calls "canonical mode" -- byte-for-byte equivalence. having extensible tags is a huge advantage of CBOR and similar formats
GhadiShayban (Tue, 25 Jul 2017 15:00:54 GMT):
I agree that all the existing cbor language bindings suck in some one respect or another.
GhadiShayban (Tue, 25 Jul 2017 15:03:40 GMT):
If you have a fixed domain model or somewhat of a closed system, protobufs are a decent option (heeding the map ordering caveat above). neither Cap'n, FlatBuffers, nor thrift, nor protobufs natively have the equivalence property that sawtooth demands
GhadiShayban (Tue, 25 Jul 2017 15:05:07 GMT):
if you're using a language like go for transaction processors, you'll run into this problem really fast: hash maps in go have the hash function seeded _per hashmap instance_
GhadiShayban (Tue, 25 Jul 2017 15:05:07 GMT):
if you're using a language like go for transaction processors, you'll run into this problem really fast: hash maps in go have the hash function seeded differently _per hashmap instance_
amundson (Tue, 25 Jul 2017 15:21:31 GMT):
@GhadiShayban cool. the primary reason that the validator treats that data as opaque, instead of marshalling it as it did in 0.7, is so you can pick what works best for you. (we are liking protobuf, but no reason to force it on anyone). of course, the trade-off is you can shoot yourself in the foot if you don't use something deterministic.
AkarshaMahadeva (Tue, 25 Jul 2017 19:30:38 GMT):
Whenver a transaction is committed in XO there is an address generated. What does that signify? Can the address be used to refer to the history of transactions committed by that person
zac (Tue, 25 Jul 2017 19:32:20 GMT):
Looks like the address is generated from the game name: http://intelledger.github.io/transaction_family_specifications/xo_transaction_family.html#addressing
zac (Tue, 25 Jul 2017 19:32:52 GMT):
Also, every Sawtooth transaction family I know uses some sort of hashing scheme to generate addresses
zac (Tue, 25 Jul 2017 19:33:00 GMT):
Which means there is no way to derive meaning from them
zac (Tue, 25 Jul 2017 19:33:30 GMT):
It's a one way process: `game name --> hashed address`
zac (Tue, 25 Jul 2017 19:34:18 GMT):
I don't know enough about merkle addresses to say whether or not that is a requirement though
zac (Tue, 25 Jul 2017 19:34:53 GMT):
Maybe you could write a transaction family with addresses that tell you something about the data?
AkarshaMahadeva (Tue, 25 Jul 2017 19:34:59 GMT):
then what can be used to refer back to an item? If we are trying to link transactions? If Product A and B are related and I need to be able to refer to A and the link should be given by B
zac (Tue, 25 Jul 2017 19:35:53 GMT):
Why not `A`
zac (Tue, 25 Jul 2017 19:35:55 GMT):
?
zac (Tue, 25 Jul 2017 19:36:11 GMT):
Store that in B
zac (Tue, 25 Jul 2017 19:36:15 GMT):
You can go one way
zac (Tue, 25 Jul 2017 19:36:24 GMT):
`A --> hashed address`
zac (Tue, 25 Jul 2017 19:36:47 GMT):
You just can't start with the address and pull out what was originally used to generate it
boydjohnson (Tue, 25 Jul 2017 19:39:00 GMT):
You could store in a central location in State, all records of a type. So if A and B are the same type, there would be some address that contains the address of A and the address of B. Then when transaction B is looking for transaction A, it would query the central address of all transactions of that type.
zac (Tue, 25 Jul 2017 19:40:19 GMT):
(This is the same way hash-maps/dictionaries/objects work under the hood by the way. You never deal with the hashed index, because why would you, just the keys used to generate them, but if you happened to have the hashed index, you would not be able to derive the origin key from it)
zac (Tue, 25 Jul 2017 19:40:19 GMT):
(This is the same way hash-maps/dictionaries/objects work under the hood by the way. You never deal with the hashed index, because why would you, just the keys used to generate them, but if you happened to have the hashed index, you would not be able to derive the original key from it.)
zac (Tue, 25 Jul 2017 19:41:25 GMT):
@boydjohnson Is there any concern about the merkle tree becoming imbalanced or something? Is that way hashed addresses are generally used?
zac (Tue, 25 Jul 2017 19:41:25 GMT):
@boydjohnson Is there any concern about the merkle tree becoming imbalanced or something? Is that why hashed addresses are generally used?
boydjohnson (Tue, 25 Jul 2017 19:43:00 GMT):
I think the thing to worry about there is a whole bunch of transactions all referencing the same address and slowing things down.
GhadiShayban (Tue, 25 Jul 2017 19:56:29 GMT):
@dplumb Where can I find out the design for STL-445 stat collection library? We'd like to implement prometheus pull metrics instead of influx.
dplumb (Tue, 25 Jul 2017 20:03:36 GMT):
I did not end up creating a design document for stat collection. Instead of creating our own stat collection library, we are going to be using PyFormance
dplumb (Tue, 25 Jul 2017 20:03:54 GMT):
https://github.com/omergertel/pyformance
dplumb (Tue, 25 Jul 2017 20:04:32 GMT):
I've done some PoCs but we're still working on how this will be implemented
GhadiShayban (Tue, 25 Jul 2017 20:07:26 GMT):
ok -- looking at that library it's probably feasible to make a reporter/proxy to expose an endpoint for prometheus
dplumb (Tue, 25 Jul 2017 20:09:13 GMT):
Yes, I don't have much experience with Prometheus but I believe that should be fairly straightforward
kelly_ (Tue, 25 Jul 2017 20:22:46 GMT):
@GhadiShayban I believe @TomBarnes has been working on this
AkarshaMahadeva (Tue, 25 Jul 2017 23:24:59 GMT):
Whenever xo commands are run(xo_tp_python ) how which function calls the apply function in the handler
boydjohnson (Wed, 26 Jul 2017 00:38:15 GMT):
@AkarshaMahadeva The apply function in the handler is triggered by a ZeroMQ message being sent from the validator process to the transaction processor process. The message is a TP_PROCESS_REQUEST.
jordan.k.miles (Wed, 26 Jul 2017 00:44:49 GMT):
hey guys, been working with the java sdk and pulled down the Signing addition today. Wrestled with not having a valid signature for a while before I noticed that the public key is being generated with `return return "03" + privateKey.getPublicKeyAsHex()` I removed the `"03" + ` and the signature was validated successfully.
jordan.k.miles (Wed, 26 Jul 2017 00:45:47 GMT):
didn't know who should know that or where I should post it.
boydjohnson (Wed, 26 Jul 2017 00:46:47 GMT):
@jordan.k.miles This is a good spot. I'll take a look tomorrow morning.
AkarshaMahadeva (Wed, 26 Jul 2017 03:53:40 GMT):
Thank you so much Johnson
cooljackal (Wed, 26 Jul 2017 03:57:57 GMT):
Has joined the channel.
Otherside (Wed, 26 Jul 2017 07:58:55 GMT):
Has joined the channel.
Otherside (Wed, 26 Jul 2017 09:35:51 GMT):
Hi, anyone installed successfully sawtooth on raspberry pi?
Otherside (Wed, 26 Jul 2017 09:35:51 GMT):
Hi, has anyone installed successfully sawtooth on raspberry pi and could share how to do it?
toddojala (Wed, 26 Jul 2017 14:32:30 GMT):
@Otherside It should be possible, but I don't know of anyone who has done it yet. There may be dependencies that are missing on the OS you use on raspberry pi that may have to be manually built or installed. Maybe someone else here has experimented with Raspberry Pis and Sawtooth?
zac (Wed, 26 Jul 2017 15:04:32 GMT):
A big missing feature would probably be SGX. So you wouldn't be able to use PoET consensus.
zac (Wed, 26 Jul 2017 15:05:38 GMT):
The rest of the it would probably work fine if you went with a different consensus module.
zac (Wed, 26 Jul 2017 15:05:50 GMT):
Not sure about performance.
pschwarz (Wed, 26 Jul 2017 15:09:03 GMT):
You wouldn't be able to use PoET SGX. You could, at the moment, use Simulated PoET on a Raspberry Pi (assuming all the rest of the dependency are available for the Pi).
boydjohnson (Wed, 26 Jul 2017 15:34:37 GMT):
@jordan.k.miles Here is the pull request fixing that java signing issue you found. https://github.com/hyperledger/sawtooth-core/pull/724 Thanks!
meiguosg (Wed, 26 Jul 2017 15:54:01 GMT):
Has joined the channel.
meiguosg (Wed, 26 Jul 2017 15:56:35 GMT):
Hi Zac/everyone, if I understand correctly, {{sawtooth cli}} is using the REST API to fetch the data in the sawtooth blockchain, right? i.e: 'sawtooth block list' will call the REST API to view the blocks stored by the state.
Dan (Wed, 26 Jul 2017 16:22:54 GMT):
@toddojala do we have any docs describing how to use your custom TP. e.g. register the TP to settings, run the TP process and connect to the validator? I took a quick look in docs but what I found for xo mentioned mocks. I think @AkarshaMahadeva will need that kind of info as a next step.
pschwarz (Wed, 26 Jul 2017 16:32:30 GMT):
@meiguosg that is correct
meiguosg (Wed, 26 Jul 2017 16:33:01 GMT):
@pschwarz Thanks
toddojala (Wed, 26 Jul 2017 16:36:49 GMT):
@Dan I think we may need to flesh out these details with new documentation. Noted, and I will discuss those items with some people after reviewing the current docs, looking at the XO example code, etc. We will create stories based on findings!
toddojala (Wed, 26 Jul 2017 16:37:56 GMT):
@Dan Is is necessary to register a new "custom" TP using the Settings TP in order to use it, or will it just work if all defaults are used?
AkarshaMahadeva (Wed, 26 Jul 2017 17:11:54 GMT):
Error: no such image: sawtooth-ct-tp-python:: invalid reference format. When I tried to execute the yaml test file as guided in intkey transaction family
AkarshaMahadeva (Wed, 26 Jul 2017 17:12:30 GMT):
How can I add a new transaction family defined in example to the docker?
Dan (Wed, 26 Jul 2017 17:18:37 GMT):
@toddojala it's my understanding you have to register a TP in the settings family. that tells the network of all validators what families the network supports and tells each validator individually what it needs online to start validating txns. @amundson can correct me though.
jordan.k.miles (Wed, 26 Jul 2017 18:47:14 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=MrzhmiEQGnec3TasC) @boydjohnson Not a problem. Thanks!
Dan (Wed, 26 Jul 2017 18:55:21 GMT):
I was DM'ing with @AkarshaMahadeva and want to double check I'm not going down the wrong path...
If you are using the app dev guide using docker it appears you need to do some additional steps to get a shell that has all the pythonpath and other env stuff set correctly
At least based on the warning box here:
http://intelledger.github.io/app_developers_guide/docker.html#logging-into-the-client-container
Dan (Wed, 26 Jul 2017 18:55:41 GMT):
Can someone who devs with the docker env verify or correct?
boydjohnson (Wed, 26 Jul 2017 18:59:20 GMT):
Yeah, that is true, @Dan
mfford (Wed, 26 Jul 2017 21:06:42 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, July 27th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, July 27th
Time: 10-11am CDT
We are using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
Agenda:
1. Introductions-Mark Ford
2. State Delta Subscriber-Peter Schwarz
3. Open Forum
Siciliano (Thu, 27 Jul 2017 09:31:14 GMT):
Has joined the channel.
smagne (Thu, 27 Jul 2017 11:29:05 GMT):
Has joined the channel.
smagne (Thu, 27 Jul 2017 11:29:35 GMT):
Hello, I'm trying to setup a validator into a different docker instance and also change the database is that possible?
I found this: https://github.com/hyperledger/sawtooth-core/tree/master/validator/packaging but I don't know how to continue from there
toddojala (Thu, 27 Jul 2017 14:36:50 GMT):
^ @adamludvik
toddojala (Thu, 27 Jul 2017 14:37:19 GMT):
@smagne We provide a docker container running a validator. What do you mean by "different instance"?
smagne (Thu, 27 Jul 2017 14:37:45 GMT):
I mean a different docker container
adamludvik (Thu, 27 Jul 2017 14:39:02 GMT):
If you would like to create your own docker image, you will want to start with the ubuntu:xenial image and use the steps here as reference when writing your Dockerfile: http://intelledger.github.io/app_developers_guide/ubuntu.html
adamludvik (Thu, 27 Jul 2017 14:39:40 GMT):
If you only want the validator in the image, you can just install "python3-sawtooth-validator"
adamludvik (Thu, 27 Jul 2017 14:40:08 GMT):
This is an example of what such a Dockerfile might look like: https://github.com/hyperledger/sawtooth-core/blob/master/ci/sawtooth-validator
smagne (Thu, 27 Jul 2017 15:36:57 GMT):
Great Thanks @adamludvik
Dan (Thu, 27 Jul 2017 15:41:40 GMT):
great presentation @pschwarz on state delta subscriptions
@mfford can you ensure we have a jira story to get the sphinx doc out?
AkarshaMahadeva (Thu, 27 Jul 2017 16:11:17 GMT):
ERROR: repository hyperledger/sawtooth-tp_ct_python not found: does not exist or no pull access
AkarshaMahadeva (Thu, 27 Jul 2017 16:11:53 GMT):
Error generated when I created my own transaction family and added it to sawtooth-default-yaml file
adamludvik (Thu, 27 Jul 2017 16:17:17 GMT):
This means you do not gave a docker image tagged `hyperledger/sawtooth-tp_ct_python`
adamludvik (Thu, 27 Jul 2017 16:17:58 GMT):
You will need to create a new Dockerfile for that image, build it, and tag it with that name.
smagne (Thu, 27 Jul 2017 16:20:50 GMT):
Hey @adamludvik, thanks for your help
I have some questions
I will give you more context of what we need. We want to use sawtooth and we need the following structure:
- One container with the database files
- One container with sawtooth-validator that will depend on the database container
- One container with sawtooth-rest-api
Just let me know if this is possible and what would be the best approach to achieve this
AntonOyung (Thu, 27 Jul 2017 17:53:29 GMT):
What is happening when ParseFromStrings is called? Is this related to the proto buffer?
toddojala (Thu, 27 Jul 2017 18:41:39 GMT):
@AntonOyung Which class or file or part of the codebase is this in?
AntonOyung (Thu, 27 Jul 2017 19:08:23 GMT):
@toddojala I believe it's used in multiple places but the one I'm most interested in is _decode_block line 192 in block_store.py which is called after fetching a value with _get_block
Dan (Thu, 27 Jul 2017 19:53:44 GMT):
@mfford is there a replay link of today's Sawtooth Tech Forum?
zac (Thu, 27 Jul 2017 21:30:06 GMT):
@AntonOyung Yes, that is from the python Protobuf library: https://developers.google.com/protocol-buffers/docs/pythontutorial
zac (Thu, 27 Jul 2017 21:34:13 GMT):
Basically the lifespan looks like this:
```
msg = ProtoMessage(foo='bar')
print(msg.foo) # 'bar'
msg_bytes = msg.SerializeToString()
print(msg_bytes) # b'\x12\x03bar'
zac (Thu, 27 Jul 2017 21:36:30 GMT):
Basically the lifespan looks like this:
```
msg = ProtoMessage(foo='bar')
print(msg.foo) # 'bar'
msg_bytes = msg.SerializeToString()
print(msg_bytes) # b'\x12\x03bar'
new_msg = ProtoMessage()
new_msg.ParseFromString(msg_bytes)
print(new_msg.foo) # 'bar'
```
zac (Thu, 27 Jul 2017 21:36:30 GMT):
Basically the lifespan looks like this:
```
msg = SomeMessage(foo='bar')
print(msg.foo) # 'bar'
msg_bytes = msg.SerializeToString()
print(msg_bytes) # b'\x12\x03bar'
new_msg = SomeMessage()
new_msg.ParseFromString(msg_bytes)
print(new_msg.foo) # 'bar'
```
zac (Thu, 27 Jul 2017 21:37:48 GMT):
```
Message Instance --> bytes --> Message Instance
```
zac (Thu, 27 Jul 2017 21:37:48 GMT):
```
Message instance --> bytes --> Message instance
```
zac (Thu, 27 Jul 2017 21:37:48 GMT):
```
Message instance --> bytes --> Message instance
```
GhadiShayban (Fri, 28 Jul 2017 01:11:26 GMT):
Was today's tech session recorded?
Dan (Fri, 28 Jul 2017 01:42:34 GMT):
@mfford ^
mfford (Fri, 28 Jul 2017 12:32:40 GMT):
The sessions are automatically recorded. Let me track down the link and put it up.
AntonOyung (Fri, 28 Jul 2017 16:24:38 GMT):
@zac when inserting into LMDB it seems they serialize and deserialize it again using CBOR loads and dumps, is there any reason for serializing it multiple times?
zac (Fri, 28 Jul 2017 17:05:34 GMT):
That I don't know. I'm not familiar with that particular code. It could be a holdover from some older design, or perhaps it has to do with how LMDB operates.
AntonOyung (Fri, 28 Jul 2017 17:07:10 GMT):
When starting up a local validator in vagrant using "sawtooth-validator -vv" does it use preexisting data/files or reference an old instance to set up? It appears that after running the command a few times, the databases are initialized with a few entries in them already and don't follow the same protocol.
AntonOyung (Fri, 28 Jul 2017 17:07:55 GMT):
@zac I see, thanks for your help!
zac (Fri, 28 Jul 2017 17:08:59 GMT):
there are data files that will persist validator state
zac (Fri, 28 Jul 2017 17:09:13 GMT):
I believe they are in `~/sawtooth/`
AntonOyung (Fri, 28 Jul 2017 17:09:35 GMT):
if I delete them will it start the validator clean?
zac (Fri, 28 Jul 2017 17:09:58 GMT):
yes, though there are a few other steps to bootstrap clean state
zac (Fri, 28 Jul 2017 17:10:18 GMT):
let me run through it once real quick to make sure I don't miss anything...
zac (Fri, 28 Jul 2017 17:14:03 GMT):
```
$ rm -rf ~/sawtooth/data/*
$ sawtooth admin genesis
```
zac (Fri, 28 Jul 2017 17:14:29 GMT):
That will wipe and re-setup your validator
zac (Fri, 28 Jul 2017 17:15:00 GMT):
you should also know how to generate new keys, in case you have to go completely from scratch
zac (Fri, 28 Jul 2017 17:15:23 GMT):
```
$ rm -rf ~/sawtooth/keys/*
$ sawtooth admin keygen
```
zac (Fri, 28 Jul 2017 17:15:48 GMT):
you mostly shouldn't need to do that though
jordan.k.miles (Fri, 28 Jul 2017 18:06:47 GMT):
is there any documentation for setting up PoET? I'm a little confused as to if I need to configure it myself, use Intel SGX, or if it's included. Also, I see things like the "ValidatorInfo" class for python. Will these be available for java at some point?
Dan (Fri, 28 Jul 2017 18:07:21 GMT):
you don't need sgx.
Dan (Fri, 28 Jul 2017 18:07:48 GMT):
there's 2 flavors of poet. one has an sgx implementation and the other just uses pure python.
Dan (Fri, 28 Jul 2017 18:08:33 GMT):
all the instructions cover the pure python one (sometimes called poet simulator or just poet)
Dan (Fri, 28 Jul 2017 18:09:43 GMT):
As far as a port to java, there are no plans for that component.
Dan (Fri, 28 Jul 2017 18:10:35 GMT):
Poet has a couple aspects. There's the consensus algorithm and then there's network policies. We capture the network policies as a transaction family called ValidatorRegistry.
Dan (Fri, 28 Jul 2017 18:11:31 GMT):
Poet will check the validator registry to see if another validator is registered on the network and is publishing blocks within the rules. It's part of a defense in depth design.
Dan (Fri, 28 Jul 2017 18:11:49 GMT):
does that help?
jordan.k.miles (Fri, 28 Jul 2017 18:15:09 GMT):
yeah, somewhat. so how does a new validator, say from a remote client, register and then get access to the distributed ledger? is that exposed as a rest endpoint?
Dan (Fri, 28 Jul 2017 18:41:17 GMT):
more or less. it happens as a transactio
Dan (Fri, 28 Jul 2017 18:41:17 GMT):
more or less. it happens as a transaction
Dan (Fri, 28 Jul 2017 18:43:01 GMT):
if you are trying to run a few nodes on the same system - like you are just testing sawtooth or using it for developing some transaction logic etc - there's one way you'd run a bunch of nodes on the same machine.
Dan (Fri, 28 Jul 2017 18:43:33 GMT):
if you are trying to setup a real physical network where each computer is a separate node on the system, then there's a slightly different mechanic.
Dan (Fri, 28 Jul 2017 18:43:51 GMT):
it's the same code and transactions under the hood, but I think we have different helper scripts
AntonOyung (Fri, 28 Jul 2017 19:07:35 GMT):
Are you supposed to be able to index the database by both key and value to return their counterpart (call get(value) -> returns key and get(key) -> returns value) ?
boydjohnson (Fri, 28 Jul 2017 19:09:04 GMT):
@AntonOyung If you are talking about the blockstore, blocks are indexed by transaction so you can get a block_id by the transaction_id.
Dan (Fri, 28 Jul 2017 19:13:33 GMT):
@AntonOyung if you want to learn/change/etc. the inside of sawtooth you are looking at the right stuff. If you want to write transactions for sawtooth, we can point you to the outter interfaces for working with state / working with the underlying data.
AntonOyung (Fri, 28 Jul 2017 19:15:04 GMT):
@Dan I'd like to change the insides of sawtooth so I think I'm in the right place
jordan.k.miles (Fri, 28 Jul 2017 19:32:52 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jv9299mKzB5Zy9obd) @Dan Ah ok. Do you know of any docs on that aspect (adding peers, etc.). They may be around and I overlooked them. I have the dev Docker file and found the poet_smoke.yaml file, but I'm not seeing anything related to actually building up a network of nodes.
Dan (Fri, 28 Jul 2017 19:37:09 GMT):
@jordan.k.miles you probably didn't miss anything. do you want to setup multiple nodes on your dev machine or are you looking to setup separate individual machines?
jordan.k.miles (Fri, 28 Jul 2017 19:41:23 GMT):
probably locally for now and then try multiple machines.
Dan (Fri, 28 Jul 2017 19:49:41 GMT):
@adamludvik what's the best way to launch a network on a single machine? Do we have that documented somewhere?
boydjohnson (Fri, 28 Jul 2017 19:54:59 GMT):
adamlidvik is unavailable, so I am answering. I would use docker and docker-compose and have a docker-compose yaml file similar to test_poet_smoke: https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_poet_smoke.yaml
boydjohnson (Fri, 28 Jul 2017 19:54:59 GMT):
adamludvik is unavailable, so I am answering. I would use docker and docker-compose and have a docker-compose yaml file similar to test_poet_smoke: https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_poet_smoke.yaml
jordan.k.miles (Fri, 28 Jul 2017 19:56:09 GMT):
nice. that's actually the example I was looking at :)
jordan.k.miles (Fri, 28 Jul 2017 19:56:24 GMT):
I'll play around with it and see what happens.
boydjohnson (Fri, 28 Jul 2017 19:56:36 GMT):
Cool, sounds good.
adamludvik (Fri, 28 Jul 2017 20:01:51 GMT):
I second @boydjohnson's recommendation
pancake (Mon, 31 Jul 2017 07:51:56 GMT):
Since a blockchain is built by one block record it's previous block id, how to make sure if a block is end of a blockchain?
zac (Mon, 31 Jul 2017 13:38:30 GMT):
you need to rely on the validator to tell you what the end of the chain is, you can't figure it out just from the blocks
zac (Mon, 31 Jul 2017 13:39:35 GMT):
If you are working as a client, an HTTP GET request to `/blocks` (among other endpoints) will include a property called `head` which is the id of the current chain head
zac (Mon, 31 Jul 2017 13:39:55 GMT):
or rather, the id of the chain head used in that request
zac (Mon, 31 Jul 2017 13:40:03 GMT):
but the default is the most current
zac (Mon, 31 Jul 2017 13:41:48 GMT):
If you are working directly with the validator, the `chain_head` property on the `BlockStore` holds the id of the current chain head
plee (Mon, 31 Jul 2017 16:49:58 GMT):
Has joined the channel.
AkarshaMahadeva (Mon, 31 Jul 2017 18:12:56 GMT):
ubuntu@ubuntu-xenial:/project/sawtooth-core$ xo create game99
Error: HTTPConnectionPool(host='rest_api', port=8080): Max retries exceeded with url: /batches (Caused by NewConnectionError('
AkarshaMahadeva (Mon, 31 Jul 2017 18:13:17 GMT):
Error generated while trying to do a game creation
zac (Mon, 31 Jul 2017 18:33:00 GMT):
What happens when you `curl rest_api:8080/blocks`?
AkarshaMahadeva (Mon, 31 Jul 2017 18:35:08 GMT):
ubuntu@ubuntu-xenial:/project/sawtooth-core$ curl rest_api:8080/blocks
curl: (6) Could not resolve host: rest_api
ubuntu@ubuntu-xenial:/project/sawtooth-core$ curl rest-api:8080/blocks
curl: (6) Could not resolve host: rest-api
zac (Mon, 31 Jul 2017 18:37:26 GMT):
Well there's your problem
zac (Mon, 31 Jul 2017 18:37:39 GMT):
I am not as familiar with all of the Docker workings
zac (Mon, 31 Jul 2017 18:37:51 GMT):
I'm usually running things out of Ubuntu
zac (Mon, 31 Jul 2017 18:38:09 GMT):
I don't know if someone more familiar with running through Docker can jump in
zac (Mon, 31 Jul 2017 18:38:33 GMT):
But the broad version is, the REST API is down, or not at the configured URL
zac (Mon, 31 Jul 2017 18:39:02 GMT):
I would make sure it is running, and that you are running that command from within the client Docker image
zac (Mon, 31 Jul 2017 19:34:22 GMT):
So it looks like the `xo` command is defaulting to `http://rest_api:8080` for the REST API url
zac (Mon, 31 Jul 2017 19:34:46 GMT):
So anyone not running it on Docker needs to go through the extra step of setting the url to localhost
zac (Mon, 31 Jul 2017 19:35:01 GMT):
Is that handled in a more clever way for `intkey`?
zac (Mon, 31 Jul 2017 19:35:21 GMT):
So neither Ubuntu or Docker users need to manually set the URL?
zac (Mon, 31 Jul 2017 19:37:03 GMT):
Or does `intkey` just default to the Ubuntu URL?
pschwarz (Mon, 31 Jul 2017 20:22:15 GMT):
That xo default seems like a bug
pschwarz (Mon, 31 Jul 2017 20:22:27 GMT):
It should share the same default as other commands
zac (Mon, 31 Jul 2017 20:51:41 GMT):
yes, this is mostly my thinking
zac (Mon, 31 Jul 2017 20:52:18 GMT):
though if `intkey` is just using Ubuntu defaults and making Docker users go through an extra step, then maybe `intkey` is the one with the bug
zac (Mon, 31 Jul 2017 20:52:58 GMT):
ideally both would default to the default REST API url in whatever environment you are using
zac (Mon, 31 Jul 2017 20:53:04 GMT):
but they should all match regardless
pschwarz (Mon, 31 Jul 2017 20:53:18 GMT):
No, the `sawtooth` and `sawtooth-rest-api` cli tools also default to localhost
JamesKempf (Mon, 31 Jul 2017 20:55:29 GMT):
Has joined the channel.
JamesKempf (Mon, 31 Jul 2017 20:56:58 GMT):
I'm using seth with the burrow-evm-tp, trying to create an account. seth requires initialization to a URL as follows:
JamesKempf (Mon, 31 Jul 2017 20:57:06 GMT):
seth initialize
JamesKempf (Mon, 31 Jul 2017 20:58:18 GMT):
but there is nothing about where that URL should point. Is it the burrow-evm-tp URL? The burrow-evm-tp CLI reference has nothing in it about how to set the URL, nor does one get printed out when I start it with the --verbose flag.
JamesKempf (Mon, 31 Jul 2017 20:59:02 GMT):
Has anybody used seth and burrow-evm-tp to successfully set up an account and add a compiled Solidity contract?
boydjohnson (Mon, 31 Jul 2017 21:19:42 GMT):
@JamesKempf That URL is the rest api url.
JamesKempf (Mon, 31 Jul 2017 21:34:23 GMT):
@boydjohnson I tried that but iI get the following error message from seth:
JamesKempf (Mon, 31 Jul 2017 21:34:31 GMT):
Error: Problem submitting account creation transaction: Couldn't send transaction: Post tcp://127.0.0.1:8800/batches: unsupported protocol scheme "tcp"
ubuntu@blockchain01:~/hyperledger/sawtooth-core
JamesKempf (Mon, 31 Jul 2017 21:34:31 GMT):
Error: Problem submitting account creation transaction: Couldn't send transaction: Post tcp://127.0.0.1:8800/batches: unsupported protocol scheme "
JamesKempf (Mon, 31 Jul 2017 21:34:37 GMT):
But then when I try:
JamesKempf (Mon, 31 Jul 2017 21:34:47 GMT):
seth account list
JamesKempf (Mon, 31 Jul 2017 21:34:50 GMT):
I get:
JamesKempf (Mon, 31 Jul 2017 21:35:33 GMT):
player01: 93ba86c118af79cd4b37cd87bf7229031c3c33f0
JamesKempf (Mon, 31 Jul 2017 21:35:53 GMT):
so it seems to be creating the account even though it complains. Thanx.
boydjohnson (Mon, 31 Jul 2017 21:36:14 GMT):
The protocol should be `http` and the port of the rest api is by default `8080`.
JamesKempf (Mon, 31 Jul 2017 21:36:54 GMT):
Thanx
boydjohnson (Mon, 31 Jul 2017 21:37:03 GMT):
No problem.
AkarshaMahadeva (Mon, 31 Jul 2017 23:00:49 GMT):
am having a problem serializing data for my transaction family. When I am decoding and printing it I am able to see the data. But when it decodes and splits and assigns to variable in _unpack_transaction function it is creating problemsubuntu@ubuntu-xenial:/project/sawtooth-core$ ct-tp-python -vv
[22:51:55.224 INFO core] register attempt: OK
[22:52:05.026 DEBUG core] received message of type: TP_PROCESS_REQUEST
product_name, pxty5,create,
[22:52:05.028 WARNING core] Invalid Transaction Invalid payload serialization
I donot have any idea as how to solve this
AntonOyung (Mon, 31 Jul 2017 23:04:57 GMT):
Is every node in a merkle tree exactly one block?
zac (Tue, 01 Aug 2017 00:26:12 GMT):
@AkarshaMahadeva That error comes from the Transaction Processor. It is typically thrown when it tries to deserialize a transaction payload and fails. Are you working with your own modified Transaction Processor, or are you using an existing one?
zac (Tue, 01 Aug 2017 00:29:25 GMT):
@AntonOyung Blocks and state are stored separately. A transaction can modify one or more nodes in the merkle trie depending on the payload and the logic of its transaction processor.
zac (Tue, 01 Aug 2017 00:30:14 GMT):
For example, IntKey stores one key/value pair at each node.
zac (Tue, 01 Aug 2017 00:30:45 GMT):
But Xo stores all the information for an entire tic-tac-toe game at a single node.
FlyingTiger (Tue, 01 Aug 2017 10:50:54 GMT):
Is there a 'Docker Compose File' that deploying multiple validators?
FlyingTiger (Tue, 01 Aug 2017 10:51:08 GMT):
Thanks.
rbuysse (Tue, 01 Aug 2017 13:53:34 GMT):
@FlyingTiger Sorry, we don't have anything like that right now.
Dan (Tue, 01 Aug 2017 14:32:47 GMT):
@FlyingTiger above, @boydjohnson recommended to someone else using https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_poet_smoke.yaml as a starting point.
Dan (Tue, 01 Aug 2017 14:33:45 GMT):
We removed the cli 'cluster' command a few months ago in favor of docker compose and other tools (terraform?).
jwcoates (Tue, 01 Aug 2017 16:18:29 GMT):
Has joined the channel.
smagne (Tue, 01 Aug 2017 17:17:19 GMT):
hello, I'm getting error 15: The validator has no genesis block, and is not yet ready to be queried. Try your request again later. using docker compose file
zac (Tue, 01 Aug 2017 17:20:03 GMT):
Did you `sawtooth admin keygen` before starting up your validator?
zac (Tue, 01 Aug 2017 17:20:03 GMT):
Did you `sawtooth admin genesis` before starting up your validator?
zac (Tue, 01 Aug 2017 17:20:15 GMT):
Also Docker or Ubuntu?
smagne (Tue, 01 Aug 2017 17:35:15 GMT):
@zac I don't know what you mean, I'm new with sawtooth I've just run the docker compose sample
smagne (Tue, 01 Aug 2017 17:35:15 GMT):
@zac thanks for your reply. I don't know what you mean, I'm new with sawtooth I've just run the docker compose sample
drozd (Tue, 01 Aug 2017 18:01:20 GMT):
@FlyingTiger @Dan manually changing those compose files is difficult and unpleasant, especially when playing with different parameters, so I wrote a little suite of functions to generate sawtooth commands (basically a more flexible version of cluster): https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/tests/node_controller.py
drozd (Tue, 01 Aug 2017 18:01:43 GMT):
I don't think it would be very difficult to use that to quickly generate new compose files
JamesKempf (Tue, 01 Aug 2017 18:02:33 GMT):
Hi, I'm using burrow-evn-tp with seth. Is there any way to get compiled Solidity bytecodes into seth other than through a command line argument? Like reading from stdin?
pschwarz (Tue, 01 Aug 2017 18:53:58 GMT):
@smagne Is it the docker compose file mentioned in the docs?
Dan (Tue, 01 Aug 2017 19:01:57 GMT):
@drozd cool. can you mention that in the sawtooth email list (hyperledger-stl@lists.hyperledger.org)? It's easier for people to find these stray gems searching the email archive than here (I doubt anyone searches chat history).
Dan (Tue, 01 Aug 2017 19:02:42 GMT):
And @drozd for that matter add a help-wanted story to Jira to make such a compose file?
smagne (Tue, 01 Aug 2017 19:12:42 GMT):
@pschwarz this is my docker compose file
smagne (Tue, 01 Aug 2017 19:14:10 GMT):
Message Attachments
pschwarz (Tue, 01 Aug 2017 21:16:58 GMT):
@smagne You need to add an entry to start the sawtooth settings transaction processor. Something like:
```
settings-tp:
image: hyperledger/sawtooth-tp_settings:latest
container_name: sawtooth-settings-tp-default
expose:
- 4004
depends_on:
- validator
entrypoint: settings-tp -vv tcp://validator:4004
```
pschwarz (Tue, 01 Aug 2017 21:17:30 GMT):
Your validator is probably blocked waiting to process the genesis block, which has some on-chain settings in it.
smagne (Tue, 01 Aug 2017 21:27:12 GMT):
Okay I will try that, thanks!
smagne (Tue, 01 Aug 2017 21:33:06 GMT):
That way works great
pschwarz (Tue, 01 Aug 2017 21:40:40 GMT):
:thumbsup:
adamludvik (Wed, 02 Aug 2017 13:39:32 GMT):
@JamesKempf Currently, smart contract deployment is only supported by passing a blob of data on the command line to `seth contract create`. In the future we are planning to support more standard methods for contract deployment. I also see you were having some difficulty with getting `seth` to talk to the REST API. Were you able to resolve that issue?
GhadiShayban (Wed, 02 Aug 2017 14:31:35 GMT):
How long is a transaction with declared dependencies 'held' until its dependencies are satisfied?
GhadiShayban (Wed, 02 Aug 2017 14:31:57 GMT):
Or is it nack'ed immediately?
agunde (Wed, 02 Aug 2017 14:36:51 GMT):
@GhadiShayban The Completer will hold the the transaction/batch in a TimedCache, where if the transaction/batch is not referenced for some time (default is currently 30 seconds) and the dependencies were not received, it will be purged. https://github.com/hyperledger/sawtooth-core/blob/master/validator/sawtooth_validator/journal/completer.py
GhadiShayban (Wed, 02 Aug 2017 14:37:22 GMT):
thanks!
JamesKempf (Wed, 02 Aug 2017 15:00:19 GMT):
@adamludvik, yes I got seth to talk with the REST API, thanx. The problem I'm having now is that after I create a contract through the command line, the code does not show up when I do seth show
adamludvik (Wed, 02 Aug 2017 15:15:52 GMT):
There are two types of accounts in Ethereum, Externally Owned Accounts and Contract Accounts and we have adopted that model as well. When you run `seth account create` you are initializing a new externally owned account at an address derived from the private key you imported. When you create a new contract with `seth create contract`, you are creating a new contract account at an address derived from the address of your externally owned account and the current nonce of that account. When you deploy the contract, it should print the address of the new contract account out. To see that the contract has been successfully deployed, you would need to do `seth show
adamludvik (Wed, 02 Aug 2017 15:17:05 GMT):
It is also worth noting that only contract accounts can have code deployed to them.
benoit.razet (Wed, 02 Aug 2017 15:45:25 GMT):
Hi, I am playing with a transaction family with a specific prefix, say ‘000001’. I was assuming that transactions from this transaction family would not be allowed to modify the merkle tree at an address with a different prefix than ‘000001’. After running some test, I found that the transaction is allowed to modify the merkle tree at an address with a different prefix than ‘000001’. Is this normal?
benoit.razet (Wed, 02 Aug 2017 15:58:13 GMT):
by "prefix", I mean "namespace prefix"
jsmitchell (Wed, 02 Aug 2017 15:58:51 GMT):
yeah, there is no enforcement of that yet. It's coming soon.
benoit.razet (Wed, 02 Aug 2017 16:05:48 GMT):
Ok. So I should still assume that the addresses with a specific namespace can be modified by transaction families registered with this namespace. I was not completely sure because I could not find this explicitly mentioned in the documentation, even if that was my understanding.
jsmitchell (Wed, 02 Aug 2017 16:06:39 GMT):
yes, we will be adding support which allows explicit permissioning between transaction families and namespaces
jsmitchell (Wed, 02 Aug 2017 16:06:44 GMT):
the config will be on chain
benoit.razet (Wed, 02 Aug 2017 16:13:06 GMT):
Oh! Very interesting! Just to make sure I understand: there will be a mechanism to allow a transaction family A to modify the addresses reserved to transaction family B
jsmitchell (Wed, 02 Aug 2017 16:13:34 GMT):
think about the namespace definition as separate from the transaction family implementations
jsmitchell (Wed, 02 Aug 2017 16:13:52 GMT):
where there is a potential many-to-many mapping
benoit.razet (Wed, 02 Aug 2017 16:17:43 GMT):
Yes! Thanks!
AntonOyung (Wed, 02 Aug 2017 16:35:49 GMT):
In the Xo example when you first create a game, what information is stored in the merkle database? I see a hashed K-V pair is inputed but I'm having a hard time figuring out what each entry actually represents
kelly_ (Wed, 02 Aug 2017 16:49:04 GMT):
@AntonOyung have you looked at this - http://intelledger.github.io/transaction_family_specifications/xo_transaction_family.html
kelly_ (Wed, 02 Aug 2017 16:49:30 GMT):
'''
kelly_ (Wed, 02 Aug 2017 16:49:41 GMT):
'''
An XO state entry consists of the UTF-8 encoding of a string with exactly four commas formatted as follows:
AntonOyung (Wed, 02 Aug 2017 16:51:45 GMT):
I have looked at that however I put some print statements in the LMDB file to print the length of the merkle DB each time i set a value
AntonOyung (Wed, 02 Aug 2017 16:52:27 GMT):
and the length of the database goes from 1 to 37 instantly after doing a "xo create game1" without entering 37 entries @kelly_
pschwarz (Wed, 02 Aug 2017 16:53:38 GMT):
In LmdbNoLockDatabase?
pschwarz (Wed, 02 Aug 2017 16:54:01 GMT):
That is used by a number of things - block store, merkle tree and state deltas
pschwarz (Wed, 02 Aug 2017 16:54:42 GMT):
So across all of those stores, I could see there being many writes
jsmitchell (Wed, 02 Aug 2017 16:54:47 GMT):
you are at the wrong level of abstraction @AntonOyung
jsmitchell (Wed, 02 Aug 2017 16:55:36 GMT):
no, that is the instance of the lmdb underlying the merkle trie, and it's the expected behavior. There is a key-value pair stored for every node in the merkle trie at a key location identified by the node's hash
jsmitchell (Wed, 02 Aug 2017 16:56:12 GMT):
what the XO transaction processor cares about is the merkle radix address -> value mapping, which is a layer up
AntonOyung (Wed, 02 Aug 2017 16:56:24 GMT):
Yes so I was wondering how there are suddenly so many nodes in the merkle trie after only creating a game
jsmitchell (Wed, 02 Aug 2017 16:56:53 GMT):
because it's a radix trie and the data is stored in a leaf node
jsmitchell (Wed, 02 Aug 2017 16:57:49 GMT):
there are some optimizations I'm planning to add that will make that more efficient
AntonOyung (Wed, 02 Aug 2017 17:02:24 GMT):
if there are 37 elements in the trie, i'm assuming there is more than 1 leaf node after creating a game is that correct? If so what would the data in the other leaf nodes be?
jsmitchell (Wed, 02 Aug 2017 17:04:06 GMT):
no, it is a path of nodes to the leaf node
AntonOyung (Wed, 02 Aug 2017 17:04:30 GMT):
so it's a path of nodes with 1 child down to the leaf?
jsmitchell (Wed, 02 Aug 2017 17:04:50 GMT):
yes, and as data gets added along that address path, you will have more leafs
AntonOyung (Wed, 02 Aug 2017 17:05:18 GMT):
do the leaves get added in the same way or do the existing nodes gain more children?
jsmitchell (Wed, 02 Aug 2017 17:05:29 GMT):
I plan to collapse the degenerate 1 child->1 child case in an upcoming enhancement
jsmitchell (Wed, 02 Aug 2017 17:05:41 GMT):
it's copy-on-write
jsmitchell (Wed, 02 Aug 2017 17:06:38 GMT):
a new copy of the parent node gets created with a pointer to the two children and the merkle hash is calculated and then new nodes are calculated up the tree to the new merkle root
AntonOyung (Wed, 02 Aug 2017 17:09:54 GMT):
Root
|
o
|
leaf
AntonOyung (Wed, 02 Aug 2017 17:10:02 GMT):
so it starts something like this ^
AntonOyung (Wed, 02 Aug 2017 17:10:15 GMT):
and then goes to something like this when a new element is added?
AntonOyung (Wed, 02 Aug 2017 17:10:31 GMT):
Root(new hashed val)
|
o
/ \
Leaf Leaf
jsmitchell (Wed, 02 Aug 2017 17:13:28 GMT):
yeah, except o is a new node too with a new hashed value
AntonOyung (Wed, 02 Aug 2017 17:15:28 GMT):
Message Attachments
AntonOyung (Wed, 02 Aug 2017 17:16:03 GMT):
So i'm looking at this image now and I'm a little confused. Are all the old nodes on the left deleted (except for the node that's referenced by both)
jsmitchell (Wed, 02 Aug 2017 17:16:10 GMT):
nope
jsmitchell (Wed, 02 Aug 2017 17:16:14 GMT):
it's copy on write
jsmitchell (Wed, 02 Aug 2017 17:16:27 GMT):
you can still refer to the prior versions of the tree based on the root hash
AntonOyung (Wed, 02 Aug 2017 17:17:11 GMT):
Does this mean that there are multiple roots to the tree ?
jsmitchell (Wed, 02 Aug 2017 17:17:24 GMT):
yes, one for each block typically
AntonOyung (Wed, 02 Aug 2017 17:20:41 GMT):
I'm having a hard time visualizing what that would look like is there another image that I could search up that would help me understand ?
jsmitchell (Wed, 02 Aug 2017 17:20:53 GMT):
hmm, not really
AntonOyung (Wed, 02 Aug 2017 17:21:34 GMT):
Message Attachments
AntonOyung (Wed, 02 Aug 2017 17:21:40 GMT):
Does this work ^
jsmitchell (Wed, 02 Aug 2017 17:22:04 GMT):
the underlying key-value store is a forest of trees identified by the state root hash
jsmitchell (Wed, 02 Aug 2017 17:22:29 GMT):
values in any version of a tree are identified by a consistent merkle tree address
jsmitchell (Wed, 02 Aug 2017 17:24:35 GMT):
yeah, it's kind of like that. I like my drawing better :)
AntonOyung (Wed, 02 Aug 2017 17:24:48 GMT):
does the merkle tree address need to be decoded from the hashed key?
AntonOyung (Wed, 02 Aug 2017 17:24:58 GMT):
in the Key-value store
jsmitchell (Wed, 02 Aug 2017 17:26:07 GMT):
no, there is no relationship
jsmitchell (Wed, 02 Aug 2017 17:26:17 GMT):
the hash is the hash of the node structure
AntonOyung (Wed, 02 Aug 2017 17:26:55 GMT):
so then in the value, you can decode it and find what exactly ?
jsmitchell (Wed, 02 Aug 2017 17:26:57 GMT):
the merkle tree address specifies the name of the parent->child pointers
jsmitchell (Wed, 02 Aug 2017 17:27:22 GMT):
at the location of the merkle address in the merkle trie?
jsmitchell (Wed, 02 Aug 2017 17:27:34 GMT):
it's whatever encoding the transaction family puts at that location
jsmitchell (Wed, 02 Aug 2017 17:27:39 GMT):
just a bytearray
AntonOyung (Wed, 02 Aug 2017 17:28:43 GMT):
Ok I'm sorry I'm getting a little confused, could you elaborate on what you mean by "the hash is the hash of the node structure" ?
jsmitchell (Wed, 02 Aug 2017 17:29:20 GMT):
This is not something that it's necessary to understand in order to write a transaction processor
AntonOyung (Wed, 02 Aug 2017 17:30:17 GMT):
I understand, I'm just interested in learning about these components
jsmitchell (Wed, 02 Aug 2017 17:32:04 GMT):
ok, the merkle tree's world is addresses and values that are specified by the transaction family
jsmitchell (Wed, 02 Aug 2017 17:32:25 GMT):
the merkle tree uses a key-value store underneath as its internal store
jsmitchell (Wed, 02 Aug 2017 17:33:24 GMT):
that implementation uses the hashes of node content as the key in the key-value store. The value is the serialized content of the node
AntonOyung (Wed, 02 Aug 2017 17:35:45 GMT):
so the key is the hash of the node and the value is serialized node?
jsmitchell (Wed, 02 Aug 2017 17:36:00 GMT):
at what level?
jsmitchell (Wed, 02 Aug 2017 17:36:05 GMT):
in the underlying key-value store?
jsmitchell (Wed, 02 Aug 2017 17:36:07 GMT):
yes.
jsmitchell (Wed, 02 Aug 2017 17:36:37 GMT):
that is an implementation detail of the merkle tree though. A user of the merkle tree doesn't need to know anything about that
AntonOyung (Wed, 02 Aug 2017 17:38:00 GMT):
then by deserializing the node you're able to actually construct the trie
AntonOyung (Wed, 02 Aug 2017 17:38:00 GMT):
?
AntonOyung (Wed, 02 Aug 2017 17:38:06 GMT):
nodes*
jsmitchell (Wed, 02 Aug 2017 17:41:53 GMT):
the merkle tree does that
AntonOyung (Wed, 02 Aug 2017 17:43:23 GMT):
Is there any reason why the key and value are just different representations of the same thing?
jsmitchell (Wed, 02 Aug 2017 17:44:31 GMT):
I don't know what you mean
jsmitchell (Wed, 02 Aug 2017 17:44:48 GMT):
the node content is possibly huge
jsmitchell (Wed, 02 Aug 2017 17:44:55 GMT):
a hash of that content is a known size
AntonOyung (Wed, 02 Aug 2017 17:46:17 GMT):
you agreed that in the key-value store, the key is the hashed node and the value is the serialized node
AntonOyung (Wed, 02 Aug 2017 17:47:06 GMT):
So the key is a hashed representation of the node and the value is a serialized representation of the node
jsmitchell (Wed, 02 Aug 2017 17:47:26 GMT):
yes, in the underlying lmdb
AntonOyung (Wed, 02 Aug 2017 17:47:48 GMT):
yes so I was wondering if there's any purpose to that ?
jsmitchell (Wed, 02 Aug 2017 17:48:11 GMT):
yes, the hashes are stored as pointers in the parent node
AntonOyung (Wed, 02 Aug 2017 17:48:48 GMT):
and then the serialized version is actually used to interpret the node ?
jsmitchell (Wed, 02 Aug 2017 17:49:18 GMT):
yes
jsmitchell (Wed, 02 Aug 2017 17:49:26 GMT):
the hash is not reversable
jsmitchell (Wed, 02 Aug 2017 17:49:27 GMT):
...
AntonOyung (Wed, 02 Aug 2017 17:50:29 GMT):
ok thank you that clarifies a lot, I appreciate your help!
jsmitchell (Wed, 02 Aug 2017 17:50:36 GMT):
of course!
AntonOyung (Wed, 02 Aug 2017 21:26:04 GMT):
What is the state delta store's purpose? It seems like it's just used for state delta subscriptions which gives updates on what transactions occurred. However from my understanding of the block store, storing this information seems redundant, since the block store already stores all transactions, batches, and blocks
kelly_ (Wed, 02 Aug 2017 21:43:32 GMT):
@pschwarz
pschwarz (Wed, 02 Aug 2017 21:45:35 GMT):
Finding the difference between changes in state that happen from one block to the next is an expensive operation, so we chose to cache it (since user may need to get old deltas, catch up to current state, request specific deltas for a block, etc)
pschwarz (Wed, 02 Aug 2017 21:46:24 GMT):
It's not a source of truth, but more of a persistent cache. In theory, that store could be rebuilt based on the block chain
FlyingTiger (Thu, 03 Aug 2017 06:55:33 GMT):
@drozd thanks. And how could I use the node_controller to generate new compose files?
FlyingTiger (Thu, 03 Aug 2017 07:06:24 GMT):
@Dan Thanks. I'll try to use it.
psnmissaka (Thu, 03 Aug 2017 08:58:34 GMT):
Has joined the channel.
psnmissaka (Thu, 03 Aug 2017 09:01:35 GMT):
Hi I'm quite new to hyperledger and I'm kind of confused as to what kind of use cases the hyperledger fabric and sawtooth deals with. I feel like they are used for similar use cases. can someone explain it to me in simple way?
psnmissaka (Thu, 03 Aug 2017 09:08:47 GMT):
Will be posting this question in #general
ymonk (Thu, 03 Aug 2017 11:20:18 GMT):
Has joined the channel.
ymonk (Thu, 03 Aug 2017 11:23:38 GMT):
Hello all, my name is Yan Meng. I work for CSDN, the largest Chinese-speaking developer network. I would like to write an introductory article about Sawtooth Lake, and would ask some questions to the creator(s) of Sawtooth Lake. Who should I interview? Please kindly advise. Thanks in advance!
adamludvik (Thu, 03 Aug 2017 13:52:34 GMT):
@ymonk, @Dan Is the best person to contact for this.
AntonOyung (Thu, 03 Aug 2017 16:45:44 GMT):
How do you set up a validator network on separate machines? Do you use the -p and -s flags?
Dan (Thu, 03 Aug 2017 17:55:03 GMT):
@ymonk Delighted to help. I'll DM you my contact info.
Dan (Thu, 03 Aug 2017 18:08:11 GMT):
@AntonOyung asked about running on multiple machines. specifically asking about the rest API....
we would do better to call the REST API a REST Service or REST Process in this deployment context.
The idea is that you run a validator process on each machine. ...
And on each machine you connect one or more transaction processors (exactly those TPs that are required by the network) and a rest service to that validator process.
(You could run a validator process without a Rest process but then there would be no way to submit queries or transactions to that validator. It would still participate on gossip though and receive transactions submitted to other validators.)
Dan (Thu, 03 Aug 2017 18:10:07 GMT):
To create a network of validators...
Start one validator (and it's TPs, and Rest service).
Then start the other machines & processes and point those validators at the first host.
Dan (Thu, 03 Aug 2017 18:10:38 GMT):
To point the other validators at the first host (or later at any current host), what is the setting?
rbuysse (Thu, 03 Aug 2017 18:26:26 GMT):
you have to set the peering mode and then then either a peer list or seed list
rbuysse (Thu, 03 Aug 2017 18:26:30 GMT):
`-P dynamic --seeds tcp://
rbuysse (Thu, 03 Aug 2017 18:26:30 GMT):
`-P static --peers tcp://
rbuysse (Thu, 03 Aug 2017 18:27:15 GMT):
`-P dynamic --seeds tcp://
Dan (Thu, 03 Aug 2017 18:50:23 GMT):
thanks @rbuysse . Is that clear @AntonOyung ?
AntonOyung (Thu, 03 Aug 2017 18:52:00 GMT):
I'm trying it out I'll let you know how it goes! Thanks!
adamludvik (Thu, 03 Aug 2017 19:06:08 GMT):
I am also helping @AntonOyung out in a dm
zac (Fri, 04 Aug 2017 03:17:49 GMT):
@Dan Technically clients could communicate with a validator without a REST API/service
zac (Fri, 04 Aug 2017 03:18:34 GMT):
The ZMQ client handlers the REST API is built on would work just fine
zac (Fri, 04 Aug 2017 03:18:58 GMT):
They are generally less documented and not as streamlined though
Dan (Fri, 04 Aug 2017 04:04:15 GMT):
No one likes a know-it-all, @zac :stuck_out_tongue_winking_eye:
wbsmith (Fri, 04 Aug 2017 06:00:58 GMT):
Has joined the channel.
ymonk (Fri, 04 Aug 2017 09:54:21 GMT):
@Dan @adamludvik Thank you so much!
zac (Fri, 04 Aug 2017 13:50:07 GMT):
:point_right: :astonished:
tommling (Fri, 04 Aug 2017 20:13:13 GMT):
Has joined the channel.
tommling (Fri, 04 Aug 2017 20:13:34 GMT):
Hi guys
tommling (Fri, 04 Aug 2017 20:13:40 GMT):
Happy friday /saturday
tommling (Fri, 04 Aug 2017 20:14:06 GMT):
Have a question about unit testing the transaction processor using the mock validator
tommling (Fri, 04 Aug 2017 20:14:06 GMT):
Have a question about unit testing the transaction processor using the mock validator. I get this wicked error when I try to setup a fixture
tommling (Fri, 04 Aug 2017 20:14:55 GMT):
I followed the guide pretty closely, but when I run the unit tests, (or even a single really simple test on IntKey), the process hangs.
tommling (Fri, 04 Aug 2017 20:15:44 GMT):
class TransactionProcessorTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
url = 'et0:4004'
cls.validator = MockValidator()
cls.validator.listen(url)
if not cls.validator.register_processor():
raise Exception('Failed to register processor')
cls.factory = None
@classmethod
def tearDownClass(cls):
try:
cls.validator.close()
except AttributeError:
pass
tommling (Fri, 04 Aug 2017 20:15:44 GMT):
```class TransactionProcessorTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
url = 'et0:4004'
cls.validator = MockValidator()
cls.validator.listen(url)
if not cls.validator.register_processor():
raise Exception('Failed to register processor')
cls.factory = None
@classmethod
def tearDownClass(cls):
try:
cls.validator.close()
except AttributeError:
pass
```
tommling (Fri, 04 Aug 2017 20:15:44 GMT):
```class TransactionProcessorTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
url = 'eth0:4004'
cls.validator = MockValidator()
cls.validator.listen(url)
if not cls.validator.register_processor():
raise Exception('Failed to register processor')
cls.factory = None
@classmethod
def tearDownClass(cls):
try:
cls.validator.close()
except AttributeError:
pass
```
tommling (Fri, 04 Aug 2017 20:16:09 GMT):
Where it says URL = 'eth0:4004' (i know there is a typo, haha i fixxed that). same problem
tommling (Fri, 04 Aug 2017 20:16:09 GMT):
Where it says `url= 'eth0:4004'` (i know there is a typo, haha i fixxed that). same problem
tommling (Fri, 04 Aug 2017 20:16:09 GMT):
Where it says `url= 'eth0:4004'`
tommling (Fri, 04 Aug 2017 20:19:58 GMT):
It throws back a wicked error from zmq/backend/cython/socket.pyx
tommling (Fri, 04 Aug 2017 20:20:07 GMT):
zmq.error.ZMQError: Invalid argument
tommling (Fri, 04 Aug 2017 20:20:07 GMT):
```
tommling (Fri, 04 Aug 2017 20:20:07 GMT):
```======================================================================
ERROR: setUpClass (tests.tests_intkey.TestIntkey)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/thomas/Documents/core/tests/tests_intkey.py", line 24, in setUpClass
super().setUpClass()
File "/home/thomas/Documents/core/tests/test_case_tp.py", line 12, in setUpClass
cls.validator.listen(url)
File "/home/thomas/Documents/core/venv/lib/python3.5/site-packages/sawtooth_processor_test/mock_validator.py", line 90, in listen
self._socket.bind(self._url)
File "zmq/backend/cython/socket.pyx", line 495, in zmq.backend.cython.socket.Socket.bind (zmq/backend/cython/socket.c:5653)
File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:10014)
zmq.error.ZMQError: Invalid argument
```
tommling (Fri, 04 Aug 2017 20:20:36 GMT):
When I change it to url = 'tcp://127.0.0.1:4004'
tommling (Fri, 04 Aug 2017 20:20:42 GMT):
the process hangs
tommling (Fri, 04 Aug 2017 20:20:52 GMT):
Any ideas??
tommling (Fri, 04 Aug 2017 20:21:59 GMT):
Sorry if this is the wrong place to bring it up, I would submit an issue, but that might be unnecessary if its something simple like not running zmq in the background or somethign ;3
chrisconway (Fri, 04 Aug 2017 20:38:38 GMT):
where are the instructions on how to deploy a custom transaction family to a custom transaction processor?
tommling (Fri, 04 Aug 2017 20:41:24 GMT):
http://intelledger.github.io/app_developers_guide/testing.html#
tommling (Fri, 04 Aug 2017 20:42:28 GMT):
Albeit, I have since devolved into getting the stock tests to work, in this case the intkey family ones
boydjohnson (Fri, 04 Aug 2017 21:46:30 GMT):
Hi @tommling This is definitely the right place to ask. Just so I understand, you are running this in docker?
smagne (Fri, 04 Aug 2017 23:53:35 GMT):
Hello I want to override the sawtooth transaction validator
smagne (Sat, 05 Aug 2017 00:41:45 GMT):
I need to override the transaction family
Arun.S.M (Sat, 05 Aug 2017 18:20:44 GMT):
Has joined the channel.
randombishop (Mon, 07 Aug 2017 11:02:58 GMT):
Hi, a general question please : Would sawtooth be suitable to implement a cryptocurrency with PoET consensus and what would be potential vulnerabilities of PoET in comparison with PoW if money is at stake ?
smagne (Mon, 07 Aug 2017 11:56:52 GMT):
Hello, I need to override the transaction processor is that possible? Could you give me steps to do it?
zac (Mon, 07 Aug 2017 12:52:52 GMT):
@smagne What does "override" mean?
zac (Mon, 07 Aug 2017 12:54:15 GMT):
@randombishop I can't think of any reason you wouldn't be able to build a cryptocurrency on Sawtooth. That said, I don't think anyone has done much research into that particular use case.
zac (Mon, 07 Aug 2017 12:56:38 GMT):
One thing to keep in mind is that "mining" gets very cheap with PoET, so you would probably need to come up with a new concept for distributing the currency. I don't know of any particular vulnerabilities, but I am not very familiar with the internals of PoET.
zac (Mon, 07 Aug 2017 12:58:22 GMT):
@chrisconway http://intelledger.github.io/_autogen/sdk_TP_tutorial_python.html
zac (Mon, 07 Aug 2017 12:58:45 GMT):
That is the tutorial for writing a Tutorial in Python using the SDK
zac (Mon, 07 Aug 2017 12:58:45 GMT):
That is the tutorial for writing a Transaction Processor in Python using the SDK
zac (Mon, 07 Aug 2017 13:00:27 GMT):
There are similar tutorials in Java and JavaScript. There are also Go and C++ SDKs, but no tutorials written yet.
smagne (Mon, 07 Aug 2017 13:04:52 GMT):
Hey, @zac thanks for the answer. I want to define a custom transaction processor if that's possible
smagne (Mon, 07 Aug 2017 13:05:31 GMT):
I was reviewing this links but I don't find how to change it
http://intelledger.github.io/app_developers_guide/docker.html#settings-transaction-family-usage
http://intelledger.github.io/transaction_family_specifications/settings_transaction_family.html
zac (Mon, 07 Aug 2017 13:07:58 GMT):
You are probably going to want the same link I gave to Chris above (http://intelledger.github.io/_autogen/sdk_TP_tutorial_python.html)
zac (Mon, 07 Aug 2017 13:08:53 GMT):
The expectation is that many app developers will be writing their own Transaction Processors, so you don't have to overwrite any existing ones, unless you are looking for a starting point.
zac (Mon, 07 Aug 2017 13:10:59 GMT):
If you do want to start by mucking about with an existing TP, probably IntKey is more appropriate than Settings. It's a simple example TP designed exactly for developers to muck about.
http://intelledger.github.io/transaction_family_specifications/integerkey_transaction_family.html
https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples/intkey_python
zac (Mon, 07 Aug 2017 13:11:48 GMT):
(There are examples of IntKey in all of our SDK languages as well, and TP tutorials in Java and JavaScript as well as Python)
smagne (Mon, 07 Aug 2017 13:14:54 GMT):
Great thanks @zac and how I change or set the transaction processor in my docker instance? what commands should I use to change the transaction processor
zac (Mon, 07 Aug 2017 13:30:51 GMT):
I don't know enough about messing around with Docker. @adamludvik ?
Dan (Mon, 07 Aug 2017 14:09:30 GMT):
I declare "White Wine Spritzer" by this Ned Flanders tribute band to be the song of the week: https://www.youtube.com/watch?v=2BEvh6HSQc0
boydjohnson (Mon, 07 Aug 2017 14:36:39 GMT):
@smagne Once you have a running container it is impossible to change the command. Which docker image are you using? I would suggest using docker-compose and a docker-compose.yaml file.
smagne (Mon, 07 Aug 2017 15:03:09 GMT):
Hi @boydjohnson I'm using a custom docker-compose file so I'm able to change settings if needed.
tommling (Mon, 07 Aug 2017 15:29:40 GMT):
@boydjohnson No I am on ubuntu right now, but I have the docker setup installed along side
boydjohnson (Mon, 07 Aug 2017 15:51:45 GMT):
@tommling I would use a docker-compose setup to use the mock validator like in https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_intkey_smoke_python.yaml
boydjohnson (Mon, 07 Aug 2017 15:52:29 GMT):
@smagne With the custom docker-compose file, change the `entrypoint:` value.
tommling (Mon, 07 Aug 2017 16:36:40 GMT):
@boydjohnson Thanks for that, when I run the integration test it asks for an `ISOLATION_ID` and `SAWTOOTH_CORE` environment variables
tommling (Mon, 07 Aug 2017 16:37:06 GMT):
docker-compose cannot find the sawtooth-validator image
tommling (Mon, 07 Aug 2017 16:37:26 GMT):
Sort of confused where to point it
boydjohnson (Mon, 07 Aug 2017 16:38:34 GMT):
there is a `bin/run_docker_test` script in the sawtooth-core directory. The tests that we run using docker-compose rely on `bin/build_all -l python` being run first (if you are only using python components).
boydjohnson (Mon, 07 Aug 2017 16:39:09 GMT):
the `run_docker_test` script sets up `ISOLATION_ID` and `SAWTOOTH_CORE`.
randombishop (Mon, 07 Aug 2017 16:40:18 GMT):
@zac Thanks again for your answers
tommling (Mon, 07 Aug 2017 16:48:53 GMT):
Thanks @boydjohnson ^^
boydjohnson (Mon, 07 Aug 2017 16:49:08 GMT):
No problem, @tommling
mavstronaut (Mon, 07 Aug 2017 19:36:54 GMT):
Has joined the channel.
smagne (Mon, 07 Aug 2017 22:36:04 GMT):
Hi @boydjohnson I don't understand how should I changed the entrypoint value
EmilianoDAvack (Tue, 08 Aug 2017 07:09:34 GMT):
Has joined the channel.
smagne (Tue, 08 Aug 2017 16:11:01 GMT):
Hello channel, I'm still trying to set a custom transaction processor to my docker environment
smagne (Tue, 08 Aug 2017 16:11:01 GMT):
Hello channel, I'm still trying to set a custom transaction processor to my docker environment. I'm using Javascript SDK and I have custom XO and intkey files
AntonOyung (Tue, 08 Aug 2017 16:44:21 GMT):
Could someone explain the purpose of the javascript XO tp? Could it be used to create a simple web UI to play the game?
zac (Tue, 08 Aug 2017 16:46:49 GMT):
The purpose is just to be an example of how to write a TP in JavaScript for something a little more complex than IntKey
zac (Tue, 08 Aug 2017 16:47:00 GMT):
The Xo CLI client can use it
zac (Tue, 08 Aug 2017 16:47:11 GMT):
You could potentially build a web front-end if you wanted
zac (Tue, 08 Aug 2017 16:47:20 GMT):
But you could do that with any of the Xo TPs
pschwarz (Tue, 08 Aug 2017 19:17:11 GMT):
@smagne are you using the XO and intkey files as starting points?
smagne (Tue, 08 Aug 2017 19:50:55 GMT):
Hi @pschwarz yes I'm using the XO and intKey as starting points, but I want to know how to set my transaction processor
pschwarz (Tue, 08 Aug 2017 19:51:20 GMT):
How are you launching your validator? With the example docker compose file?
smagne (Tue, 08 Aug 2017 20:08:10 GMT):
Message Attachments
smagne (Tue, 08 Aug 2017 20:08:10 GMT):
Message Attachments
smagne (Tue, 08 Aug 2017 20:08:10 GMT):
Message Attachments
smagne (Tue, 08 Aug 2017 20:08:10 GMT):
Message Attachments
pschwarz (Tue, 08 Aug 2017 20:31:28 GMT):
So, it looks like the component port for the validator is exposed, so on your local machine, you should be able to start your modified transaction processor and point it at `tcp://localhost:4004`
pschwarz (Tue, 08 Aug 2017 20:31:59 GMT):
After having done a `docker-compose -f
mfford (Wed, 09 Aug 2017 16:16:44 GMT):
The Hyperledger Sawtooth Technical Forum for Thursday, August 10th will be cancelled this week
Dan (Wed, 09 Aug 2017 18:32:24 GMT):
User User_1 added by Dan.
maurosabi (Wed, 09 Aug 2017 19:19:47 GMT):
Has joined the channel.
maurosabi (Wed, 09 Aug 2017 19:20:20 GMT):
Hi guys, I'm doing some research about consensus algorithms for a University topic I'm working on. Do you know where can I find the basics of Sawtooth algorithm? I'm not talking about the code, just a detailed description on how it works
boydjohnson (Wed, 09 Aug 2017 19:25:39 GMT):
Hi @maurosabi sawtooth uses PoET consensus. Check out these docs: http://intelledger.github.io/0.8/architecture/poet.html
rock_martin (Thu, 10 Aug 2017 04:09:13 GMT):
Has joined the channel.
GongZhang (Thu, 10 Aug 2017 07:12:36 GMT):
Has joined the channel.
randombishop (Thu, 10 Aug 2017 11:10:08 GMT):
Hi, two questions please :
randombishop (Thu, 10 Aug 2017 11:12:43 GMT):
1. After installing sawtooth on ubuntu, the REST API works fine when called from localhost, but seems unaccessible from outside the machine, even though port 8080 is open, is this the expected behaviour ? And is there a way to configure it to accept connections from anywhere ?
randombishop (Thu, 10 Aug 2017 11:14:57 GMT):
2. I installed apache reverse proxy to fix this problem, which works fine now, but strangely, from time to time, I get "Failed to load resource: the server responded with a status of 504 (Gateway Timeout)" ? Has anyone already experienced such problem ?
randombishop (Thu, 10 Aug 2017 11:15:02 GMT):
Thanks in advance !
rock_martin (Thu, 10 Aug 2017 12:23:18 GMT):
can anyone help me out for sawtooth as I want to see the supply chain demo under sawtooth. Where are the chaincodes and how to set it for same use case. I read the docs related that. Thanks in advance
mtgran (Thu, 10 Aug 2017 13:50:27 GMT):
Has joined the channel.
pschwarz (Thu, 10 Aug 2017 14:16:58 GMT):
@randombishop you need to call it with the bind parameter: `--bind 0.0.0.0:8080`, otherwise, it only responds to requests from localhost.
zac (Thu, 10 Aug 2017 14:19:58 GMT):
@randombishop When I was working on setting up an Apache proxy for auth purposes, I ran into the same 504 error
zac (Thu, 10 Aug 2017 14:20:22 GMT):
It only popped occasionally, and only when I first started up the proxy
zac (Thu, 10 Aug 2017 14:20:40 GMT):
After sending a few requests it would go away and not come back until the next restart
zac (Thu, 10 Aug 2017 14:21:06 GMT):
It was easy enough to ignore, and I wasn't confident in my Apache config, so I never got to the bottom of it
Dan (Thu, 10 Aug 2017 14:43:40 GMT):
Hi @rock_martin, that code was against a much earlier version of sawtooth, so we elected not to commit it to the repo. Instead we have a newer supplychain transaction family. You can find docs/code on that in the repo:
```./docs/source/examples/supplychain
./docs/source/examples/supplychain/supplychain_transaction_family.rst
./families/supplychain```
randombishop (Thu, 10 Aug 2017 17:18:19 GMT):
i=7 ; @zac thanks for help number i ; i++
randombishop (Thu, 10 Aug 2017 17:18:43 GMT):
thanks to @pschwarz as well !
zac (Thu, 10 Aug 2017 17:19:32 GMT):
Not sure I helped much. I am curious if it is something with the REST API that is causing that 504. Let me know if you get to the bottom of it.
zac (Thu, 10 Aug 2017 18:25:59 GMT):
So @AkarshaMahadeva was asking me about switching his custom Transaction Processor from `"csv-utf8"` to `"json"`, and what was involved in that
zac (Thu, 10 Aug 2017 18:26:09 GMT):
Figured we'd take the conversation public
zac (Thu, 10 Aug 2017 18:27:54 GMT):
The first thing is just that that `payload_encoding` string in the `TransactionHeader` is effectively arbitray
zac (Thu, 10 Aug 2017 18:28:23 GMT):
It's something that your Transaction Processor will use to determine which handler should handle the payload
zac (Thu, 10 Aug 2017 18:29:04 GMT):
So you could have both a CSV handler, and a JSON handler in the same processor, and the validator will send payloads to the appropriate one
zac (Thu, 10 Aug 2017 18:30:16 GMT):
In terms of the mechanics of the actual decoding, you can use JSON
zac (Thu, 10 Aug 2017 18:30:16 GMT):
In terms of the mechanics of the actual encoding/decoding, you can use JSON
zac (Thu, 10 Aug 2017 18:31:13 GMT):
I'm wrote a simple JS transaction handler which uses JSON.
zac (Thu, 10 Aug 2017 18:31:36 GMT):
Just `json.dumps` before you save it, and `json.loads` after you fetch it
zac (Thu, 10 Aug 2017 18:32:41 GMT):
You should sort the keys though. Make sure the `json.dumps` output is always identical.
AkarshaMahadeva (Thu, 10 Aug 2017 18:57:20 GMT):
So that essentially means I donot need to change my encoding scheme in the handler? and payload encoding of client?
zac (Thu, 10 Aug 2017 18:58:32 GMT):
You don't _need_ to change the `payload_encoding`, no
zac (Thu, 10 Aug 2017 18:58:41 GMT):
You probably should, just to avoid confusion
zac (Thu, 10 Aug 2017 18:59:27 GMT):
But the `payload_encoding` could be `"foobar"`, and as long as you had a handler to handle it, it would work fine, regardless of what the actual encoding was
zac (Thu, 10 Aug 2017 19:00:44 GMT):
what is really important is that the the handler will be able to correctly _decode_ what the client _encoded_
zac (Thu, 10 Aug 2017 19:03:55 GMT):
so if your client is sending _csv_ and your handler tries to `json.dumps` it, it won't work obviously
AkarshaMahadeva (Thu, 10 Aug 2017 19:04:54 GMT):
So the data in payload should be json
AkarshaMahadeva (Thu, 10 Aug 2017 19:05:06 GMT):
?
zac (Thu, 10 Aug 2017 19:05:29 GMT):
yes
zac (Thu, 10 Aug 2017 19:05:38 GMT):
(byte-encoded JSON)
zac (Thu, 10 Aug 2017 19:08:37 GMT):
I believe Python's `json.loads` and `json.dumps` will automatically byte encode/decode it though
zac (Thu, 10 Aug 2017 19:09:00 GMT):
In JavaScript you have to convert it from a string to raw bytes
pschwarz (Thu, 10 Aug 2017 19:34:31 GMT):
I think you still need to call `.encode()` on the output of `json.dumps`. I pretty sure it produces a string, not bytes
zac (Thu, 10 Aug 2017 19:41:07 GMT):
_dammit_
zac (Thu, 10 Aug 2017 19:41:15 GMT):
well do the thing that makes bytes
zac (Thu, 10 Aug 2017 19:43:00 GMT):
I guess you don't need to worry about sorting the keys either
zac (Thu, 10 Aug 2017 19:43:17 GMT):
as far as transaction payloads go at least
AntonOyung (Thu, 10 Aug 2017 20:33:29 GMT):
in xo_client.py, they create a TransactionHeader() and Transaction() object. If I'm trying to do the equivalent but in javascript as a web app that makes the http requests, would I use the encoders.js TransactionEncoder to create the equivalent transaction headers/ transactions?
zac (Thu, 10 Aug 2017 20:36:15 GMT):
yes
zac (Thu, 10 Aug 2017 20:36:32 GMT):
you don't have to manually make the header with encoders.js though
zac (Thu, 10 Aug 2017 20:36:37 GMT):
that is handled automatically
AntonOyung (Thu, 10 Aug 2017 20:38:20 GMT):
Could you elaborate?
AntonOyung (Thu, 10 Aug 2017 20:38:37 GMT):
in xo_client they make it manually right?
zac (Thu, 10 Aug 2017 20:39:09 GMT):
probably
zac (Thu, 10 Aug 2017 20:39:45 GMT):
the equivalent Python functionality was only merged pretty recently
zac (Thu, 10 Aug 2017 20:39:52 GMT):
the xo client predates it
zac (Thu, 10 Aug 2017 20:40:21 GMT):
yes, just checked, it is done manually
zac (Thu, 10 Aug 2017 20:41:05 GMT):
`encoders.js` (and more recently, `encoding.py`) are conveniences
zac (Thu, 10 Aug 2017 20:41:22 GMT):
you _could_ do it manually in either language
AntonOyung (Thu, 10 Aug 2017 20:42:13 GMT):
what is the alternative?
zac (Thu, 10 Aug 2017 20:43:19 GMT):
basically, there are two steps with the encoders:
1. Create a `TransactionEncoder` with your private key and any header values you want to use on every Transaction
2. User `create` with your Transaction payload to make a fully finished Transaction
zac (Thu, 10 Aug 2017 20:45:28 GMT):
I recently did this for a test script in JS. It looks like this:
```
const FAMILY = 'transfer-chain'
const PREFIX = '19d832'
const SUE = {
priv: 'c0c375e09a2451a6b1caba020833514b733d9e074e8c3a4a8ccfcaa0006c0329',
pub: '0214245560fcf64eeed0686c9c287daef114c97d646339f71c9029d4dd11ef9e3d'
}
const encode = obj => Buffer.from(JSON.stringify(obj, Object.keys(obj).sort()))
const encoderSettings = {
batcherPubkey: SUE.pub,
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: '0.0',
payloadEncoding: 'application/json',
payloadEncoder: encode
}
const sueEncoder = new TransactionEncoder(SUE.priv, encoderSettings)
const sueTxn = sueEncoder.create({action: 'create', record: 'foo'})
```
zac (Thu, 10 Aug 2017 20:45:28 GMT):
I recently did this for a test script in JS. It looks like this:
```
const { BatchEncoder, TransactionEncoder } = require('sawtooth-sdk')
const FAMILY = 'transfer-chain'
const PREFIX = '19d832'
const SUE = {
priv: 'c0c375e09a2451a6b1caba020833514b733d9e074e8c3a4a8ccfcaa0006c0329',
pub: '0214245560fcf64eeed0686c9c287daef114c97d646339f71c9029d4dd11ef9e3d'
}
const encode = obj => Buffer.from(JSON.stringify(obj, Object.keys(obj).sort()))
const encoderSettings = {
batcherPubkey: SUE.pub,
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: '0.0',
payloadEncoding: 'application/json',
payloadEncoder: encode
}
const sueEncoder = new TransactionEncoder(SUE.priv, encoderSettings)
const sueTxn = sueEncoder.create({action: 'create', record: 'foo'})
```
zac (Thu, 10 Aug 2017 20:45:28 GMT):
I recently did this for a test script in JS. It looks like this:
```
const { BatchEncoder, TransactionEncoder } = require('sawtooth-sdk')
const FAMILY = 'transfer-chain'
const PREFIX = '19d832'
const SUE = {
priv: 'c0c375e09a2451a6b1caba020833514b733d9e074e8c3a4a8ccfcaa0006c0329',
pub: '0214245560fcf64eeed0686c9c287daef114c97d646339f71c9029d4dd11ef9e3d'
}
const encode = obj => Buffer.from(JSON.stringify(obj, Object.keys(obj).sort()))
const encoderSettings = {
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: '0.0',
payloadEncoding: 'application/json',
payloadEncoder: encode
}
const sueEncoder = new TransactionEncoder(SUE.priv, encoderSettings)
const sueTxn = sueEncoder.create({action: 'create', record: 'foo'})
```
zac (Thu, 10 Aug 2017 20:45:28 GMT):
I recently did this for a test script in JS. It looks like this:
```
const { BatchEncoder, TransactionEncoder } = require('sawtooth-sdk')
const FAMILY = 'transfer-chain'
const PREFIX = '19d832'
const SUE = {
priv: 'c0c375e09a2451a6b1caba020833514b733d9e074e8c3a4a8ccfcaa0006c0329',
pub: '0214245560fcf64eeed0686c9c287daef114c97d646339f71c9029d4dd11ef9e3d'
}
const encode = obj => Buffer.from(JSON.stringify(obj))
const encoderSettings = {
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: '0.0',
payloadEncoding: 'application/json',
payloadEncoder: encode
}
const sueEncoder = new TransactionEncoder(SUE.priv, encoderSettings)
const sueTxn = sueEncoder.create({action: 'create', record: 'foo'})
```
zac (Thu, 10 Aug 2017 20:45:28 GMT):
I recently did this for a test script in JS. It looks like this:
```
const { BatchEncoder, TransactionEncoder } = require('sawtooth-sdk')
const FAMILY = 'transfer-chain'
const PREFIX = '19d832'
const SUE = {
priv: 'c0c375e09a2451a6b1caba020833514b733d9e074e8c3a4a8ccfcaa0006c0329',
pub: '0214245560fcf64eeed0686c9c287daef114c97d646339f71c9029d4dd11ef9e3d'
}
const encoderSettings = {
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: '0.0',
payloadEncoding: 'application/json',
payloadEncoder: encode = obj => Buffer.from(JSON.stringify(obj))
}
const sueEncoder = new TransactionEncoder(SUE.priv, encoderSettings)
const sueTxn = sueEncoder.create({action: 'create', record: 'foo'})
```
zac (Thu, 10 Aug 2017 20:45:28 GMT):
I recently did this for a test script in JS. It looks like this:
```
const { TransactionEncoder } = require('sawtooth-sdk')
const FAMILY = 'transfer-chain'
const PREFIX = '19d832'
const SUE = {
priv: 'c0c375e09a2451a6b1caba020833514b733d9e074e8c3a4a8ccfcaa0006c0329',
pub: '0214245560fcf64eeed0686c9c287daef114c97d646339f71c9029d4dd11ef9e3d'
}
const encoderSettings = {
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: '0.0',
payloadEncoding: 'application/json',
payloadEncoder: encode = obj => Buffer.from(JSON.stringify(obj))
}
const sueEncoder = new TransactionEncoder(SUE.priv, encoderSettings)
const sueTxn = sueEncoder.create({action: 'create', record: 'foo'})
```
zac (Thu, 10 Aug 2017 20:45:28 GMT):
I recently did this for a test script in JS. It looks like this:
```
const { TransactionEncoder } = require('sawtooth-sdk')
const FAMILY = 'transfer-chain'
const PREFIX = '19d832'
const SUE = {
priv: 'c0c375e09a2451a6b1caba020833514b733d9e074e8c3a4a8ccfcaa0006c0329',
pub: '0214245560fcf64eeed0686c9c287daef114c97d646339f71c9029d4dd11ef9e3d'
}
const encoderSettings = {
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: '0.0',
payloadEncoding: 'application/json',
payloadEncoder: encode = obj => Buffer.from(JSON.stringify(obj))
}
const sueEncoder = new TransactionEncoder(SUE.priv, encoderSettings)
const sueTxn1 = sueEncoder.create({action: 'create', record: 'foo'})
const sueTxn2 = sueEncoder.create({action: 'create', record: 'bar'})
```
AntonOyung (Thu, 10 Aug 2017 20:46:39 GMT):
So this is what I _should_ do?
zac (Thu, 10 Aug 2017 20:47:38 GMT):
The best example of doing it manually, is just the SDK itself:
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/javascript/client/encoders.js#L111
zac (Thu, 10 Aug 2017 20:48:55 GMT):
There is a fair amount of boiler plate in the example I posted
zac (Thu, 10 Aug 2017 20:49:02 GMT):
But that is all one time set up
zac (Thu, 10 Aug 2017 20:49:31 GMT):
from here on out I can just bang on that `create` message and build as many Transactions as I like
zac (Thu, 10 Aug 2017 20:49:31 GMT):
from here on out I can just bang on that `create` method and build as many Transactions as I like
zac (Thu, 10 Aug 2017 20:51:06 GMT):
Doing the same thing manually would require about as much work as you see there _for every Transaction_
zac (Thu, 10 Aug 2017 20:51:37 GMT):
I also don't have to worry about how to use Protobufs, or hash my payload, or generate a public key.
zac (Thu, 10 Aug 2017 20:52:01 GMT):
**I** would prefer the SDK.
AntonOyung (Thu, 10 Aug 2017 20:59:40 GMT):
so in my send_xo_txn equivalent I would first create and Transactionencoder outside and then call create in my send_xo_txn and then send that
AntonOyung (Thu, 10 Aug 2017 21:00:23 GMT):
as my data in my ajax post
AntonOyung (Thu, 10 Aug 2017 21:08:13 GMT):
?
zac (Fri, 11 Aug 2017 10:33:03 GMT):
The way the `XoClient` is written, it gets instantiated once per request essentially
zac (Fri, 11 Aug 2017 10:34:21 GMT):
So, you could build your encoder during `__init__` and save it to `_encoder` or something, but I don't think it will actually make much of a difference in this case.
zac (Fri, 11 Aug 2017 10:45:40 GMT):
So you could do it all in `_send_xo_txn` too. Something like:
```
transaction = TransactionEncoder(
self._private_key,
inputs=[address],
outputs=[address],
family_name='xo',
family_version='1.0',
payload_encoding='csv-utf8'
).create(payload)
batcher = BatchEncoder(self._private_key)
batch = batcher.create(transaction)
batch_id = batch.header_signature
batch_list = batcher.encode(batch)
```
zac (Fri, 11 Aug 2017 10:46:10 GMT):
(Not that in the above example, batch_list is already serialized as bytes)
zac (Fri, 11 Aug 2017 10:46:10 GMT):
(Note that in the above example, batch_list is already serialized as bytes)
zac (Fri, 11 Aug 2017 10:46:10 GMT):
_(Note that in the above example, batch_list is already serialized as bytes)_
zac (Fri, 11 Aug 2017 10:46:10 GMT):
_(Note that in the above example, `batch_list` is already serialized as bytes)_
zac (Fri, 11 Aug 2017 10:46:10 GMT):
_(Note that in the above example, unlike in _xo_client.py_, `batch_list` is already serialized as bytes)_
zac (Fri, 11 Aug 2017 10:46:10 GMT):
_(Note that in the above example, unlike in `xo_client.py`, `batch_list` is already serialized as bytes)_
zac (Fri, 11 Aug 2017 10:46:10 GMT):
_(Note that in the above example, unlike in _xo\_client.py_, `batch_list` is already serialized as bytes)_
zac (Fri, 11 Aug 2017 10:46:10 GMT):
_(Note that in the above example, unlike in `xo_client.py`, `batch_list` is already serialized as bytes)_
zac (Fri, 11 Aug 2017 10:49:58 GMT):
In this particular case, since you can reuse the encoder, it's only saving you about 10 lines of code, but more importantly you never have to touch a protobuf, sign or hash anything, or generate a public key
zac (Fri, 11 Aug 2017 10:49:58 GMT):
In this particular case, since you can't reuse the encoder, it's only saving you about 10 lines of code, but more importantly you never have to touch a protobuf, sign or hash anything, or generate a public key
zac (Fri, 11 Aug 2017 10:49:58 GMT):
In this particular case, since you can't reuse the encoder, it's only saving you about 10 lines of code. But more important than line count, using the encoder means you never have to touch a protobuf, sign or hash anything, or generate a public key.
Dan (Fri, 11 Aug 2017 16:13:36 GMT):
@FlyingTiger looks like you are all set on https://github.com/hyperledger/sawtooth-core/pull/729
Dan (Fri, 11 Aug 2017 19:49:17 GMT):
Need one more review on https://github.com/hyperledger/sawtooth-core/pull/748
Dan (Fri, 11 Aug 2017 19:50:21 GMT):
@zac @boydjohnson @jsmitchell @FlyingTiger @cianx ^
zac (Fri, 11 Aug 2017 19:57:34 GMT):
@pschwarz Approved
AntonOyung (Fri, 11 Aug 2017 21:27:17 GMT):
does anyone know how I can come up with the address zac was mentioning ?
pschwarz (Fri, 11 Aug 2017 21:33:55 GMT):
For XO, you'll find it here: https://intelledger.github.io/transaction_family_specifications/xo_transaction_family.html#addressing
AntonOyung (Fri, 11 Aug 2017 21:35:06 GMT):
is there a javascript equivalent ?
Dan (Sat, 12 Aug 2017 14:18:56 GMT):
@AntonOyung would you mind writing up everything that was unclear or difficult so we can make some improvements?
zac (Sat, 12 Aug 2017 17:06:05 GMT):
@AntonOyung The `address` in the `xo_client.py` code I modified is set earlier in that file here:
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/xo_python/sawtooth_xo/xo_client.py#L153
zac (Sat, 12 Aug 2017 17:08:02 GMT):
In terms of how you come up with an address generally, it is specific to the transaction family. Peter linked to where Xo's addressing scheme is explained.
zac (Sat, 12 Aug 2017 17:14:11 GMT):
A JavaScript example for generating the address for "mygame" from the `node` REPL would look like this:
```
> const { createHash } = require('crypto')
undefined
> createHash('sha512').update('xo').digest('hex').slice(0, 6) +
... createHash('sha512').update('mygame').digest('hex').slice(0, 64)
'5b7349700e158b598043efd6d7610345a75a00b22ac14c9278db53f586179a92b72fbd'
```
zac (Sat, 12 Aug 2017 17:18:13 GMT):
Notice how it produces the exact same address as the Python example. What's really important here is the steps:
```
1. Create a SHA-512 hash of the string "xo"
1b. Format that hash as a hex string
1c. Take the first 6 characters of that string
2. Create a SHA-512 hash of the string "mygame"
2b. Format that hash as a hex string
2c. Take the first 64 characters of that string
3. Concatenate these to strings into one 70 character address
```
zac (Sat, 12 Aug 2017 17:18:13 GMT):
Notice how it produces the exact same address as the Python example. What's really important here is the steps:
```
1. Create a SHA-512 hash of the string "xo"
1b. Format that hash as a hex string
1c. Take the first 6 characters of that string
2. Create a SHA-512 hash of the string "mygame"
2b. Format that hash as a hex string
2c. Take the first 64 characters of that string
3. Concatenate these two strings into one 70 character address
```
zac (Sat, 12 Aug 2017 17:18:13 GMT):
Notice how it produces the exact same address as the Python example. What's really important here is the steps:
```
1. Create a SHA-512 hash of the string "xo"
1b. Format that hash as a hex string
1c. Take the first 6 characters of that string
2. Create a SHA-512 hash of the string "mygame"
2b. Format that hash as a hex string
2c. Take the first 64 characters of that string
3. Concatenate these two strings into one 70 character hex address
```
zac (Sat, 12 Aug 2017 17:21:00 GMT):
Transaction Families can use any addressing scheme they like, so long as it produces 70 character hex addresses, and the first six characters are a prefix specific to the transaction family.
zac (Sat, 12 Aug 2017 17:23:17 GMT):
(Also, you should only "break up" the address in even-number chunks. Don't worry about the reasons why right now, but there is a reason the transaction family prefix is 6 characters, and not 5 or 7)
zac (Sat, 12 Aug 2017 17:23:17 GMT):
(Also, you should only "break up" the address in even-number chunks. Don't worry about why right now, but there is a reason the transaction family prefix is 6 characters, and not 5 or 7)
zac (Sat, 12 Aug 2017 17:23:45 GMT):
These are the rules for addressing in the Xo family though. And they work well for Xo's purposes.
zac (Sat, 12 Aug 2017 17:23:45 GMT):
What I listed above are the rules for addressing the Xo family happens to use, and they work well for Xo's purposes.
randombishop (Sun, 13 Aug 2017 23:44:35 GMT):
Hi all ! Question of the day please : When looking at debug messages in my transaction processor, i noticed that "apply" function is being called twice for every transaction. I guess it is normal behaviour because it actually works fine and state is only changed once, but I just wanted to know why and maybe understand more about this "apply" function. Tks !
Dan (Mon, 14 Aug 2017 14:45:16 GMT):
@zac can you see if your review comments are addressed for https://github.com/hyperledger/sawtooth-core/pull/718? I'd like to get this PR merged soon. Between vacations and different volunteer owners this PR has been _maturing_ for longer than typical.
zac (Mon, 14 Aug 2017 14:50:39 GMT):
Taking a look . . .
Dan (Mon, 14 Aug 2017 14:56:08 GMT):
muchas gracias
AntonOyung (Mon, 14 Aug 2017 16:51:44 GMT):
Thanks @zac for explaining how to write the address! @Dan I would be happy to compile a list of things that I found difficult to understand
AntonOyung (Mon, 14 Aug 2017 16:55:19 GMT):
For the payload, xo_client.py does `payload = ",".join([name, action, str(space)]).encode()` where they join and then encode, however if I am using the Encoder.js `createEncoded(payload)` method, do I still need to input the payload encoded already? or is `var payload = name + "," + action + "," + space;` sufficient?
agunde (Mon, 14 Aug 2017 17:03:01 GMT):
@randombishop The first apply is on block publishing. And then it happens again on block validation. So yes, two "apply"s are normal.
randombishop (Mon, 14 Aug 2017 17:09:03 GMT):
Tks @agunde Makes sense
zac (Mon, 14 Aug 2017 17:14:41 GMT):
@AntonOyung Lots of things are being encoded here
AntonOyung (Mon, 14 Aug 2017 17:15:30 GMT):
```_send_xo_txn: function(name, action, space="", wait = null, auth_user = null, auth_password = null) {
var payload = name + "," + action + "," + space;
var address = this._get_address(name);
TxnEncoder = new Encoder.TransactionEncoder(
this._privateKey,
inputs=[address],
outputs=[address],
family_name='xo',
family_version='1.0',
payload_encoding='csv-utf8'
);
BatchEncoder = new Encoder.BatchEncoder(this._privateKey);
var transaction = TxnEncoder.createEncoded(payload);
var batch = BatchEncoder.createEncoded(transaction);
response = this._send_request(
"batches", batch,
'application/octet-stream',
auth_user = auth_user,
auth_password = auth_password
);
return response;
} ```
zac (Mon, 14 Aug 2017 17:15:39 GMT):
The payload is encoded, the TransactionHeader is encoded, then the Transaction _may_ be encoded, or it might get wrapped in a Batch which is encoded (and also has an encoded BatchHeader)
zac (Mon, 14 Aug 2017 17:16:18 GMT):
So the answer to your question is actually dependent on how you set up your encoder
zac (Mon, 14 Aug 2017 17:16:18 GMT):
So the answer to your question is actually dependent on how you set up your TransactionEncoder
zac (Mon, 14 Aug 2017 17:16:18 GMT):
So the answer to your question is actually dependent on how you set up your `TransactionEncoder`
zac (Mon, 14 Aug 2017 17:17:18 GMT):
if you instantiated it with a `payloadEncoder`, then it could do the work of encoding the _payload_
zac (Mon, 14 Aug 2017 17:17:45 GMT):
If not, the payload must be passed into `createEncoded` as encoded bytes
zac (Mon, 14 Aug 2017 17:18:29 GMT):
But the "encoded" in `createEncoded` is referring to the _transaction_, not the payload
zac (Mon, 14 Aug 2017 17:18:47 GMT):
(or the Batch for `BatchEncoder.createEncoded`)
zac (Mon, 14 Aug 2017 17:19:40 GMT):
Make sure you review the docstrings for those methods, particularly when it comes to use of the word "encoded"
AntonOyung (Mon, 14 Aug 2017 17:26:07 GMT):
In encoder.js they do instantiate a payloadEncoder and encode the payload
AntonOyung (Mon, 14 Aug 2017 17:28:39 GMT):
so I think it is being done correctly
AntonOyung (Mon, 14 Aug 2017 17:29:05 GMT):
I just realized I am not passing in the headers into createEncoded though
zac (Mon, 14 Aug 2017 17:29:42 GMT):
You mean `x => x`?
zac (Mon, 14 Aug 2017 17:29:58 GMT):
That is just an identity function, so `create` has something to call
zac (Mon, 14 Aug 2017 17:30:05 GMT):
it won't encode anything
zac (Mon, 14 Aug 2017 17:30:14 GMT):
`x` must already be encoded
AntonOyung (Mon, 14 Aug 2017 17:32:21 GMT):
How can I encode it myself ?
zac (Mon, 14 Aug 2017 17:39:59 GMT):
However you want with the payload
zac (Mon, 14 Aug 2017 17:40:44 GMT):
A simple thing to do in Node.js is just to use `Buffer.from`
AntonOyung (Mon, 14 Aug 2017 17:45:16 GMT):
So I can jsut do payload = Buffer.from(name + "," + action + "," + space)
AntonOyung (Mon, 14 Aug 2017 17:45:19 GMT):
adn then pass it in ?
zac (Mon, 14 Aug 2017 17:53:09 GMT):
yep
zac (Mon, 14 Aug 2017 17:54:29 GMT):
also, use `TransactionEncoder.create`, not `createEncoded`. That will encode your Transaction in a TransactionList, which you only want if you are transmitting it to be batched somewhere else. http://intelledger.github.io/_autogen/sdk_submit_tutorial_js.html#optional-encode-the-transaction-s
AntonOyung (Mon, 14 Aug 2017 17:57:27 GMT):
and `BatchEncoder.create(transaction)` too i assume ?
AntonOyung (Mon, 14 Aug 2017 18:18:49 GMT):
I was able to submit a post request by doing `BatchEncoder.createEncoded(txn)` however the response I'm getting says the status of my block is "pending" instead of committed. Does this mean the format of my transaction wasn't correct?
zac (Mon, 14 Aug 2017 18:27:50 GMT):
for the Batch you want it encoded
zac (Mon, 14 Aug 2017 18:28:14 GMT):
The reason Batches and Transactions might be encoded is to transmit them, usually over HTTP
zac (Mon, 14 Aug 2017 18:28:47 GMT):
The Transaction, you are not transmitting, you are just piping directly into a Batch
zac (Mon, 14 Aug 2017 18:29:12 GMT):
The Batch you are submitting over HTTP, so that needed to be bytes
AntonOyung (Mon, 14 Aug 2017 18:29:29 GMT):
Sorry I mispoke, I am submitted a batch with my post request
zac (Mon, 14 Aug 2017 18:29:37 GMT):
headers and payloads always need to be bytes for other reasons
AntonOyung (Mon, 14 Aug 2017 18:29:55 GMT):
```request.post({
url: full_url,
body: data,
headers: {'Content-Type' : 'application/octet-stream'}
}, (err, response) => {
if (err) return console.log(err);
console.log(response.body);
} ```
AntonOyung (Mon, 14 Aug 2017 18:30:21 GMT):
this is my request which follows the structure from the link you posted
AntonOyung (Mon, 14 Aug 2017 19:01:25 GMT):
I am able to submit the request but the changes aren't being committed
AntonOyung (Mon, 14 Aug 2017 19:01:43 GMT):
my validator output looks like ```[18:58:32.114 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 847 bytes
[18:58:32.122 DEBUG executor] no transaction processors registered for processor type : :
[18:58:32.125 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'a9df596c4bb846a9'
[18:58:32.126 INFO executor] Waiting for transaction processor (, , )```
AntonOyung (Mon, 14 Aug 2017 19:02:09 GMT):
does this mean the transaction processor isn't being specified properly?
boydjohnson (Mon, 14 Aug 2017 19:05:30 GMT):
Yeah, it looks like the family, version, and encoding in the TransactionHeader is not being set.
AntonOyung (Mon, 14 Aug 2017 19:13:08 GMT):
the constructor for the encoder looks liek this
```constructor (privateKey, template = {}) {
this._privateKey = privateKey
this._publicKey = signer.getPublicKey(privateKey)
this._payloadEncoder = template.payloadEncoder || (x => x)
// TransactionHeader defaults can be modified after instantiation
this.batcherPubkey = template.batcherPubkey || this._publicKey
this.familyName = template.familyName || ''
this.familyVersion = template.familyVersion || ''
this.inputs = template.inputs || []
this.outputs = template.outputs || []
this.payloadEncoding = template.payloadEncoding || ''
}
```
AntonOyung (Mon, 14 Aug 2017 19:13:28 GMT):
and I'm passing in this: ```TxnEncoder = new Encoder.TransactionEncoder(
this._privateKey,
inputs=[address],
outputs=[address],
familyName='xo',
familyVersion='1.0',
payloadEncoding='csv-utf8'
);```
AntonOyung (Mon, 14 Aug 2017 19:14:24 GMT):
so I thought i was properly setting it
AntonOyung (Mon, 14 Aug 2017 19:17:12 GMT):
I just modified the values after instantiating it and now I'm able to submit the request however it says that the batch is invalid
AntonOyung (Mon, 14 Aug 2017 19:17:53 GMT):
```[19:15:59.840 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 860 bytes
[19:15:59.846 DEBUG interconnect] ServerThread sending TP_PROCESS_REQUEST to b'5f47e73118784dde'
[19:15:59.848 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'a9df596c4bb846a9'
[19:15:59.853 DEBUG interconnect] ServerThread receiving TP_STATE_GET_REQUEST message: 177 bytes
[19:15:59.856 DEBUG interconnect] ServerThread sending TP_STATE_GET_RESPONSE to b'5f47e73118784dde'
[19:15:59.862 DEBUG interconnect] ServerThread receiving TP_PROCESS_RESPONSE message: 184 bytes
[19:15:59.864 DEBUG interconnect] message round trip: TP_PROCESS_RESPONSE 0.017491817474365234
[19:15:59.948 DEBUG publisher] Batch 309cfd9e7e021c2fa63e1ccdb74b5ef4b17a56845258194d578bc445c61bdcb403b011d8c01a7c7a78baef31f25312443818b831677f2af90c5f6fcc56ae7176 invalid, not added to block.
[19:15:59.949 DEBUG publisher] Abandoning block (1, S:, P:6776dcda): no batches added
```
AntonOyung (Mon, 14 Aug 2017 19:17:55 GMT):
any ideas ?
AntonOyung (Mon, 14 Aug 2017 19:19:56 GMT):
the response url gives me this message: "message": "Tried to get unauthorized address: ['5b734921409c347a3f4aa600db1fe5d1ef579bcc9c39fbf84435be1be66936133d4d6d']"
zac (Mon, 14 Aug 2017 19:27:45 GMT):
in your original code you were specifying those fields like snake-cased:
```
family_name='xo',
family_version='1.0',
payload_encoding='csv-utf8'
```
zac (Mon, 14 Aug 2017 19:29:01 GMT):
I believe that would set the camel-cased properties (`familyName`, etc) to empty strings, which would have caused your previous error.
AntonOyung (Mon, 14 Aug 2017 19:33:16 GMT):
@zac in regards to my current error, I am using the code you sent like this ```_get_address: function(name) {
return createHash('sha512').update('xo').digest('hex').slice(0, 6) + createHash('sha512').update(name).digest('hex').slice(0, 64);
},```
AntonOyung (Mon, 14 Aug 2017 19:34:49 GMT):
is that the correct format ?
zac (Mon, 14 Aug 2017 19:35:58 GMT):
Should be
zac (Mon, 14 Aug 2017 19:36:14 GMT):
I don't know if any Xo folks have insight
zac (Mon, 14 Aug 2017 19:36:27 GMT):
What is the name of the game you are getting rejected with?
AntonOyung (Mon, 14 Aug 2017 19:36:35 GMT):
"game2"
AntonOyung (Mon, 14 Aug 2017 19:37:29 GMT):
I had it log the trnsaction the handler.py received
AntonOyung (Mon, 14 Aug 2017 19:37:33 GMT):
` GAME: game2 ACTION: create SPACE: null SIGNER: 0368e2988f012531ea7d7d037e9763a62a38098d33dc98ce0fc81f849cd01bd30e`
AntonOyung (Mon, 14 Aug 2017 19:37:54 GMT):
and the logger from the tp gave me `[19:15:59.858 WARNING core] Invalid Transaction Tried to get unauthorized address: ['5b734921409c347a3f4aa600db1fe5d1ef579bcc9c39fbf84435be1be66936133d4d6d']`
boydjohnson (Mon, 14 Aug 2017 19:38:17 GMT):
It looks like the inputs were not set correctly. That was an AuthorizationException.
AntonOyung (Mon, 14 Aug 2017 19:39:38 GMT):
So I am not submitting my request properly?
boydjohnson (Mon, 14 Aug 2017 19:42:28 GMT):
Yeah the inputs in the TransactionHeader is not correct.
AntonOyung (Mon, 14 Aug 2017 19:43:49 GMT):
Do you know which inputs ?
AntonOyung (Mon, 14 Aug 2017 19:44:13 GMT):
Should I be passing in sometihng for `auth_user` and `auth_password`
boydjohnson (Mon, 14 Aug 2017 19:46:23 GMT):
It's the address, so `inputs=[address]` should do it. From your code snippets I that, but it isn't being set correctly.
zac (Mon, 14 Aug 2017 19:48:14 GMT):
I believe `['5b734921409c347a3f4aa600db1fe5d1ef579bcc9c39fbf84435be1be66936133d4d6d']` is the correct value for `inputs`, and that seems like what he is setting it to
zac (Mon, 14 Aug 2017 19:48:20 GMT):
Unless I am missing something
AntonOyung (Mon, 14 Aug 2017 19:49:11 GMT):
Yeah I believe I am giving it the correct address value wise at least
AntonOyung (Mon, 14 Aug 2017 19:51:02 GMT):
Oh I was able to fix it
AntonOyung (Mon, 14 Aug 2017 19:51:19 GMT):
I think there was some issue with reading in the settings
AntonOyung (Mon, 14 Aug 2017 19:51:34 GMT):
Instead I just assigned the values after instantiating the new TxnEncoder
AntonOyung (Mon, 14 Aug 2017 19:51:48 GMT):
like this: ``` TxnEncoder = new Encoder.TransactionEncoder(
this._privateKey
);
TxnEncoder.familyName = 'xo';
TxnEncoder.familyVersion = '1.0';
TxnEncoder.payloadEncoding = 'csv-utf8';
TxnEncoder.inputs=[address];
TxnEncoder.outputs=[address];
```
AntonOyung (Mon, 14 Aug 2017 19:51:59 GMT):
this allowed me to create a new game successfully
AntonOyung (Mon, 14 Aug 2017 19:52:34 GMT):
Thanks for the help @zac and @boydjohnson !!
zac (Mon, 14 Aug 2017 19:53:23 GMT):
That is perhaps a bug
zac (Mon, 14 Aug 2017 19:53:34 GMT):
What was the code you were using that didn't work?
zac (Mon, 14 Aug 2017 19:54:05 GMT):
oh I see
zac (Mon, 14 Aug 2017 19:54:19 GMT):
JavaScript does not have named parameters like Python
zac (Mon, 14 Aug 2017 19:54:55 GMT):
This is not valid JS:
```
TxnEncoder = new Encoder.TransactionEncoder(
this._privateKey,
inputs=[address],
outputs=[address],
family_name='xo',
family_version='1.0',
payload_encoding='csv-utf8'
);
```
AntonOyung (Mon, 14 Aug 2017 19:54:57 GMT):
``` TxnEncoder = new Encoder.TransactionEncoder(
this._privateKey,
inputs=[address],
outputs=[address],
familyName = 'xo',
familyVersion = '1.0',
payloadEncoding = 'csv-utf8'
);```
AntonOyung (Mon, 14 Aug 2017 19:55:20 GMT):
Oh I see
zac (Mon, 14 Aug 2017 19:55:28 GMT):
JS is just evaluating the assignment operators
AntonOyung (Mon, 14 Aug 2017 19:55:30 GMT):
thanks for the clarification
zac (Mon, 14 Aug 2017 19:55:57 GMT):
You are essentially calling:
```
TxnEncoder = new Encoder.TransactionEncoder(
this._privateKey,
[address],
[address],
'xo',
'1.0',
='csv-utf8'
);
```
zac (Mon, 14 Aug 2017 19:55:57 GMT):
You are essentially calling:
```
TxnEncoder = new Encoder.TransactionEncoder(
this._privateKey,
[address],
[address],
'xo',
'1.0',
'csv-utf8'
);
```
zac (Mon, 14 Aug 2017 19:56:21 GMT):
And as TransactionEncoder only takes two parameters, most of that is thrown out.
zac (Mon, 14 Aug 2017 19:58:24 GMT):
It _should_ look like this:
```
TxnEncoder = new Encoder.TransactionEncoder(this._privateKey, {
inputs: [address],
outputs: [address],
familyName: 'xo',
familyVersion: '1.0',
payloadEncoding: 'csv-utf8'
});
```
zac (Mon, 14 Aug 2017 19:59:41 GMT):
A settings object like is the way JS commonly gets named parameter behavior
zac (Mon, 14 Aug 2017 19:59:41 GMT):
A settings object like that is the way JS commonly gets named parameter behavior
Dan (Mon, 14 Aug 2017 20:27:40 GMT):
anyone have our unit coverage handy?
boydjohnson (Mon, 14 Aug 2017 20:29:16 GMT):
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/master/lastSuccessfulBuild/artifact/coverage/html/index.html This was from last successful master build.
Dan (Mon, 14 Aug 2017 21:09:34 GMT):
ahh thanks @boydjohnson . forgot I could get them there.
Dan (Mon, 14 Aug 2017 21:09:52 GMT):
@kelly_ 86%
boydjohnson (Mon, 14 Aug 2017 21:10:02 GMT):
No problem.
smagne (Tue, 15 Aug 2017 19:52:32 GMT):
Hello, I write my own transaction processor using the javascript sdk framework and I want to write unit test to test my processor, is that possible? Which could the the best approach?
smagne (Tue, 15 Aug 2017 19:52:32 GMT):
Hello, I write my own transaction processor using the javascript sdk framework and I want to write unit test to test my processor, is that possible? Which could the best approach?
kelly_ (Tue, 15 Aug 2017 20:53:24 GMT):
Have you seen this link :/- http/intelledger.github.io/app_developers_guide/testing.html
kelly_ (Tue, 15 Aug 2017 20:54:22 GMT):
http://intelledger.github.io/app_developers_guide/testing.html
smagne (Tue, 15 Aug 2017 20:57:45 GMT):
Thanks @kelly_ Yes, but that's in python, I tried to replicate the idea with no luck :(
pschwarz (Tue, 15 Aug 2017 21:15:11 GMT):
Right now, that testing suite is only available in python, but it essentially creates a mock validator via the ZMQ protocol
pschwarz (Tue, 15 Aug 2017 21:15:26 GMT):
So it doesn't directly call your code.
pschwarz (Tue, 15 Aug 2017 21:16:03 GMT):
For example, we have tests implemented using that framework for the Intkey family, which are run against all implementations, JS included.
pschwarz (Tue, 15 Aug 2017 21:16:17 GMT):
Write one set of tests -> use against any implementation
pschwarz (Tue, 15 Aug 2017 21:16:38 GMT):
Look around the intkey tests to get a better idea of how that works
Dan (Tue, 15 Aug 2017 22:14:48 GMT):
I'm trying for a very simple layman's high level statement for sawtooth for the HL architecture deck. "Sawtooth is designed to allow companies to securely update and read the same virtual database without paying a central authority."
AntonOyung (Tue, 15 Aug 2017 22:42:04 GMT):
When I GET the data back it returns a JSON object where all the entries are Strings. However the payload is an encoded representation of the string. Is there a way to convert that string back to a Buffer and then convert the buffer back into the readable String?
zac (Wed, 16 Aug 2017 02:11:53 GMT):
JSON is all strings
zac (Wed, 16 Aug 2017 02:12:40 GMT):
It is typical represent binary data as a base64 strings within JSON
zac (Wed, 16 Aug 2017 02:15:17 GMT):
```
Buffer.from('eyJmb28iOiJiYXIifQ==', 'base64')
```
zac (Wed, 16 Aug 2017 02:15:17 GMT):
```
Buffer.from('eyJmb28iOiJiYXIifQ==', 'base64').toString()
```
FlyingTiger (Thu, 17 Aug 2017 06:58:49 GMT):
@zac I got a 'name' state data for intkey family, b"\xa1naccount35913_0\x19'\x10"", account35913_0 is the value, but what do b"\xa1n and \x19'\x10 mean?
Riussi (Thu, 17 Aug 2017 13:01:32 GMT):
Has joined the channel.
agunde (Thu, 17 Aug 2017 13:57:38 GMT):
@FlyingTiger b"\xa1naccount35913_0\x19'\x10" is the cbor encoded data. When decoded it is {'account35913_0': 10000}
zac (Thu, 17 Aug 2017 14:04:43 GMT):
^
zac (Thu, 17 Aug 2017 14:05:26 GMT):
:point_up:
zac (Thu, 17 Aug 2017 15:21:16 GMT):
http://intelledger.github.io/transaction_family_specifications/integerkey_transaction_family.html#state
MikeMayori (Thu, 17 Aug 2017 15:57:36 GMT):
Has joined the channel.
FlyingTiger (Fri, 18 Aug 2017 06:15:33 GMT):
@agunde Thanks!
berserkr (Fri, 18 Aug 2017 16:53:21 GMT):
Has joined the channel.
AkarshaMahadeva (Fri, 18 Aug 2017 17:00:23 GMT):
AntonOyung 9:59 AM
Error: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /state?address=5b7349 (Caused by NewConnectionError('
jachin (Fri, 18 Aug 2017 20:29:39 GMT):
Has joined the channel.
roundthecorner (Mon, 21 Aug 2017 06:03:10 GMT):
Has joined the channel.
randombishop (Mon, 21 Aug 2017 09:45:18 GMT):
Hello hello ! General question today please : I'd like to implement a transaction which will update the current date/time in a blockchain address state. How can the blockchain achieve consensus on such date ? Is there any standard practice regarding blockchain and "current date/time" concept ?
randombishop (Mon, 21 Aug 2017 09:48:40 GMT):
(I thought one way to do it is to have the sender of the transaction specify the current date, then the transaction processor just check if it is in a reasonable range from its own clock.)
pschwarz (Mon, 21 Aug 2017 18:40:23 GMT):
That's a pretty reasonable way of doing it. We have a design forthcoming that covers this kind of use case, in order to support the EVM transaction processor.
pschwarz (Mon, 21 Aug 2017 18:41:08 GMT):
It's handle in a similar way.
pschwarz (Mon, 21 Aug 2017 18:41:08 GMT):
It's handledin a similar way.
pschwarz (Mon, 21 Aug 2017 18:41:08 GMT):
It's handled in a similar way.
kelly_ (Mon, 21 Aug 2017 19:00:50 GMT):
@randombishop we have an example of this in the bond trading sample in the .7 branch
kelly_ (Mon, 21 Aug 2017 19:01:32 GMT):
@amundson was the mastermind behind that
kelly_ (Mon, 21 Aug 2017 19:01:44 GMT):
I believe the transaction was called update clock
randombishop (Mon, 21 Aug 2017 19:20:00 GMT):
Thank you @pschwarz and @kelly_ interesting code indeed.
boydjohnson (Mon, 21 Aug 2017 20:14:08 GMT):
@GhadiShayban I made some updates to the sawtooth java sdk Signing class to fix a package name issue, add some license headers, and return compressed keys from the getPublicKey method. Since you originally contributed that class I would appreciated if you would take a look when ever you have time. https://github.com/hyperledger/sawtooth-core/pull/724
iccaro (Wed, 23 Aug 2017 01:25:41 GMT):
Has joined the channel.
champbronc2 (Wed, 23 Aug 2017 13:01:57 GMT):
Has joined the channel.
ksachdeva (Wed, 23 Aug 2017 17:07:08 GMT):
Has joined the channel.
smagne (Wed, 23 Aug 2017 19:10:17 GMT):
Hello I'm working with the sawtooth's javascript sdk
smagne (Wed, 23 Aug 2017 19:10:28 GMT):
using a custom transaction encoder
smagne (Wed, 23 Aug 2017 19:11:48 GMT):
I'm using the documentation as example and I want to know wht inputs/outputs means here:
```const encoder = new TransactionEncoder(privateKey, {
// We don't want a batcher pubkey or dependencies for our example,
// but this is what setting them might look like:
batcherPubkey: publicKey,
// dependencies: ['540a6803971d1880ec73a96cb97815a95d374cbad5d865925e5aa0432fcf1931539afe10310c122c5eaae15df61236079abbf4f258889359c4d175516934484a'],
familyName: FAMILYNAME,
familyVersion: '1.0',
inputs: ['1cf126'],
outputs: ['1cf126'],
payloadEncoding: 'application/cbor',
payloadEncoder: cbor.encode
})```
smagne (Wed, 23 Aug 2017 19:12:45 GMT):
Also I'm using the protobuf approach, what should be the `payloadEncoder`
boydjohnson (Wed, 23 Aug 2017 19:14:09 GMT):
So the inputs and outputs are addresses or namespaces that the txn can read from (inputs) or write to (outputs).
boydjohnson (Wed, 23 Aug 2017 19:15:31 GMT):
I am unfamiliar with the javascript protobuf library. @pschwarz do you know?
pschwarz (Wed, 23 Aug 2017 19:16:47 GMT):
That should actually be specified per transaction, and be exact for your transactions. It helps with performance by giving hints to the validator on which transaction access particular parts of the state tree.
pschwarz (Wed, 23 Aug 2017 19:18:27 GMT):
If you set it like the above example, that will be the default, which will result in potential parallel between transaction families (at least, those that use different namespaces) but not within a transaction family (i.e. two transactions submitted in the same batch from the same family could not be parallelized)
smagne (Wed, 23 Aug 2017 19:19:08 GMT):
That's the example directly from the documentation
smagne (Wed, 23 Aug 2017 19:19:44 GMT):
my namespace is like this ```const _hash = (x) =>
crypto.createHash('sha512').update(x).digest('hex').toLowerCase();
const EXO_SP_NAMESPACE = _hash(process.env.SAWTOOTH_PAYMENT_PROCESSOR_FAMILY).substring(0, 6);```
pschwarz (Wed, 23 Aug 2017 19:20:22 GMT):
You could put that value in for the defaults.
smagne (Wed, 23 Aug 2017 19:20:30 GMT):
so my input/output should be [EXO_SP_NAMESPACE] right?
smagne (Wed, 23 Aug 2017 19:21:08 GMT):
we will create wallets and execute transactions within that namespace
pschwarz (Wed, 23 Aug 2017 19:21:09 GMT):
yes. Or, more specifically, [EXO_SP_NAMESPACE + state_address], per transaction
pschwarz (Wed, 23 Aug 2017 19:21:32 GMT):
For what every state address the transaction uses
pschwarz (Wed, 23 Aug 2017 19:22:00 GMT):
Inputs are the state address that your transaction will read, outputs the ones that it will write
smagne (Wed, 23 Aug 2017 19:22:45 GMT):
so state_address is the private or public key that I generate with the signer?
pschwarz (Wed, 23 Aug 2017 19:22:51 GMT):
No
smagne (Wed, 23 Aug 2017 19:23:20 GMT):
what's the state_address is then
smagne (Wed, 23 Aug 2017 19:23:20 GMT):
what's the state_address is then?
pschwarz (Wed, 23 Aug 2017 19:23:36 GMT):
Where do you store your state values via your transaction processor?
smagne (Wed, 23 Aug 2017 19:23:53 GMT):
Yes, I had a custom transaction processor
pschwarz (Wed, 23 Aug 2017 19:24:11 GMT):
First off, I'd recommend re-reading this section: https://intelledger.github.io/app_developers_guide/address_and_namespace.html
pschwarz (Wed, 23 Aug 2017 19:24:41 GMT):
Second off, you are generating some addresses for where you set your wallet values in the global state
pschwarz (Wed, 23 Aug 2017 19:24:51 GMT):
That's the address I'm referring to
smagne (Wed, 23 Aug 2017 19:25:54 GMT):
ohhh okay
pschwarz (Wed, 23 Aug 2017 19:26:59 GMT):
Using the JS client, you can set the inputs and outputs using the TransactionEncoder's create function:
```
encoder.create(
pschwarz (Wed, 23 Aug 2017 19:26:59 GMT):
Using the JS client, you can set the inputs and outputs using the TransactionEncoder's create function:
```
let txn = encoder.create(
smagne (Wed, 23 Aug 2017 19:28:51 GMT):
Okay I understand that, but what about this properties ```payloadEncoding: 'application/cbor',
payloadEncoder: cbor.encode```
smagne (Wed, 23 Aug 2017 19:29:43 GMT):
because I'm using this enconding `'csv-utf8'`
smagne (Wed, 23 Aug 2017 19:30:03 GMT):
what should be the payloadEncoder or I don't need one
pschwarz (Wed, 23 Aug 2017 19:30:29 GMT):
It's just a function to take a javascript object and convert it to your encoding
pschwarz (Wed, 23 Aug 2017 19:30:41 GMT):
So, in the above case, it converts the object to cbor.
pschwarz (Wed, 23 Aug 2017 19:30:51 GMT):
In your case, you just convert it to csv
smagne (Wed, 23 Aug 2017 19:31:05 GMT):
ohh okay thanks!
smagne (Wed, 23 Aug 2017 19:31:32 GMT):
Could I ignore it then?
smagne (Wed, 23 Aug 2017 19:32:24 GMT):
Because I'm receiving the data already encoded using csv
dataharvest (Wed, 23 Aug 2017 21:00:26 GMT):
fun question for the group asked to try to demo straight sawtooth.... is there a docker or containerized example of the bond market or any market really... the ones listed on the site for the market errors after creating a WIF
kelly_ (Wed, 23 Aug 2017 21:52:29 GMT):
hey @dataharvest if you are looking for one with a GUI then there are older examples, i've got the marketplace one up and running in the past month or two
kelly_ (Wed, 23 Aug 2017 21:52:49 GMT):
bond should work as well with the .7 branch but I haven't tested
kelly_ (Wed, 23 Aug 2017 21:53:06 GMT):
in the next few months we will have an end to end example for supply chain with gui
dataharvest (Wed, 23 Aug 2017 22:00:18 GMT):
gotcha ok i'll look at the marketplace
dataharvest (Wed, 23 Aug 2017 22:00:21 GMT):
ty
kelly_ (Wed, 23 Aug 2017 22:01:47 GMT):
Are you checking the docs for the .7 instructions?
kelly_ (Wed, 23 Aug 2017 22:01:53 GMT):
and downloading the .7 branch?
kelly_ (Wed, 23 Aug 2017 22:03:39 GMT):
@pschwarz do we a documentation for launching the marketplace GUI? I thought we did but I can't find it
pschwarz (Wed, 23 Aug 2017 22:04:34 GMT):
@smagne You can't ignore it, you need to set to the same values that your transaction processor is declaring it uses. Otherwise, the transaction can't get routed correctly.
pschwarz (Wed, 23 Aug 2017 22:04:56 GMT):
@kelly_ we only had instructions for the bond UI
pschwarz (Wed, 23 Aug 2017 22:05:14 GMT):
Though, there are some README files in the various market place components that should help
kelly_ (Wed, 23 Aug 2017 22:06:05 GMT):
are the bond UI instructions in the docs? if so could you point datahavest there?
kelly_ (Wed, 23 Aug 2017 22:06:25 GMT):
I think ryan had given me some marketplace instructions on slack at one point but they are likely gone now
kelly_ (Wed, 23 Aug 2017 22:08:07 GMT):
# Running the Marketplace Navigator UI
In your vagrant image, you need to be sure that you have the following plugins:
* `sawtooth-core/tools/plugins/install_rethink.sh`
* `sawtooth-core/tools/plugins/install_js_tools.sh`
In the `sawtooth-core/extensions/mktplace/navigator` directory, run:
```
> scripts/bootstrap.sh
> scripts/build.sh
```
These will install both the client- and server-side dependencies, as well as
build the appropriate database tables and final javascript code.
## To start the web server:
In `sawtooth-core/extensions/mktplace/navigator/server`, run:
```
> npm start
```
If you need to change any options, see
`sawtooth-core/extensions/mktplace/navigator/server/README.md` for the possible
environment variables.
## To start the ledger sync process
Ensure that `sawtooth-core/extensions/mktplace/navigator/ledger_sync` is in
your `PYTHONPATH`. In
`sawtooth-core/extensions/mktplace/navigator/ledger_sync`, run:
```
> scripts/syncledger --logfile __screen__
```
pschwarz (Wed, 23 Aug 2017 22:08:19 GMT):
There you go
pschwarz (Wed, 23 Aug 2017 22:08:46 GMT):
There are UI usage instructions, in the 0.7 doc, but not how to run it
pschwarz (Wed, 23 Aug 2017 22:10:46 GMT):
I would warn that those UI's are instructive, but 0.8 has diverged a lot, so much of the actual transaction submission and the ledger sync (i.e. copying deltas to an off-chain DB) will be completely different than 0.8
pschwarz (Wed, 23 Aug 2017 22:10:46 GMT):
I would warn that while those UI's are instructive, but 0.8 has diverged a lot, so much of the actual transaction submission and the ledger sync (i.e. copying deltas to an off-chain DB) will be completely different than 0.8
pschwarz (Wed, 23 Aug 2017 22:11:34 GMT):
They're also based on React, which is not Apache-license compatible, so we'll be using something else for the forthcoming UI
dataharvest (Wed, 23 Aug 2017 22:18:53 GMT):
got it
dataharvest (Wed, 23 Aug 2017 22:19:46 GMT):
yeah this is just to help a couple in the group get past some mental blockers
dataharvest (Wed, 23 Aug 2017 22:20:41 GMT):
i think/hope this will help thank you for the docs i'll try it out in the next hour
IntelStacey (Wed, 23 Aug 2017 22:56:13 GMT):
Has joined the channel.
smagne (Thu, 24 Aug 2017 01:07:57 GMT):
Hello guys it's me again
smagne (Thu, 24 Aug 2017 01:13:33 GMT):
Now, I'm trying to register my custom transaction family so I run the following command:
```$ sawtooth config proposal create \
--url http://rest-api:8080 \
--key /root/.sawtooth/keys/my_key.priv \
sawtooth.validator.transaction_families='[{"family": "intkey", "version": "1.0", "encoding": "application/cbor"}, {"family":"sawtooth_settings", "version":"1.0", "encoding":"application/protobuf"}]'
$ sawtooth config settings list --url http://rest-api:8080```
smagne (Thu, 24 Aug 2017 01:14:34 GMT):
but the `$ sawtooth config settings list --url http://rest-api:8080` is returning service unavailable
smagne (Thu, 24 Aug 2017 01:15:49 GMT):
(instead of using intkey family I'm using my custom family
smagne (Thu, 24 Aug 2017 01:15:49 GMT):
(instead of using intkey family I'm using my custom family)
pschwarz (Thu, 24 Aug 2017 14:09:51 GMT):
@smagne remind me, are you running that from within vagrant?
pschwarz (Thu, 24 Aug 2017 14:10:58 GMT):
Or the docker containers
smagne (Thu, 24 Aug 2017 14:14:41 GMT):
Hi @pschwarz know it's half working
smagne (Thu, 24 Aug 2017 14:17:55 GMT):
I'm using docker and now when I run `sawtooth config settings list --url http://rest-api:8080` I got my family settings but when posting a batch using my settings in the validator I'm getting this error ```[12:08:08.815 DEBUG executor] no transaction processors registered for processor type exosp: 1.0: csv-utf8
[12:08:08.817 INFO executor] Waiting for transaction processor (exosp, 1.0, csv-utf8)```
smagne (Thu, 24 Aug 2017 14:18:11 GMT):
And my custom transaction processor is running
smagne (Thu, 24 Aug 2017 14:18:23 GMT):
```const address = 'tcp://0.0.0.0:8080';
const transactionProcessor = new TransactionProcessor(address);
transactionProcessor.addHandler(new EXOSPHandler());
transactionProcessor.start();```
pschwarz (Thu, 24 Aug 2017 14:43:00 GMT):
Needs to be port 4004
pschwarz (Thu, 24 Aug 2017 14:43:32 GMT):
8080 is the REST API's port. The validator's component port is 4004
pschwarz (Thu, 24 Aug 2017 14:44:42 GMT):
Also, I think you need to specify the actual host - `tcp://localhost:4004`, if you're running it on your host machine, `tcp://validator:4004` if you're running it within docker
smagne (Thu, 24 Aug 2017 14:45:20 GMT):
thanks I will try and let you know @pschwarz great support guys!
MikeMayori (Thu, 24 Aug 2017 15:01:29 GMT):
Hi, anyone have a complete example in javascript with any use case implemented???
zac (Thu, 24 Aug 2017 15:16:28 GMT):
https://github.com/delventhalz/transfer-chain-jsI just made this:
zac (Thu, 24 Aug 2017 15:16:28 GMT):
I just made this: https://github.com/delventhalz/transfer-chain-js
MikeMayori (Thu, 24 Aug 2017 15:16:48 GMT):
did that
MikeMayori (Thu, 24 Aug 2017 15:17:05 GMT):
runs good with a few twicks
MikeMayori (Thu, 24 Aug 2017 15:17:58 GMT):
perhaps , something like how can i run the supply chain transaction family example ??
MikeMayori (Thu, 24 Aug 2017 15:18:33 GMT):
or perhaps you @zac know how to handle users???
zac (Thu, 24 Aug 2017 15:18:57 GMT):
Supply Chain is still under development, I'm not sure how much documentation there is, or what state it is in
zac (Thu, 24 Aug 2017 15:19:45 GMT):
Really robust user handling hasn't been done yet in 0.8
zac (Thu, 24 Aug 2017 15:19:58 GMT):
0.7 has the Bond and Marketplace examples
zac (Thu, 24 Aug 2017 15:20:17 GMT):
What specifically did you want to do?
MikeMayori (Thu, 24 Aug 2017 15:20:57 GMT):
for example : a way to validate in consensus if one participant can be part or not of the network
MikeMayori (Thu, 24 Aug 2017 15:21:13 GMT):
I know it can be implemented in a transaction processor
MikeMayori (Thu, 24 Aug 2017 15:21:26 GMT):
as a business logic
MikeMayori (Thu, 24 Aug 2017 15:21:48 GMT):
but somehow using POET capabilties
zac (Thu, 24 Aug 2017 15:22:00 GMT):
The Settings Transaction Family will probably interest you: http://intelledger.github.io/transaction_family_specifications/settings_transaction_family.html
zac (Thu, 24 Aug 2017 15:22:44 GMT):
There are also some plans which will be implemented on top of Settings in the near to mid-term to create a couple of systems for on-chain permissioning
zac (Thu, 24 Aug 2017 15:22:44 GMT):
There are also some plans which will be implemented in the near to mid-term to create a couple of systems on top of Settings for on-chain permissioning
MikeMayori (Thu, 24 Aug 2017 15:24:02 GMT):
that will be great
MikeMayori (Thu, 24 Aug 2017 15:24:30 GMT):
I've been reading the docs , but i can not find a road map
zac (Thu, 24 Aug 2017 15:24:41 GMT):
That's a fair critique
zac (Thu, 24 Aug 2017 15:24:55 GMT):
We could probably do more to get that out there
zac (Thu, 24 Aug 2017 15:25:26 GMT):
Best thing to reference for our Roadmap is our JIRA
zac (Thu, 24 Aug 2017 15:25:37 GMT):
But that's not always super clear
zac (Thu, 24 Aug 2017 15:25:55 GMT):
What's the use case you have in mind?
MikeMayori (Thu, 24 Aug 2017 15:27:14 GMT):
Well to tell you the truth I want to learn this good , so i can implement any solution on any arquitecture
zac (Thu, 24 Aug 2017 15:27:51 GMT):
In thinking about permissioning, I think you get a lot of it for free
MikeMayori (Thu, 24 Aug 2017 15:28:12 GMT):
Get to my attention when Microsoft uses this in combinatio with COCO
zac (Thu, 24 Aug 2017 15:28:19 GMT):
My biggest concern is about bad users spamming the network
zac (Thu, 24 Aug 2017 15:28:30 GMT):
which some of the new permissioning stuff should handle
zac (Thu, 24 Aug 2017 15:28:46 GMT):
you can also implement something now through more traditional means
zac (Thu, 24 Aug 2017 15:28:59 GMT):
put the REST API behind a proxy that runs some sort of authorization
MikeMayori (Thu, 24 Aug 2017 15:29:23 GMT):
like express-gateway.io
zac (Thu, 24 Aug 2017 15:29:40 GMT):
in terms of just "make sure people can't modify state in a way they shouldn't", that's mostly baked in
MikeMayori (Thu, 24 Aug 2017 15:29:50 GMT):
ok
MikeMayori (Thu, 24 Aug 2017 15:30:29 GMT):
something i was trying to do is find out how to get the list of modifications for a transaction
MikeMayori (Thu, 24 Aug 2017 15:30:37 GMT):
like the provenance
MikeMayori (Thu, 24 Aug 2017 15:30:55 GMT):
of perhaps use another database
MikeMayori (Thu, 24 Aug 2017 15:31:00 GMT):
like couchdb
MikeMayori (Thu, 24 Aug 2017 15:31:10 GMT):
for querying info
MikeMayori (Thu, 24 Aug 2017 15:32:12 GMT):
If you can guide me through this i will be really happy
zac (Thu, 24 Aug 2017 15:32:34 GMT):
You will be happy then
MikeMayori (Thu, 24 Aug 2017 15:32:56 GMT):
at leat for know
MikeMayori (Thu, 24 Aug 2017 15:33:12 GMT):
i can compare this with hyperledger fabric
zac (Thu, 24 Aug 2017 15:33:13 GMT):
http://intelledger.github.io/rest_api/state_delta_websockets.html
zac (Thu, 24 Aug 2017 15:33:53 GMT):
I'm just unpacking this now myself, I haven't worked on it personally, but that is exactly the idea
zac (Thu, 24 Aug 2017 15:34:09 GMT):
Subscribe to state changes, update external DB, support more complex queries of state
MikeMayori (Thu, 24 Aug 2017 15:35:54 GMT):
just to know , what kind of database you use for the ledger
MikeMayori (Thu, 24 Aug 2017 15:36:09 GMT):
some uses PFS other level , couchdb
zac (Thu, 24 Aug 2017 15:38:26 GMT):
In the validator itself? It uses LMDB.
MikeMayori (Thu, 24 Aug 2017 15:39:13 GMT):
ok
MikeMayori (Thu, 24 Aug 2017 15:39:31 GMT):
See my idea to provide an layer to make some queries
MikeMayori (Thu, 24 Aug 2017 15:39:38 GMT):
something like graphql
jsmitchell (Thu, 24 Aug 2017 15:40:08 GMT):
you would probably want to build that atop a state delta export target
MikeMayori (Thu, 24 Aug 2017 15:40:57 GMT):
can you explain further this pleasee..
MikeMayori (Thu, 24 Aug 2017 15:40:57 GMT):
can you explain further this please...
smagne (Thu, 24 Aug 2017 15:41:55 GMT):
Hey guys sorry to interrupt I need your help
smagne (Thu, 24 Aug 2017 15:42:20 GMT):
I'm trying to register a custom transaction processor but it isn't working
jsmitchell (Thu, 24 Aug 2017 15:42:32 GMT):
@MikeMayori sawtooth uses an addressable merkle tree for global ledger state
jsmitchell (Thu, 24 Aug 2017 15:42:47 GMT):
the values at the addresses are transaction family specific opaque byte arrays
MikeMayori (Thu, 24 Aug 2017 15:43:10 GMT):
got it
smagne (Thu, 24 Aug 2017 15:43:31 GMT):
I'm running the validator in a docker instance and this is the code I use in my TP ```const address = 'tcp://validator:4004';
const transactionProcessor = new TransactionProcessor(address);
transactionProcessor.addHandler(new EXOSPHandler());
transactionProcessor.start();```
jsmitchell (Thu, 24 Aug 2017 15:43:32 GMT):
that has nice properties for abstraction of transaction families and calculation of merkle proofs
jsmitchell (Thu, 24 Aug 2017 15:43:37 GMT):
but it has poor query properties
jsmitchell (Thu, 24 Aug 2017 15:43:59 GMT):
you can build indices within your transaction family and store them within predictable addresses
jsmitchell (Thu, 24 Aug 2017 15:44:04 GMT):
but then you have to maintain those indices
smagne (Thu, 24 Aug 2017 15:44:04 GMT):
this is the Handler definition ```class EXOSPHandler extends TransactionHandler {
constructor() {
super(process.env.SAWTOOTH_PAYMENT_PROCESSOR_FAMILY, '1.0', 'csv-utf8', [EXO_SP_NAMESPACE]);
}
apply(transactionProcessRequest, state) {
```
jsmitchell (Thu, 24 Aug 2017 15:44:07 GMT):
and that comes at a cost
jsmitchell (Thu, 24 Aug 2017 15:44:43 GMT):
we support a state delta export mechanism which can apply domain specific translations into a more queryable database structure
jsmitchell (Thu, 24 Aug 2017 15:45:12 GMT):
for example, you could normalize state changes to atomic row inserts in a sql database
jsmitchell (Thu, 24 Aug 2017 15:45:22 GMT):
and have indices that are managed by the rdbms
smagne (Thu, 24 Aug 2017 15:45:26 GMT):
when checking the sawtooth config in the validator using shell command I get this ```root@a9ce2ee9b3a8:/# sawtooth config settings list --url http://rest-api:8080
sawtooth.settings.vote.authorized_keys: 02ca7eeeae773b83c0a245e8a6719ca5722b38214560349fb021351bcba5917c4c
sawtooth.validator.transaction_families: [{"family": "exosp", "version": "1.0", "encoding": "csv-utf8"}, {"family":"saw...```
smagne (Thu, 24 Aug 2017 15:46:09 GMT):
but in the docker logs I'm getting this ```[12:08:08.815 DEBUG executor] no transaction processors registered for processor type exosp: 1.0: csv-utf8
[12:08:08.817 INFO executor] Waiting for transaction processor (exosp, 1.0, csv-utf8)```
MikeMayori (Thu, 24 Aug 2017 15:46:45 GMT):
that sounds fair
MikeMayori (Thu, 24 Aug 2017 15:46:45 GMT):
that sounds fair @jsmitchell
MikeMayori (Thu, 24 Aug 2017 15:46:45 GMT):
that sounds good @jsmitchell
smagne (Thu, 24 Aug 2017 15:47:16 GMT):
and when I post a batch using the js sdk this is the response ```{
data: [
{
id: "54e4d206456fa3009ade5e0247c6f7d9637eaf1979ad7cdfc6b9c0ddccdda8417c09957",
invalid_transactions: [ ],
status: "UNKNOWN"
}
],
link: "http://localhost:8080/batch_status?id=54e4d206456fa3009ade5e0247c6f7d9637eaf1979ad7cdfc6b9c0ddccdda8417c09957"
}```
jsmitchell (Thu, 24 Aug 2017 15:47:22 GMT):
@smagne when you started your transaction processor, you should have seen a line in the validator logs showing it being registered
jsmitchell (Thu, 24 Aug 2017 15:47:32 GMT):
can you paste that line here?
agunde (Thu, 24 Aug 2017 15:47:39 GMT):
@smagne So to be clear the setting just tells the validator that it will need a transaction processor for that family. It does not mean that your transaction processor is actually registered with the validator
smagne (Thu, 24 Aug 2017 15:48:07 GMT):
thanks @jsmitchell @agunde
smagne (Thu, 24 Aug 2017 15:48:19 GMT):
I'm not getting the registered line
smagne (Thu, 24 Aug 2017 15:48:40 GMT):
that's my problem it seems that is not registering my handler
smagne (Thu, 24 Aug 2017 15:50:20 GMT):
any ideas? I'm not getting any error from anywhere hahaha so I'm a little bit lost now
MikeMayori (Thu, 24 Aug 2017 15:51:28 GMT):
@jsmitchell thanks
MikeMayori (Thu, 24 Aug 2017 15:51:28 GMT):
@jsmitchell that takes me to another level
MikeMayori (Thu, 24 Aug 2017 15:51:28 GMT):
@jsmitchell I saw this Implementation where Microsoft Mentions sawtooth lake COCOS a few weeks ago , how would you define that implementation ? or how sawtooth lake plays here..?
smagne (Thu, 24 Aug 2017 15:51:36 GMT):
let me know if you need more information
agunde (Thu, 24 Aug 2017 15:53:21 GMT):
@smagne What is the output when you start your transaction processor?
smagne (Thu, 24 Aug 2017 15:53:57 GMT):
I'm not getting any
smagne (Thu, 24 Aug 2017 15:54:23 GMT):
do you mean in node console or in the validator docker logs?
agunde (Thu, 24 Aug 2017 15:55:05 GMT):
node console
smagne (Thu, 24 Aug 2017 15:56:01 GMT):
Nothing, I should get a registration message right?
MikeMayori (Thu, 24 Aug 2017 15:59:31 GMT):
@magne : you should get something like
MikeMayori (Thu, 24 Aug 2017 15:59:32 GMT):
Initializing JSON handler for Transaction-Chain
Connected to tcp://104.131.1.15:4004
Registration of [asset-chain 0.0 application/json] succeeded
smagne (Thu, 24 Aug 2017 16:00:19 GMT):
I'm not getting that
smagne (Thu, 24 Aug 2017 16:00:19 GMT):
I'm not getting that thanks @MikeMayori
smagne (Thu, 24 Aug 2017 16:01:54 GMT):
but I'm getting `Unregistering transaction processor` when stopping node
smagne (Thu, 24 Aug 2017 16:02:10 GMT):
I'm on windows I will try running console as admin
MikeMayori (Thu, 24 Aug 2017 16:03:51 GMT):
@smagner in your validator when register your processor a message like this :
MikeMayori (Thu, 24 Aug 2017 16:03:52 GMT):
processor_handlers] registered transaction processor: connection_id=2b779a0f9ea87e7d48253a28b96705680f1952ac5e3909c199f4a8accf90ce63923bda52cf78b5f61c1aa8e37da9ff2c2ce336e16a6285150db7c8be97a8bb54, family=asset-chain, version=0.0, encoding=application/json, namespaces=['f5f891']
smagne (Thu, 24 Aug 2017 16:05:00 GMT):
That's the problem, there is a connection issue or something like that between my validator and my transaction processor
MikeMayori (Thu, 24 Aug 2017 16:05:09 GMT):
@smagne are using docker
MikeMayori (Thu, 24 Aug 2017 16:05:09 GMT):
@smagne are using docker ?
smagne (Thu, 24 Aug 2017 16:05:13 GMT):
yes
MikeMayori (Thu, 24 Aug 2017 16:05:16 GMT):
ok
MikeMayori (Thu, 24 Aug 2017 16:05:43 GMT):
@smagne any way you can give access
MikeMayori (Thu, 24 Aug 2017 16:05:43 GMT):
@smagne any way you can give me access
MikeMayori (Thu, 24 Aug 2017 16:05:43 GMT):
@cianx thanks
MikeMayori (Thu, 24 Aug 2017 16:05:43 GMT):
@cianx thanks
MikeMayori (Thu, 24 Aug 2017 16:05:43 GMT):
@cianx thanks
MikeMayori (Thu, 24 Aug 2017 16:05:43 GMT):
@cianx thanks
smagne (Thu, 24 Aug 2017 16:06:00 GMT):
on windows which is a strange monster hahaha
smagne (Thu, 24 Aug 2017 16:16:29 GMT):
after debugging looks like the sockets cannot connect to the validator
smagne (Thu, 24 Aug 2017 16:20:11 GMT):
@zac @agunde @jsmitchell any ideas?
jsmitchell (Thu, 24 Aug 2017 16:20:51 GMT):
windows firewall?
jsmitchell (Thu, 24 Aug 2017 16:21:15 GMT):
something else already bound to the port?
jsmitchell (Thu, 24 Aug 2017 16:21:35 GMT):
docker does _not_ report if it can't map a host port
jsmitchell (Thu, 24 Aug 2017 16:21:38 GMT):
which is evil, imo
pschwarz (Thu, 24 Aug 2017 16:21:56 GMT):
@smagne your validator is in docker, but you are running your transaction processor on your host, or another docker container?
pschwarz (Thu, 24 Aug 2017 16:21:56 GMT):
@smagne your validator is in docker, but are you running your transaction processor on your host, or another docker container?
smagne (Thu, 24 Aug 2017 16:22:15 GMT):
my TP is in my host
smagne (Thu, 24 Aug 2017 16:22:15 GMT):
my TP is in my host @pschwarz
pschwarz (Thu, 24 Aug 2017 16:22:30 GMT):
then the address should be `tcp://localhost:4004`
pschwarz (Thu, 24 Aug 2017 16:22:45 GMT):
I don't think I was clear on that previously
smagne (Thu, 24 Aug 2017 16:23:02 GMT):
Mm okay let me try one more time hehe
zac (Thu, 24 Aug 2017 16:26:26 GMT):
can you `curl localhost:8080/blocks`?
jsmitchell (Thu, 24 Aug 2017 16:26:48 GMT):
@MikeMayori I'm not super up to speed on the Microsoft COCO design. I've read the architecture paper. @cianx is more tuned in to this.
zac (Thu, 24 Aug 2017 16:27:01 GMT):
Is there a similar way to confirm that `tcp://localhost:4004` is working?
smagne (Thu, 24 Aug 2017 16:33:33 GMT):
guys thanks for your help, after changing to tcp://localhost:4004 is working, I'm having some encrypting issues now
cianx (Thu, 24 Aug 2017 16:42:26 GMT):
@MikeMayori CoCo as described in the Whitepaper is a transaction processing platform, the hosted blockchains become transaction processors for the CoCo platform. As CoCo provides Ledger privacy, consensus, and governance a natural fit for CoCo is to provide an interface for Sawtooth Transaction Processors.
MikeMayori (Thu, 24 Aug 2017 18:06:12 GMT):
Thanks
jsmitchell (Thu, 24 Aug 2017 18:45:54 GMT):
@MikeMayori inputs and outputs are described here http://intelledger.github.io/architecture/transactions_and_batches.html#batch-data-structure
MikeMayori (Thu, 24 Aug 2017 18:49:54 GMT):
I got this in your docs
MikeMayori (Thu, 24 Aug 2017 18:49:56 GMT):
Transaction Header
Inputs and Outputs
The inputs for IntegerKey family transactions must include:
Address of the Name being changed or added
The outputs for IntegerKey family transactions must include:
Address of the Name being changed or added
MikeMayori (Thu, 24 Aug 2017 18:50:02 GMT):
not much explanation
MikeMayori (Thu, 24 Aug 2017 18:50:20 GMT):
what is that for ??
jsmitchell (Thu, 24 Aug 2017 18:50:24 GMT):
http://intelledger.github.io/architecture/transactions_and_batches.html#dependencies-and-input-output-addresses
MikeMayori (Thu, 24 Aug 2017 18:51:59 GMT):
got it now~ thanks
kspinka (Fri, 25 Aug 2017 08:00:27 GMT):
Has joined the channel.
theayoad (Fri, 25 Aug 2017 22:02:31 GMT):
Has joined the channel.
aadedeji (Fri, 25 Aug 2017 22:20:33 GMT):
Has joined the channel.
aadedeji (Fri, 25 Aug 2017 22:28:54 GMT):
Hi, first time posting here and I have a question about viewing past states of a given address. Using the rest endpoint /state/address, I am only able to get the state pertaining to the most recent state entry at that address. Is there a straightforward way of viewing past states of a given address?
zac (Fri, 25 Aug 2017 22:34:46 GMT):
`GET /state/{address}?head={block id}`
aadedeji (Fri, 25 Aug 2017 22:55:58 GMT):
Thanks, the above rest endpoint worked. I have access to encoded data of past states of the address. I have one more question. How do I then go about decoding the data string / making it readable so the encoded data can be used?
aadedeji (Fri, 25 Aug 2017 23:19:07 GMT):
Disregard my last question, I figured it out. Thanks again for your help
smagne (Mon, 28 Aug 2017 11:30:56 GMT):
Hello, I have a custom docker-compose file and I want to register my custom family when the validator starts, so I changed the `entrypoint` but it's not working, this is how my entrypoint ``` entrypoint: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 && \
sawtooth config proposal create \
--url http://rest-api:8080 \
--key /root/.sawtooth/keys/my_key.priv \
sawtooth.validator.transaction_families='[{\"family\": \"exosp\", \"version\": \"1.0\", \"encoding\": \"csv-utf8\"}, {\"family\":\"sawtooth_settings\", \"version\":\"1.0\", \"encoding\":\"application/protobuf\"}]' \
\""
```
smagne (Mon, 28 Aug 2017 14:24:06 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=9sKisrSuLCFJjJ8FB) somebody saw my question?
marcojardim (Mon, 28 Aug 2017 14:49:37 GMT):
Has joined the channel.
pschwarz (Mon, 28 Aug 2017 14:55:29 GMT):
Could you post some more information on what's failing? With out any logs, it's rather hard to see what's going wrong...
smagne (Mon, 28 Aug 2017 14:59:54 GMT):
The family is not registered, I must open validator container batch and run the ```sawtooth config proposal create \
--url http://rest-api:8080 \
--key /root/.sawtooth/keys/my_key.priv \
sawtooth.validator.transaction_families='[{\"family\": \"exosp\", \"version\": \"1.0\", \"encoding\": \"csv-utf8\"}, {\"family\":\"sawtooth_settings\", \"version\":\"1.0\", \"encoding\":\"application/protobuf\"}]' \
\""```
smagne (Mon, 28 Aug 2017 14:59:54 GMT):
The family is not registered, I must open validator container batch and run the register manyally ```sawtooth config proposal create \
--url http://rest-api:8080 \
--key /root/.sawtooth/keys/my_key.priv \
sawtooth.validator.transaction_families='[{\"family\": \"exosp\", \"version\": \"1.0\", \"encoding\": \"csv-utf8\"}, {\"family\":\"sawtooth_settings\", \"version\":\"1.0\", \"encoding\":\"application/protobuf\"}]' \
\""```
smagne (Mon, 28 Aug 2017 14:59:54 GMT):
The family is not registered, I must open validator container batch and run the register manually ```sawtooth config proposal create \
--url http://rest-api:8080 \
--key /root/.sawtooth/keys/my_key.priv \
sawtooth.validator.transaction_families='[{\"family\": \"exosp\", \"version\": \"1.0\", \"encoding\": \"csv-utf8\"}, {\"family\":\"sawtooth_settings\", \"version\":\"1.0\", \"encoding\":\"application/protobuf\"}]' \
\""```
pschwarz (Mon, 28 Aug 2017 15:13:03 GMT):
That setting doesn't start up the transaction processor, but it restricts what transaction processors are allowed (and required) for your network
pschwarz (Mon, 28 Aug 2017 15:13:42 GMT):
You still need to start it yourself (or add it to your compose file)
smagne (Mon, 28 Aug 2017 15:35:06 GMT):
There is no way to register the family automatically?
pschwarz (Mon, 28 Aug 2017 15:44:48 GMT):
No
zac (Mon, 28 Aug 2017 16:01:53 GMT):
Is registration necessary to run your own TP? I haven't had to do it yet.
smagne (Mon, 28 Aug 2017 16:17:40 GMT):
In the documentation said that I need to register my family which is the TP and this is achieve running the following command ```sawtooth config proposal create \
--url http://rest-api:8080 \
--key /root/.sawtooth/keys/my_key.priv \
sawtooth.validator.transaction_families='[{\"family\": \"exosp\", \"version\": \"1.0\", \"encoding\": \"csv-utf8\"}, {\"family\":\"sawtooth_settings\", \"version\":\"1.0\", \"encoding\":\"application/protobuf\"}]' \
\""```
smagne (Mon, 28 Aug 2017 16:18:04 GMT):
So I want to add it to my container but it seems that is not happening
pschwarz (Mon, 28 Aug 2017 17:27:08 GMT):
I think the problem you are having has to do with ordering in the compose file. `sawtooth config proposal create` is running against the REST API, which is started in a separate container via your compose file. What you should do with that setting (and the documentation should probably be updated to reflect this) is add that setting to the `sawtooth config genesis` command. That command can take a list of key-value pairs of settings to be included in the genesis block.
smagne (Mon, 28 Aug 2017 18:07:12 GMT):
Thanks @pschwarz do you have an example on how to do this? or how do I changed the genes file?
pschwarz (Mon, 28 Aug 2017 18:08:51 GMT):
Delete your line with `config proposal create`, and take the `sawtooth.validator.transaction_families=...` and add it to the end of the config genesis command
smagne (Mon, 28 Aug 2017 18:09:56 GMT):
thanks @pschwarz I will try that
zac (Mon, 28 Aug 2017 18:12:19 GMT):
@smagne Does it say somewhere in the documentation that you should add your family to the `transaction_families` setting?
zac (Mon, 28 Aug 2017 18:12:37 GMT):
I believe you can just _not_ set that setting, and it will accept all families.
zac (Mon, 28 Aug 2017 18:13:10 GMT):
Unless you are deploying this and need to limit the families used, I don't think there is any reason to do this.
smagne (Mon, 28 Aug 2017 18:13:42 GMT):
Hi @zac, after reading this post I think I must setup the family
smagne (Mon, 28 Aug 2017 18:13:43 GMT):
http://intelledger.github.io/app_developers_guide/docker.html#settings-transaction-family-usage
zac (Mon, 28 Aug 2017 18:14:51 GMT):
> _"One of the on-chain settings is the list of supported transaction families."_
zac (Mon, 28 Aug 2017 18:15:34 GMT):
I can see how that might give you the wrong impression. However, I believe if there is no list of supported families, they are _all_ supported.
zac (Mon, 28 Aug 2017 18:16:07 GMT):
Someone correct me if I'm wrong, but I've never messed with that setting while testing out my transaction processors.
pschwarz (Mon, 28 Aug 2017 18:16:31 GMT):
This is accurate
zac (Mon, 28 Aug 2017 18:16:44 GMT):
Yeah, I just wouldn't bother with it.
zac (Mon, 28 Aug 2017 18:16:59 GMT):
And the documentation should probably be clear that the setting is optional.
smagne (Mon, 28 Aug 2017 18:17:50 GMT):
That would be great, I never test it without registering the family
smagne (Mon, 28 Aug 2017 18:17:50 GMT):
That would be great, I never test it without registering the family, so I didn't know hehehe
smagne (Mon, 28 Aug 2017 18:18:17 GMT):
I've just assume that the family must be register
zac (Mon, 28 Aug 2017 18:19:03 GMT):
I imagine many production-level deployments will, but it's not something to worry about when you are just testing out your TP with Docker.
smagne (Mon, 28 Aug 2017 18:19:40 GMT):
great thanks both @zac and @pschwarz
MikeMayori (Mon, 28 Aug 2017 19:44:00 GMT):
any one can guide how to list a specific asset list from the ledger?? What will be the correct way to show let say I have a Poll Asset , and I did come transactions over it, now need to show that to my UI with the transactions and changes??
smagne (Mon, 28 Aug 2017 21:48:11 GMT):
Hi, after stopping the docker compose and trying to start it again I'm getting this error `[21:42:58.447 ERROR cli] Cannot have a genesis_batch_file and an existing chain`
smagne (Mon, 28 Aug 2017 21:48:50 GMT):
this is my docker-compose file in the entrypoint section ``` entrypoint: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
\""
```
pschwarz (Mon, 28 Aug 2017 21:56:15 GMT):
Did you stop it via ctrl-c, followed by `docker-compose -f
smagne (Mon, 28 Aug 2017 22:08:32 GMT):
Yes, there is a way to start the validator with the current genesis and settings?
smagne (Mon, 28 Aug 2017 22:27:43 GMT):
any ideas @pschwarz ?
pschwarz (Mon, 28 Aug 2017 22:39:19 GMT):
The compose file should be recreating a new block store with every combination of `up`/`down`
pschwarz (Mon, 28 Aug 2017 22:39:19 GMT):
The compose file should be recreating a new block store with every combination of `up` / `down`
smagne (Mon, 28 Aug 2017 22:42:41 GMT):
basically, I'm fu$# hahaha
randombishop (Mon, 28 Aug 2017 23:21:51 GMT):
Hi, philosophical question today please : I understood that transactions must explicitly specify the input addresses that will be read and the output adresses to be written ; but why is that ?
randombishop (Mon, 28 Aug 2017 23:24:03 GMT):
What if a transaction needs to read a settings address or other helper addresses to be processed ? Why should the sender specify them ? Why not just let the transaction processor read and write data as long as it's a legal transaction ?
dkhungme (Mon, 28 Aug 2017 23:44:03 GMT):
Has joined the channel.
dkhungme (Mon, 28 Aug 2017 23:47:50 GMT):
Dear all, I am trying to learn how fork is resolved in Sawtooth. In other to do that, I start 2 validators at the same block height, and submit transaction to them using intkey workload. What I observe is one of them will win, and the block proposed by the other is rejected. The winning validator would keep on processing new transactions, but the validator with rejected block seems to stuck, and not even catching up with the blockchain anymore. I don't really understand why the other validator become obsolete and completely stuck. Could anyone please advise
As per setup, I run sawtooth on vagrant.
I first started two rest api sawtooth-rest-api -v && sawtooth-rest-api -B 127.0.0.1:8090 -C 127.0.0.2:4004 -v
- Then start 2 validators connecting to the two rest-api set up above: sawtooth-validator -v && sawtooth-validator -B network:127.0.0.2:8800 -B component:127.0.0.2:4004 -v
- Each validator is then connect to one transaction processor: intkey-tp-python -v && intkey-tp-python tcp://127.0.0.2:4004 -v
cianx (Tue, 29 Aug 2017 02:45:32 GMT):
@dkhungme In fork resolution one validator will always win the resolution. The determination of the winning block is dependent on the consensus algorithm. Which consensus are you using? What signs are you observing that shows the 2nd validator is stuck?
nam0208 (Tue, 29 Aug 2017 03:24:12 GMT):
Has joined the channel.
dkhungme (Tue, 29 Aug 2017 11:43:40 GMT):
I use the poet_simulator concensus (the one written in python, not sgx implementation). The 2nd validator is stuck in a sense that it does not process any other transactions or blocks, evidenced by absolutely no message printed out in the log after its proposed block gets rejected. @cianx
cianx (Tue, 29 Aug 2017 15:55:58 GMT):
@dkhungme can you send me the logs for both validators?
AkarshaMahadeva (Tue, 29 Aug 2017 17:09:50 GMT):
How is sawtooth different from Iroha and fabric. How does sawtooth ensure more security than other implementations
hsaputra (Tue, 29 Aug 2017 17:48:07 GMT):
Has joined the channel.
aadedeji (Wed, 30 Aug 2017 00:34:42 GMT):
Hi, I have question about deleting addresses from the validator's merkle state using the python sdk. I have put code within a TP ( state_store.delete([address]) ) that should delete addresses from the validator's merkle state. When I look up the state of an address after deleting it (the validator acknowledges the delete request without throwing an error), the state is not empty as expected. Is there anything I need to do besides state_store.delete([address]) to delete an address from the merkle state?
smagne (Wed, 30 Aug 2017 12:31:15 GMT):
Hello, is there any way to retrieve multiple addresses in a transaction processor?
smagne (Wed, 30 Aug 2017 12:31:31 GMT):
```let address = [EXO_SP_NAMESPACE + _hash(publicKey).slice(0,64)];
if(payload.toAddress !== null && payload.toAddress !== undefined){
address.push(EXO_SP_NAMESPACE + _hash(payload.toAddress).slice(0,64))
}
// Get the current state, for the key's address:
const getPromise = state.get(address);```
dkhungme (Wed, 30 Aug 2017 12:33:23 GMT):
@cianx I had direct messaged you the logs
smagne (Wed, 30 Aug 2017 14:00:56 GMT):
Hello, I'm getting the error `Tried to get unauthorized address` when doing `state.get(address)`
agunde (Wed, 30 Aug 2017 14:09:55 GMT):
@smagne is the address you are trying to get in the inputs of the transaction?
smagne (Wed, 30 Aug 2017 14:30:36 GMT):
Yes
smagne (Wed, 30 Aug 2017 14:33:08 GMT):
It could be related with the signed key?
pschwarz (Wed, 30 Aug 2017 14:36:27 GMT):
Probably not. You should print out the address you're computing in the handler and verify that it's the same one in the transaction
smagne (Wed, 30 Aug 2017 14:37:10 GMT):
in the inputs/outputs?
pschwarz (Wed, 30 Aug 2017 14:37:51 GMT):
Print out the address you're computing _in your TP_, and verify that it's the one in your transaction's _inputs_
smagne (Wed, 30 Aug 2017 14:38:01 GMT):
okay
smagne (Wed, 30 Aug 2017 14:57:35 GMT):
Hi @pschwarz this are the inputs/outputs and the address that I want to get ```inputs: [ '29f27ac66748994652b59127226f828a7941a0e90171710c13893a96c3a3d1d0c2d4bd',
'29f27a63017570dce02d3632bd3668de710f89712ade2517c954e3ad4384da1c7eef4d' ]
outputs: [ '29f27ac66748994652b59127226f828a7941a0e90171710c13893a96c3a3d1d0c2d4bd',
'29f27a63017570dce02d3632bd3668de710f89712ade2517c954e3ad4384da1c7eef4d' ]
address: 29f27ac66748994652b59127226f828a7941a0e90171710c13893a96c3a3d1d0c2d4bd```
aadedeji (Wed, 30 Aug 2017 14:59:51 GMT):
Hi, I have question about deleting addresses from the validator's merkle state. I have put code within a TP ( state_store.delete([address]) ) that should delete addresses from the merkle state. When I look up the state of an address after deleting it (the validator acknowledges the delete request without throwing an error), the address is still found and state is not empty as expected. Is there an established way (that works) to delete addresses from the merkle state? Thanks in advance for any help
boydjohnson (Wed, 30 Aug 2017 15:08:12 GMT):
@aadedeji You can set an address to empty bytes, b''. We have unit tests of the functionality but no integration tests for it. Does it ever work, or is it consistently not working?
smagne (Wed, 30 Aug 2017 15:12:20 GMT):
@boydjohnson @agunde @pschwarz any ideas on this?
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Pyudw6AqDPHx7rpCY)
boydjohnson (Wed, 30 Aug 2017 15:16:52 GMT):
@smagne It looks like the address is in both inputs and outputs, but you are getting an AuthorizationException?
smagne (Wed, 30 Aug 2017 15:17:04 GMT):
Yes
smagne (Wed, 30 Aug 2017 15:17:04 GMT):
Yes @boydjohnson
boydjohnson (Wed, 30 Aug 2017 15:18:27 GMT):
That address is printed out when the AuthorizationException is thrown?
smagne (Wed, 30 Aug 2017 15:22:56 GMT):
Yes @boydjohnson I'm getting `Tried to get unauthorized address 29f27ac66748994652b59127226f828a7941a0e90171710c13893a96c3a3d1d0c2d4bd`
aadedeji (Wed, 30 Aug 2017 15:23:30 GMT):
@boydjohnson It consistently does not work. I will try setting the address to empty bytes and see if that makes a difference
boydjohnson (Wed, 30 Aug 2017 15:23:49 GMT):
Thanks @aadedeji
boydjohnson (Wed, 30 Aug 2017 15:24:54 GMT):
@smagne Where are you logging out the inputs and outputs?
pschwarz (Wed, 30 Aug 2017 15:28:37 GMT):
@aadedeji can you file a bug with a simple example and steps to reproduce?
aadedeji (Wed, 30 Aug 2017 15:55:59 GMT):
@pschwarz By file a bug do you mean post a screenshot of the validator logging output and code I am using to delete from state?
boydjohnson (Wed, 30 Aug 2017 15:58:10 GMT):
We have a public jira https://jira.hyperledger.org/projects/STL/summary. If you could sign in with your LFID and make an issue, it would be helpful.
aadedeji (Wed, 30 Aug 2017 15:59:18 GMT):
Ok thanks, I will file a bug there
MikeMayori (Wed, 30 Aug 2017 19:14:59 GMT):
Hi there, some of your videos mention this market value transaction family , links are broken like this https://intelledger.github.io/mktnav_users_guide/tutorial.html
MikeMayori (Wed, 30 Aug 2017 19:15:59 GMT):
Would anybody guide me where to find this documentation , also do you have any supply chain use cases implemented that you can share ??
boydjohnson (Wed, 30 Aug 2017 19:18:10 GMT):
That is on our 0.7 branch, so the correct link is: http://intelledger.github.io/0.7/mktnav_users_guide.html.
boydjohnson (Wed, 30 Aug 2017 19:32:32 GMT):
@MikeMayori There is a PR for a complex supply chain transaction family on our repo and much work going into it. We are calling it Track and Trade. https://github.com/hyperledger/sawtooth-core/pull/767
mfford (Wed, 30 Aug 2017 20:22:43 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, August 31st from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, August 31st
Time: 10-11am CDT
We are using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
Agenda:
1. Introductions-Mark Ford
2. Blockchain App Development with JavaScript and Sawtooth -Zac Delventhal
3. Open Forum
pschwarz (Wed, 30 Aug 2017 20:34:30 GMT):
@MikeMayori There is a basic supply chain transaction family that includes everything (TP, state delta export to a Postgres db, and a rest api for viewing the data)
pschwarz (Wed, 30 Aug 2017 20:35:06 GMT):
It's found here: https://github.com/hyperledger/sawtooth-core/tree/master/families/supplychain
pschwarz (Wed, 30 Aug 2017 20:36:14 GMT):
No documentation for it, other than the transaction family spec (which is in the man doc). There are three cli tools in `
pschwarz (Wed, 30 Aug 2017 20:36:22 GMT):
They have pretty decent help text
pschwarz (Wed, 30 Aug 2017 20:36:53 GMT):
(the rest api just merged today, so if you may need to run from source)
MikeMayori (Wed, 30 Aug 2017 20:37:12 GMT):
thanks
MikeMayori (Wed, 30 Aug 2017 20:39:10 GMT):
Will you be able to guide me to run it or deploy it??
pschwarz (Wed, 30 Aug 2017 21:10:40 GMT):
Start a validator using the docker-compose method from the user guide. Then following the testing instructions here: https://github.com/hyperledger/sawtooth-core/pull/721 and here: https://github.com/hyperledger/sawtooth-core/pull/762
pschwarz (Wed, 30 Aug 2017 21:10:46 GMT):
Best I can do at the moment...
aadedeji (Wed, 30 Aug 2017 23:04:45 GMT):
@boydjohnson Hi, I was about to create a new issue regarding the Python SDK state delete functionality. However, I noticed that there was already an unresolved issue ( https://jira.hyperledger.org/browse/STL-603?jql=project%20%3D%20STL%20AND%20component%20%3D%20%22Python%20SDK%22 ) of a similar nature already posted.
aadedeji (Wed, 30 Aug 2017 23:17:02 GMT):
@boydjohnson I also tried to set the address state to b'' after deleting the address (after state_store.delete([address])) but the address and its state still shows up when looking up the /state/address endpoint. I have attached the relevant part of the validator output.
aadedeji (Wed, 30 Aug 2017 23:17:22 GMT):
Message Attachments
cianx (Wed, 30 Aug 2017 23:21:01 GMT):
@jsmitchell can you give @dkhungme the command line to start a 2nd validator joining a first validator on a network. The commands he is referencing above don't seem like they include the proper clauses to peer the validators. ```
As per setup, I run sawtooth on vagrant.
I first started two rest api sawtooth-rest-api -v && sawtooth-rest-api -B 127.0.0.1:8090 -C 127.0.0.2:4004 -v
- Then start 2 validators connecting to the two rest-api set up above: sawtooth-validator -v && sawtooth-validator -B network:127.0.0.2:8800 -B component:127.0.0.2:4004 -v
- Each validator is then connect to one transaction processor: intkey-tp-python -v && intkey-tp-python tcp://127.0.0.2:4004 -v```
zac (Thu, 31 Aug 2017 15:59:37 GMT):
Link to the documentation with the default docker compose file that will run some sawtooth components for you:
http://intelledger.github.io/app_developers_guide/docker.html#download-the-docker-compose-file
cianx (Thu, 31 Aug 2017 16:12:46 GMT):
@dkhungme Here is a set of commands to start 2 validators that are peered. ```
Validator 1 @ ip 172.17.0.2
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k ~/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch
intkey-tp-python -vv tcp://127.0.0.1:4004 &
settings-tp -vv tcp://127.0.0.1:4004 &
sawtooth-validator -vvv \
--endpoint tcp://eth0:8801 \
--bind component:tcp://127.0.0.1:4004 \
--bind network:tcp://eth0:8801
Validator 2 @ ip 172.17.0.3
sawtooth admin keygen
intkey-tp-python -vv tcp://127.0.0.1:4004 &
settings-tp -vv tcp://127.0.0.1:4004 &
sawtooth-validator -vvv \
--endpoint tcp://eth0:8802 \
-P static \
--peers tcp://172.17.0.2:8801 \
--bind component:tcp://127.0.0.1:4004 \
--bind network:tcp://eth0:8802
```
cianx (Thu, 31 Aug 2017 16:16:23 GMT):
If the peering works you will see a NETWORK Connect messages in the Validator 1 logs ```[2017-08-31 16:08:46.587 DEBUG interconnect] ServerThread receiving NETWORK_CONNECT message: 89 bytes
```
oatmealraisin (Thu, 31 Aug 2017 18:47:29 GMT):
Has joined the channel.
oatmealraisin (Thu, 31 Aug 2017 18:47:43 GMT):
hello, is the intkey smoke test still supported?
boydjohnson (Thu, 31 Aug 2017 18:49:25 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/tests/test_intkey_smoke.py This one?
oatmealraisin (Thu, 31 Aug 2017 18:50:33 GMT):
Yes. i'm trying to convert the associated compose file into a kubernetes deployment, and I'm getting an empty state error.
oatmealraisin (Thu, 31 Aug 2017 18:50:51 GMT):
I'm not entirely sure why the state should be empty at that point?
oatmealraisin (Thu, 31 Aug 2017 18:51:09 GMT):
I've confirmed that the services can speak with one another.
oatmealraisin (Thu, 31 Aug 2017 18:51:45 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_intkey_smoke_python.yaml this file
oatmealraisin (Thu, 31 Aug 2017 18:52:33 GMT):
Do the containers need to have a shared directory at /project/sawtooth-core, or is that just injecting the latest files into the container
boydjohnson (Thu, 31 Aug 2017 18:53:18 GMT):
It doesn't need to be shared that is just mounting the latest source code.
oatmealraisin (Thu, 31 Aug 2017 18:53:53 GMT):
@boydjohnson thanks!
boydjohnson (Thu, 31 Aug 2017 18:54:32 GMT):
Your welcome. Tell us more about how your kubernetes with sawtooth experience goes, as you make progress.
boydjohnson (Thu, 31 Aug 2017 18:54:32 GMT):
You're welcome. Tell us more about how your kubernetes with sawtooth experience goes, as you make progress.
oatmealraisin (Thu, 31 Aug 2017 19:05:16 GMT):
It's going well in production, however the smoketest is giving me issues. I'm hitting the last check "Empty state error"
oatmealraisin (Thu, 31 Aug 2017 19:06:03 GMT):
Why would the state be empty at that point?
boydjohnson (Thu, 31 Aug 2017 19:08:43 GMT):
I'm going to look at the test a little...
boydjohnson (Thu, 31 Aug 2017 19:11:43 GMT):
So that "Empty state error" is a little bit of a bad message. It is testing that the state should be empty at the start of the test and if it isn't it throws that error.
boydjohnson (Thu, 31 Aug 2017 19:12:41 GMT):
Does kubernetes reuse containers or are all the containers fresh when the test starts?
vbledar (Thu, 31 Aug 2017 19:18:43 GMT):
Has joined the channel.
vbledar (Thu, 31 Aug 2017 19:19:26 GMT):
Hi everyone, I'm trying to setup a java based transaction family, but I've been unable to install it in my ubuntu vm were I have installed sawtooth. Can someone guide me to a tutorial?
boydjohnson (Thu, 31 Aug 2017 19:23:04 GMT):
http://intelledger.github.io/app_developers_guide/java_sdk.html This doesn't have installation instructions, but is a general tutorial on using the java sdk. So if you have the sawtooth-core repo in the ubuntu vm, you can ./bin/buld_java_sdk and the java sdk will be installed and usable by maven.
boydjohnson (Thu, 31 Aug 2017 19:23:04 GMT):
http://intelledger.github.io/app_developers_guide/java_sdk.html This doesn't have installation instructions, but is a general tutorial on using the java sdk. So if you have the sawtooth-core repo in the ubuntu vm, you can `./bin/buld_java_sdk` and the java sdk will be installed and usable by maven.
vbledar (Thu, 31 Aug 2017 19:25:11 GMT):
Thanks, I've seen that and have already build my transaction family. I have built my .jar file. Unfortunately I don't understand how I install it in the current sawtooth setup I have in the VM. I installed sawtooth using apt-get not building the repo.
boydjohnson (Thu, 31 Aug 2017 19:29:48 GMT):
So the jar built correctly?
boydjohnson (Thu, 31 Aug 2017 19:31:20 GMT):
A normal sawtooth setup is distributed where the `sawtooth-validator` runs in one process, a transaction processor, say your java one, runs in another process and they all communicate over zeromq messaging.
vbledar (Thu, 31 Aug 2017 19:31:50 GMT):
Yes. I used the sawtooth maven dependecies and now I have a jar with my one transaction for the time being.
vbledar (Thu, 31 Aug 2017 19:33:20 GMT):
But I don't know how to make my sawtooth installation aware, basically from what you said, I don't know how to start my transaction processor.
vbledar (Thu, 31 Aug 2017 19:35:44 GMT):
I took a look on the java sdk at the following file: sawtooth-core\sdk\java\src\main\java\sawtooth\sdk\processor\TransactionProcessor.java
vbledar (Thu, 31 Aug 2017 19:36:11 GMT):
Should I create one for my transaction family or is it enough to use this one?
boydjohnson (Thu, 31 Aug 2017 19:37:20 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/bin/intkey-tp-java I would make a script to run your jar, like this.
vbledar (Thu, 31 Aug 2017 19:38:25 GMT):
I think this is what I was looking for. Thanks a lot. I'll give it try immediately.
boydjohnson (Thu, 31 Aug 2017 19:38:39 GMT):
You're welcome.
vbledar (Thu, 31 Aug 2017 20:07:05 GMT):
I tried it but it is not running. I'm getting the following: java.lang.IllegalArgumentException: Invalid URI: *
vbledar (Thu, 31 Aug 2017 20:07:42 GMT):
I guess I need to find out the ip address (I guess this should be localhost since I'm running everything in one vm) and the port on which the zmq is listening on.
boydjohnson (Thu, 31 Aug 2017 20:09:32 GMT):
It should be port 4004 by default, but you should also start up the `sawtooth validator`.
vbledar (Thu, 31 Aug 2017 20:10:42 GMT):
Yes, the validator is up and running and since I'm getting the following in its logs I guess you must be right: Listening on tcp://127.0.0.1:4004
oatmealraisin (Thu, 31 Aug 2017 20:11:39 GMT):
@boydjohnson sorry for the delay, I've been testing things out
oatmealraisin (Thu, 31 Aug 2017 20:12:31 GMT):
@boydjohnson kube has functionality to keep storage between containers, but I'm standing everything up and tearing it down for each run. The normal spin up goes:
oatmealraisin (Thu, 31 Aug 2017 20:12:38 GMT):
1: Validator comes up
oatmealraisin (Thu, 31 Aug 2017 20:12:47 GMT):
2: settings-tp and intkey-tp come up
oatmealraisin (Thu, 31 Aug 2017 20:12:51 GMT):
3: rest-api comes up
oatmealraisin (Thu, 31 Aug 2017 20:13:08 GMT):
4: test-intkey-smoke-python comes up
boydjohnson (Thu, 31 Aug 2017 20:13:26 GMT):
Still getting the error?
oatmealraisin (Thu, 31 Aug 2017 20:14:01 GMT):
@boydjohnson yes :(
boydjohnson (Thu, 31 Aug 2017 20:14:14 GMT):
:(
oatmealraisin (Thu, 31 Aug 2017 20:14:49 GMT):
btw, just to be clear, I'm running on OpenShift, which is a fork of Kubernetes. If you all are in need of the kube files for standing up sawtooth, I can convert what I have to Kube canon
vbledar (Thu, 31 Aug 2017 20:15:21 GMT):
@boydjohnson thanks a lot: registered transaction processor: connection_id=4b0f4f8f
boydjohnson (Thu, 31 Aug 2017 20:15:32 GMT):
Sweet @vbledar
boydjohnson (Thu, 31 Aug 2017 20:16:47 GMT):
@rbuysse @adamludvik Do either of you know anyting about Kubernetes or OpenShift?
rbuysse (Thu, 31 Aug 2017 20:17:46 GMT):
Not really. :(
oatmealraisin (Thu, 31 Aug 2017 20:35:14 GMT):
@boydjohnson It seems that even when the test isn't run, a curl to http//rest-api:8080/state returns a non-null value. What could be setting the state? I register the settings-tp and intkey-tp with the validator before making the curl, could that affect things?
boydjohnson (Thu, 31 Aug 2017 20:36:31 GMT):
Are you using PoET and setting on-chain configuration in the genesis batch?
oatmealraisin (Thu, 31 Aug 2017 20:39:18 GMT):
the commands that are run are identical to the ones in the docker compose for the tests, although to be honest I'm using the images on dockerhub
boydjohnson (Thu, 31 Aug 2017 20:40:49 GMT):
Could you post the state values that curl /state gives you?
oatmealraisin (Thu, 31 Aug 2017 20:46:51 GMT):
https://gist.github.com/oatmealraisin/56546e574c73cf8fb789171b47488d11
oatmealraisin (Thu, 31 Aug 2017 20:48:09 GMT):
I believe that the test is expecting []
oatmealraisin (Thu, 31 Aug 2017 20:55:16 GMT):
Perhaps there is a command I can run before the test that would clear everything?
boydjohnson (Thu, 31 Aug 2017 21:06:49 GMT):
That's strange because the address that is there is a settings address. You could `rm /var/lib/sawtooth/*` as part of the startup of the validator. This blows away the data directory.
jsmitchell (Thu, 31 Aug 2017 21:07:28 GMT):
doesn't the config batch which goes into the genesis block include a setting now?
jsmitchell (Thu, 31 Aug 2017 21:07:34 GMT):
@pschwarz ^
jsmitchell (Thu, 31 Aug 2017 21:08:04 GMT):
why are we expecting the state to be empty?
jsmitchell (Thu, 31 Aug 2017 21:08:08 GMT):
seems like a bad assumption
boydjohnson (Thu, 31 Aug 2017 21:08:45 GMT):
@drozd And I were talking about that and it would be better to assert that intkey state is empty before the test.
pschwarz (Thu, 31 Aug 2017 21:08:55 GMT):
This is true - there should be at least one state entry for a setting
jsmitchell (Thu, 31 Aug 2017 21:09:00 GMT):
sounds like a broken test to me
oatmealraisin (Thu, 31 Aug 2017 21:12:51 GMT):
@jsmo
oatmealraisin (Thu, 31 Aug 2017 21:13:06 GMT):
@jsmitchell So i'm not crazy?? Could it be?
drozd (Thu, 31 Aug 2017 21:33:25 GMT):
@oatmealraisin the test does indeed have an error in it
drozd (Thu, 31 Aug 2017 21:33:57 GMT):
you might have already said it, but how are you starting the validator and everything else?
oatmealraisin (Thu, 31 Aug 2017 21:36:38 GMT):
@drozd Exactly as it is in the docker compose file, same commands, same order, same ports exposed
oatmealraisin (Thu, 31 Aug 2017 21:37:53 GMT):
however, I am using the docker image from dockerhub
drozd (Thu, 31 Aug 2017 21:40:11 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/docker/compose/sawtooth-default.yaml
drozd (Thu, 31 Aug 2017 21:40:16 GMT):
do you mean that compose file?
dkhungme (Fri, 01 Sep 2017 01:57:52 GMT):
thanks much @cianx . I will try this out
lmrln (Fri, 01 Sep 2017 10:10:49 GMT):
Has joined the channel.
zac (Fri, 01 Sep 2017 15:50:44 GMT):
Does anyone know of a simple way to ping a validator and make sure it is set working properly?
zac (Fri, 01 Sep 2017 15:51:02 GMT):
The equivalent of `curl localhost:8080/blocks` for the REST API?
zac (Fri, 01 Sep 2017 15:51:20 GMT):
I am having validator connection issues, and I want to rule that out
jsmitchell (Fri, 01 Sep 2017 15:51:32 GMT):
connect a rest api to it and run `curl localhost:8080/blocks` ?
jsmitchell (Fri, 01 Sep 2017 15:51:36 GMT):
_runs_
zac (Fri, 01 Sep 2017 15:51:42 GMT):
the REST API does work
zac (Fri, 01 Sep 2017 15:51:58 GMT):
and the dock TPs are talking to the validator
zac (Fri, 01 Sep 2017 15:52:12 GMT):
so it's probably not a Docker issue
zac (Fri, 01 Sep 2017 15:52:30 GMT):
But I want to make sure I can connect to `tcp:localhost:4004`
zac (Fri, 01 Sep 2017 15:52:30 GMT):
But I want to make sure I can connect to `tcp://localhost:4004`
zac (Fri, 01 Sep 2017 15:53:14 GMT):
Because the error is telling me that I can't
zac (Fri, 01 Sep 2017 15:53:28 GMT):
And I don't know enough to confirm that the error is wrong yet
jsmitchell (Fri, 01 Sep 2017 15:53:29 GMT):
what error?
jsmitchell (Fri, 01 Sep 2017 15:53:32 GMT):
from where?
zac (Fri, 01 Sep 2017 15:54:32 GMT):
```
Connected to tcp://localhost:4004
Disconnected from tcp://localhost:4004
Attempting to reconnect to tcp://localhost:4004
Connected to tcp://localhost:4004
Disconnected from tcp://localhost:4004
Attempting to reconnect to tcp://localhost:4004
Connected to tcp://localhost:4004
Disconnected from tcp://localhost:4004
Attempting to reconnect to tcp://localhost:4004
. . .
```
pschwarz (Fri, 01 Sep 2017 15:54:54 GMT):
Do you have vagrant running?
zac (Fri, 01 Sep 2017 15:54:55 GMT):
This is coming from the JS SDK `Stream` class (I think)
zac (Fri, 01 Sep 2017 15:55:05 GMT):
Same problem I was having during the talk
pschwarz (Fri, 01 Sep 2017 15:55:08 GMT):
And docker containers?
zac (Fri, 01 Sep 2017 15:55:18 GMT):
def not docker containers
zac (Fri, 01 Sep 2017 15:55:21 GMT):
god dammit
zac (Fri, 01 Sep 2017 15:55:25 GMT):
vagrant is running
zac (Fri, 01 Sep 2017 15:55:26 GMT):
how?
zac (Fri, 01 Sep 2017 15:55:51 GMT):
butts
zac (Fri, 01 Sep 2017 15:56:39 GMT):
stupid secret vagrant instance ruining my talk
podfrogs (Fri, 01 Sep 2017 18:13:48 GMT):
Has joined the channel.
podfrogs (Fri, 01 Sep 2017 18:16:23 GMT):
Hello! We are considering to use SawtoothLake for our block-chain application. One of the questions I have, other the file based leveldb database., is there an option currently or will there be an option in future to use a no-sql database like CouchDB ? Thanks
pschwarz (Fri, 01 Sep 2017 19:19:15 GMT):
There is a feature to subscribe to state changes that can be applied to an external DB
podfrogs (Fri, 01 Sep 2017 20:53:32 GMT):
What we are trying to do is distribute data, which are essentially PDF files for many users. This may become huge and a file based database may not be quite scalable for that. Is there a way we can substitute the database with a non sql database? (that means there will be no file based db at all)
JamieOBE (Sat, 02 Sep 2017 07:12:55 GMT):
Has joined the channel.
dimension7 (Sat, 02 Sep 2017 07:29:50 GMT):
Has joined the channel.
glenlau (Sat, 02 Sep 2017 13:12:12 GMT):
Has joined the channel.
alexandra_g (Sat, 02 Sep 2017 21:13:00 GMT):
Has joined the channel.
Khakhar (Mon, 04 Sep 2017 03:31:24 GMT):
Has joined the channel.
pschwarz (Mon, 04 Sep 2017 18:58:13 GMT):
Not at the moment, now. Currently it's handled by an internal API, that could very well be subject to change across versions (even after 1.0)
pschwarz (Mon, 04 Sep 2017 18:58:13 GMT):
Not at the moment, no. Currently it's handled by an internal API, that could very well be subject to change across versions (even after 1.0)
pschwarz (Mon, 04 Sep 2017 18:58:40 GMT):
Are you planning on storing the PDF files on the block chain?
dave_ias (Tue, 05 Sep 2017 03:05:55 GMT):
Has joined the channel.
oatmealraisin (Tue, 05 Sep 2017 15:49:26 GMT):
@drozd Sorry for the delay, labor day weekend and all. I mean the docker-compose file for the test,https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_intkey_smoke_python.yaml
boydjohnson (Tue, 05 Sep 2017 15:52:20 GMT):
@oatmealraisin , @drozd has a PR up -- https://github.com/hyperledger/sawtooth-core/pull/798 -- that restricts the test to only assert that intkey state is empty at the beginning of the test.
oatmealraisin (Tue, 05 Sep 2017 17:19:13 GMT):
@boydjohnson Thanks!
boydjohnson (Tue, 05 Sep 2017 21:35:42 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/validator/tests/test_context_manager/tests.py#L1435 @drozd pointed out to me that one of the context manager delete unit tests is missing an assertion and when the assertion is put in the test fails. I worked on that PR along with @cintel.
dragon82 (Wed, 06 Sep 2017 09:00:08 GMT):
Has joined the channel.
MoulaliMvg (Wed, 06 Sep 2017 09:16:52 GMT):
Has joined the channel.
AkarshaMahadeva (Wed, 06 Sep 2017 20:25:33 GMT):
1)How does Sawtooth ensure immutability? Is it because of merkle tree hashing?
How is sawtooth more secured than fabric or iroha? What makes it more scalable?
I have these questions now.
Dan (Wed, 06 Sep 2017 23:18:19 GMT):
Yes immutability comes in part from merkle trie. And yes that makes it different than Fabric which does not, as I understand it, provide global state agreement (via that merkle root hash). I'm not familiar enough with Iroha to comment on difference there.
Dan (Wed, 06 Sep 2017 23:19:23 GMT):
Sawtooth is scalable for a few reasons but the main one is that we support multiple consensus algorithms including Proof of Elapsed time which has similar scaling characteristics to Proof of Work but without the electricity consumption.
Meai1 (Thu, 07 Sep 2017 14:38:35 GMT):
Has joined the channel.
Meai1 (Thu, 07 Sep 2017 14:38:56 GMT):
Can you guys explain the concept behind smart contracts?
Isnt that inherently always going to rely on sources that can be manipulated and changed at will?
How is it secure that e.g. my smart contract will automatically deduct 100 BTC from my account if my client somehow manages to convince sensor X or API Y or metric Z to appear a certain way? Lets take a fish company as an example. They put sensors into their fish tank to monitor if the fish is fresh and if the sensors report that it is, the money will automatically be deducted.
Uh ok, what if the guy just puts the sensor in a bucket of fresh water and the entire truckload of fish is actually rotting right next to it? What then?
kelly_ (Thu, 07 Sep 2017 14:56:12 GMT):
@Meai1 if you are having smart contracts actuated based off external data feeds (whether they be price feeds or sensors), that it is always important that those data feeds are secure
kelly_ (Thu, 07 Sep 2017 14:57:35 GMT):
for instance if I have an option contract that says pay $10 if the price goes over $50
kelly_ (Thu, 07 Sep 2017 14:58:07 GMT):
you have to get that price feed from somewhere, and if it is manipulated, than the smart contract can be manipulated
Meai1 (Thu, 07 Sep 2017 14:59:07 GMT):
exactly, so smart contracts seem to be inherently insecure
Meai1 (Thu, 07 Sep 2017 15:02:09 GMT):
Why the hype around them? Crypto coins make sense insofar that it's just a distributed database storing tamper free strings aka "coins", but smart contracts would only work in a trusted environment. If you trust your business partner anyway, then you might just as well use a regular sensor that is streaming updates to some server. I guess the only advantage is that you dont have to code a backup of the records yourself, it's built into the database automatically as a principle design decision.
kelly_ (Thu, 07 Sep 2017 15:06:53 GMT):
Well sensors could be made secure, or you minimizing your trust to that sensor host, but not necessarily using trust around the payment
kelly_ (Thu, 07 Sep 2017 15:07:13 GMT):
for example you and I may both trust NASDAQ for a price feed, but I don't trust that you will pay me out on an option
kelly_ (Thu, 07 Sep 2017 15:07:48 GMT):
so we could agree to use NASDAQs price feed, and have a smart contract that removes the trust out of the payment
Meai1 (Thu, 07 Sep 2017 15:08:04 GMT):
well, 'trust' is a little overstated. I would never trust any service of any kind that would automatically deduct money from my account based on some 3rd party information
Meai1 (Thu, 07 Sep 2017 15:09:11 GMT):
You are saying that we should use a smart contract but it would omit the automatic execution ? Then what's the real difference between a regular person hitting 'okay' in a gui
Meai1 (Thu, 07 Sep 2017 15:13:06 GMT):
Related to this, I was wondering how all these people are making distributed social networks / forums based on blockchain. How do they make sure that everyone is running the same software?
kelly_ (Thu, 07 Sep 2017 15:23:44 GMT):
I'm not saying it would omit the automatic execution
kelly_ (Thu, 07 Sep 2017 15:24:33 GMT):
re: social networks/forums, most of the time most users interact with a single node through a web interface
Meai1 (Thu, 07 Sep 2017 15:35:32 GMT):
Yeah I have seen that ,but that feels like cheating. It's not really decentralized then if you can shoot down nodes that you care about
kelly_ (Thu, 07 Sep 2017 16:52:10 GMT):
well, presumably the network that manages the points/currency is still decentralized
zac (Thu, 07 Sep 2017 19:35:37 GMT):
@Meai1 Even if the ecosystem feeding data to a smart contract is not perfectly secure, it may still be worth using
zac (Thu, 07 Sep 2017 19:35:58 GMT):
We have pretty good solutions for insecure ecosystems: insurance, courts, etc
zac (Thu, 07 Sep 2017 19:37:31 GMT):
If you are purely exchanging digital goods (like a cryptocurrency), then you can shoot for perfect security, and that does get potentially very interesting.
zac (Thu, 07 Sep 2017 19:37:48 GMT):
But I don't think perfect security will ever be possible with any physical assets.-
zac (Thu, 07 Sep 2017 19:38:02 GMT):
That doesn't mean a smart contract is useless for those though.
zac (Thu, 07 Sep 2017 19:59:20 GMT):
Proposal:
We change the default REST API port from `8080` to `8008`.
Reasons:
- It's twice the default validator port of `4004`
- It's less frequently used than `8080` and will be less likely to conflict with other services
- It's still a port that is understood to be used for HTTP services
zac (Thu, 07 Sep 2017 19:59:26 GMT):
Thoughts?
Dan (Thu, 07 Sep 2017 20:38:55 GMT):
Have we run into collisions with 8080? I don't see an issue with the change, other than every change has its cost (confusing people who learned earlier port, make sure docs are in sync etc.)
zac (Thu, 07 Sep 2017 20:43:03 GMT):
The Track and Trade app uses RethinkDB, which deploys a GUI to `8080`.
zac (Thu, 07 Sep 2017 20:43:54 GMT):
`8080` is a very common default (it's `aiohttp`'s default, which is why it's the REST API's default), so I imagine there will be other collisions.
zac (Thu, 07 Sep 2017 20:45:27 GMT):
I figure if there has to be confusion, better to be now when we aren't tied to a particular API.
zac (Thu, 07 Sep 2017 20:45:51 GMT):
But yeah, maybe not worth it even now.
zac (Thu, 07 Sep 2017 20:45:51 GMT):
But yeah, maybe not worth changing
Meai1 (Fri, 08 Sep 2017 09:58:46 GMT):
Can I test sawtooth without having a modern intel cpu? Is there an alternative implementation for Intel SGX for testing purposes during development?
zac (Fri, 08 Sep 2017 14:25:12 GMT):
yep
zac (Fri, 08 Sep 2017 14:25:34 GMT):
there is both a simple dev-mode consensus, and a PoET simulator
pschwarz (Fri, 08 Sep 2017 14:32:02 GMT):
@zac, if you use rethink from a docker container, you can remap the rethink port from 8080 to what every you like
pschwarz (Fri, 08 Sep 2017 14:32:50 GMT):
Though, 8080 is the default on many http server toolkits - all the jvm libraries seem to to use this
pschwarz (Fri, 08 Sep 2017 14:33:03 GMT):
I'm not against changing the port, really
pschwarz (Fri, 08 Sep 2017 14:33:49 GMT):
I agree that leaving it as 8080 might be a little be a common collision for developers
pschwarz (Fri, 08 Sep 2017 14:33:49 GMT):
I agree that leaving it as 8080 might result in common collisions for developers
zac (Fri, 08 Sep 2017 14:33:59 GMT):
yes, this change is only _partly_ to make _my_ life more convenient
Meai1 (Fri, 08 Sep 2017 15:30:16 GMT):
8080 is always annoying because something is running on it already and now I have to hunt down the config to change it
zac (Fri, 08 Sep 2017 15:43:10 GMT):
I've added a JIRA task if someone wants to jump on this: https://jira.hyperledger.org/browse/STL-670
zac (Fri, 08 Sep 2017 15:43:17 GMT):
I may get to it over the weekend
analyticbastard (Sat, 09 Sep 2017 16:07:10 GMT):
Has joined the channel.
Henni (Sun, 10 Sep 2017 12:28:02 GMT):
Has joined the channel.
soccerhaotian (Sun, 10 Sep 2017 23:26:38 GMT):
Has joined the channel.
detroitpro (Mon, 11 Sep 2017 15:21:00 GMT):
Has joined the channel.
detroitpro (Mon, 11 Sep 2017 15:21:49 GMT):
I asked this question about Fabric but I wonder too if it can be handled using Sawtooth, any direction would be wonderful: https://stackoverflow.com/questions/46136594/can-hyperledger-fabric-support-asset-mutation
jsmitchell (Mon, 11 Sep 2017 15:32:36 GMT):
@detroitpro that is totally doable in Sawtooth
jsmitchell (Mon, 11 Sep 2017 15:34:51 GMT):
you could define different asset types and create transactions which perform the operations on the assets to create new assets.
jsmitchell (Mon, 11 Sep 2017 15:35:29 GMT):
like 10 monster teeth + a rabbit's foot + hot tea = a flying potion
jsmitchell (Mon, 11 Sep 2017 15:35:48 GMT):
that transaction would consume/destroy the inputs to produce the output
detroitpro (Mon, 11 Sep 2017 15:35:53 GMT):
in Sawtooth do you create a transaction record at the protocol level or at the smart contract level?
detroitpro (Mon, 11 Sep 2017 15:36:18 GMT):
Is there anywhere I could find an example/docs on doing such wizardry?
jsmitchell (Mon, 11 Sep 2017 15:36:18 GMT):
everything is defined within the transaction processor
jsmitchell (Mon, 11 Sep 2017 15:36:45 GMT):
@zac can give you some pointers
jsmitchell (Mon, 11 Sep 2017 15:36:56 GMT):
I need to run to jury duty
detroitpro (Mon, 11 Sep 2017 15:37:00 GMT):
TY!
zac (Mon, 11 Sep 2017 15:37:17 GMT):
Let me look at this question...
zac (Mon, 11 Sep 2017 15:37:30 GMT):
Go jury @jsmitchell
zac (Mon, 11 Sep 2017 15:38:27 GMT):
Yeah, I wrote a design for a transaction family that would do this
zac (Mon, 11 Sep 2017 15:38:37 GMT):
No plans to build it yet
zac (Mon, 11 Sep 2017 15:38:52 GMT):
But as we keep working in the supply chain space, this is definitely something we have our eye on
zac (Mon, 11 Sep 2017 15:38:52 GMT):
But as we keep working in the supply chain space, composing and decomposing assets is definitely something we have our eye on
zac (Mon, 11 Sep 2017 15:39:54 GMT):
Not sure on what you mean by protocol/smart contract level
zac (Mon, 11 Sep 2017 15:41:33 GMT):
In Sawtooth, you store arbitrary data on the blockchain, and you can design Transaction Processors which run arbitrary logic that determines what goes on the blockchain
zac (Mon, 11 Sep 2017 15:44:37 GMT):
So in my design, you could submit a transaction which would create a schema for an asset type. This schema would include rules about composing/decomposing the asset. I had a JSON schema format worked out, but basically what you want is something that communicates _"this widget can only be made using this list of component assets"_
zac (Mon, 11 Sep 2017 15:44:53 GMT):
This schema gets saved to the blockchain
AkarshaMahadeva (Mon, 11 Sep 2017 15:46:11 GMT):
Hey please tell me if I have got this right. In Sawtooth, each node has the capability to receive and process transactions. But whether the transaction should be added to block chain is decided by one of the node?
zac (Mon, 11 Sep 2017 15:47:48 GMT):
Then later someone will try to create one of these widgets. And the Transaction Processor will say, "Okay, this person is trying to create a widget. According to the schema, a widget needs all these component parts. Does the person control those parts? They do, great. Let's destroy the parts and create the widget."
zac (Mon, 11 Sep 2017 15:48:08 GMT):
Which is all a very long way of saying: Your Transaction Processor can do whatever you want.
detroitpro (Mon, 11 Sep 2017 15:49:15 GMT):
Let me see if I follow, the idea of a transaction processor exists, the design for a transaction family exists but there are not built in methods/sdk/api for destroying X and creating Y?
zac (Mon, 11 Sep 2017 15:52:00 GMT):
@AkarshaMahadeva Yes, more or less. Keep in mind that each node will be building a new block all the time. Then if one wins the block, that's the block the other nodes will use.
zac (Mon, 11 Sep 2017 15:53:20 GMT):
@detroitpro Correct. Sawtooth is very unopinionated about what you do with the blockchain. So the SDKs are pretty thin. They simplify interactions with various Sawtooth components, but they do not require you to implement your logic in any particular way.
zac (Mon, 11 Sep 2017 15:53:55 GMT):
That doesn't mean people won't build toolsets on top of Sawtooth that are general purpose but more opinionated.
zac (Mon, 11 Sep 2017 15:54:23 GMT):
For example, the Seth Transaction Family gives you full EVM Smart Contract functionality
detroitpro (Mon, 11 Sep 2017 15:54:46 GMT):
@zac when I said protocol/smart contract level, I was unaware of the concept of Transaction Processors - they sound like what I am looking for. Is there anything in public (github issue) where you detail Transaction Familalies?
zac (Mon, 11 Sep 2017 15:54:53 GMT):
The Transaction Family I'm working on now, Track and Trade, is a fairly generic supply chain family
zac (Mon, 11 Sep 2017 15:55:28 GMT):
It will only really be a PoC for now, but we're building it with an eye to the future where it might become a useful supply chain platform that could actually be deployed
zac (Mon, 11 Sep 2017 15:55:45 GMT):
It would have some built in decompose/compose functionality in that case
zac (Mon, 11 Sep 2017 15:56:34 GMT):
@detroitpro http://intelledger.github.io/app_developers_guide.html
zac (Mon, 11 Sep 2017 15:56:39 GMT):
What language do you work in?
AkarshaMahadeva (Mon, 11 Sep 2017 15:56:56 GMT):
So if there is only one node authenticating whether the block should be added to block chain then it becomes centralized right?
zac (Mon, 11 Sep 2017 15:57:18 GMT):
each block will come from a different node
detroitpro (Mon, 11 Sep 2017 15:58:46 GMT):
@zac - Mostly C#, JavaScript and Python.
zac (Mon, 11 Sep 2017 15:59:26 GMT):
There is both a JS and Python SDK with similar functionality
zac (Mon, 11 Sep 2017 15:59:49 GMT):
http://intelledger.github.io/app_developers_guide/javascript_sdk.html
http://intelledger.github.io/app_developers_guide/python_sdk.html
zac (Mon, 11 Sep 2017 16:00:09 GMT):
The best thing is to read the processor tutorial for the language you are working in I think
zac (Mon, 11 Sep 2017 16:00:38 GMT):
There are also copious example TPs in Python, and one or two in JS you can find in the core repo
zac (Mon, 11 Sep 2017 16:04:14 GMT):
@AkarshaMahadeva The process looks something like this:
```
- Batches are submitted to a node
- That node validates this batch, then adds it to a pending list and sends it to the other nodes
- Each node validates the batches they receive from other nodes, then adds it to their pending list, and broadcasts it out
- Any valid batch will pretty quickly be in every validator's pending list
- At some point one node will win the block, and batches that were in that node's pending list will be included in the block.
- Any valid batches only in other nodes for some reason, and so not included in the block, will remain in the pending lists of those nodes, and be included in a future block
```
zac (Mon, 11 Sep 2017 16:04:14 GMT):
@AkarshaMahadeva The process looks something like this:
```
- Batches are submitted to a node
- That node validates this batch, then adds it to a pending list and sends it to the other nodes
- When a node recieves batches from other nodes, they treat it just like a submitted batch. They validate it, add it to a pending list, then send it to other nodes
- Any valid batch will pretty quickly be in every validator's pending list
- At some point one node will win the block, and batches that were in that node's pending list will be included in the block
- Any valid batches only in other nodes for some reason, and so not included in the block, will remain in the pending lists of those nodes, and be included in a future block
```
AkarshaMahadeva (Mon, 11 Sep 2017 16:07:11 GMT):
Thank u so much it cleared a lot of my doubts
detroitpro (Mon, 11 Sep 2017 19:08:42 GMT):
In Sawtooth, do validators need to reach some form of consensus? and is there a network/cluster or validators?
jsmitchell (Mon, 11 Sep 2017 19:14:49 GMT):
yes, and yes
jsmitchell (Mon, 11 Sep 2017 19:15:57 GMT):
http://intelledger.github.io/architecture/poet.html
jsmitchell (Mon, 11 Sep 2017 19:16:28 GMT):
but first http://intelledger.github.io/introduction.html
detroitpro (Mon, 11 Sep 2017 19:33:21 GMT):
@jsmitchell What happens if 1 validator is hacked, the validation code is modified?
jsmitchell (Mon, 11 Sep 2017 19:47:06 GMT):
then that validator is sad
jsmitchell (Mon, 11 Sep 2017 19:47:15 GMT):
but the rest of the network continues on
detroitpro (Mon, 11 Sep 2017 21:00:26 GMT):
Is the validator somehow removed from the network or it's transactions ignored - for example; the rest of the validators check the state transaction for the transactions....I'm sorry, I feel like I am missing something.....
detroitpro (Mon, 11 Sep 2017 21:00:26 GMT):
Is the validator somehow removed from the network or it's transactions ignored - for example; the rest of the validators check the state transition for the transactions....I'm sorry, I feel like I am missing something.....
jsmitchell (Mon, 11 Sep 2017 21:05:45 GMT):
@detroitpro it cannot publish blocks that will be considered valid by any of the other nodes, because it has broken code
jsmitchell (Mon, 11 Sep 2017 21:06:02 GMT):
all parts of a block are checked by the other nodes
jsmitchell (Mon, 11 Sep 2017 21:06:25 GMT):
the transactions, the signatures, and the state root hash that should result once all the transactions are processed
jsmitchell (Mon, 11 Sep 2017 21:06:33 GMT):
if anything doesn't match, the block is considered invalid
jsmitchell (Mon, 11 Sep 2017 21:06:45 GMT):
so, the rest of the network will ignore the blocks from the bad node
detroitpro (Mon, 11 Sep 2017 21:12:10 GMT):
um....so that validator will publish a block, before it's written to the ledger, all the other validators will validate the transactions, the signatures and the state root hash.?
jsmitchell (Mon, 11 Sep 2017 21:13:51 GMT):
yes
jsmitchell (Mon, 11 Sep 2017 21:44:25 GMT):
each validator maintains its own copy of the ledger, if that isn't clear
AkarshaMahadeva (Mon, 11 Sep 2017 22:18:16 GMT):
How does sawtooth check if the transaction in the blockchain has been tampered? how does invalidate the transactions?
jsmitchell (Mon, 11 Sep 2017 22:18:46 GMT):
transactions are signed with private keys
jsmitchell (Mon, 11 Sep 2017 22:19:47 GMT):
transaction headers contain the associated public key
jsmitchell (Mon, 11 Sep 2017 22:20:28 GMT):
therefore, the transaction contains all the information to verify it was signed by the private key associated with the claimed public key
jsmitchell (Mon, 11 Sep 2017 22:20:41 GMT):
the validator passes the transaction payload to the transaction processor
jsmitchell (Mon, 11 Sep 2017 22:21:52 GMT):
the transaction processor can enforce rules around what that public key is allowed to do (i.e. withdraw money from a specific account 'owned' by the public key).
jsmitchell (Mon, 11 Sep 2017 22:22:34 GMT):
if the transaction attempts to do something else (like withdraw funds from an account *not* owned by the public key) then the transaction processor will declare the transaction invalid
detroitpro (Tue, 12 Sep 2017 02:16:46 GMT):
does there happen to be a running version, or a github repo that has an already configured version, or docker image of the supply chain sample? https://intelledger.github.io/examples/supplychain/overview.html
FlyingTiger (Tue, 12 Sep 2017 02:54:42 GMT):
As we know, PoET uses the measure of aggregate local mean to determine the valid fork, that means a measure of the total amount of time spent waiting, But how do we understand this? Could you give some examples to explain this? Thanks very much! :)
Haojun (Tue, 12 Sep 2017 07:19:53 GMT):
Has joined the channel.
pschwarz (Tue, 12 Sep 2017 14:43:02 GMT):
@detroitpro: there is not yet a docker compose file for the supply chain sample
pschwarz (Tue, 12 Sep 2017 14:43:15 GMT):
Shouldn't be too hard to put together, though
AkarshaMahadeva (Tue, 12 Sep 2017 16:19:38 GMT):
If the node that has the right to add block goes down on network what haooens?
AkarshaMahadeva (Tue, 12 Sep 2017 16:20:03 GMT):
*happens? when does fork situation arises? How does sawtooth resolve fork?
pschwarz (Tue, 12 Sep 2017 16:22:07 GMT):
The consensus module will determine that there is a fork. It depends on the consensus algorithm. In the current implementation, PoET handles this
pschwarz (Tue, 12 Sep 2017 16:22:35 GMT):
Down the road, PBFT, or the like (The intention is that it is pluggable)
Southside (Wed, 13 Sep 2017 00:14:34 GMT):
Has joined the channel.
Southside (Wed, 13 Sep 2017 00:17:55 GMT):
Are there any implementations of "mining rewards" on PoET blockchains yet?
Dan (Wed, 13 Sep 2017 04:58:29 GMT):
@FlyingTiger If I remember correctly the simple version of fork resolution is that larger populations and smaller wait times are what wins. the local mean and the network population are related variables so you can compute one from another. Not sure if that answers your question so feel free to ask more specifically.
Dan (Wed, 13 Sep 2017 04:59:45 GMT):
see also: http://intelledger.github.io/architecture/poet.html#population-size-and-local-mean-computation
FlyingTiger (Wed, 13 Sep 2017 10:27:44 GMT):
@Dan thanks. I'll look into the document, then to ask more.
mfford (Wed, 13 Sep 2017 19:55:33 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, September 14th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, September 14th
Time: 10-11am CDT
We are using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
Agenda:
1. Introductions-Mark Ford
2. Hyperledger Sawtooth Unit Testing with Mock Validator –Ryan Banks
3. Open Forum
leogzl (Fri, 15 Sep 2017 11:17:34 GMT):
Has joined the channel.
szhman (Fri, 15 Sep 2017 17:06:38 GMT):
Has joined the channel.
smagne (Fri, 15 Sep 2017 17:14:57 GMT):
Hello, I'm using sawtooth docker compose and I want to know if there is a way to execute docker-compose down an up without losing data
smagne (Fri, 15 Sep 2017 17:16:08 GMT):
I create a volume container and I'm using it in the definition of the validator to store the files
smagne (Fri, 15 Sep 2017 17:16:43 GMT):
This is the error.
```
writing file: /etc/sawtooth/keys/validator.priv
writing file: /etc/sawtooth/keys/validator.pub
creating key directory: /root/.sawtooth/keys
writing file: /root/.sawtooth/keys/my_key.priv
writing file: /root/.sawtooth/keys/my_key.pub
Generated config-genesis.batch
Processing config-genesis.batch...
Generating /var/lib/sawtooth/genesis.batch
[2017-09-15 16:59:53.984 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
[2017-09-15 16:59:53.985 INFO validator] Skipping validator config loading from non-existent config file: /etc/sawtooth/validator.toml
[2017-09-15 16:59:53.985 INFO keys] Loading signing key: /etc/sawtooth/keys/validator.priv
[2017-09-15 16:59:53.986 INFO cli] config [path]: config_dir = "/etc/sawtooth"
[2017-09-15 16:59:53.987 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
[2017-09-15 16:59:53.987 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
[2017-09-15 16:59:53.987 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
[2017-09-15 16:59:53.987 INFO cli] config [path]: policy_dir = "/etc/sawtooth/policy"
[2017-09-15 16:59:53.987 WARNING cli] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.
[2017-09-15 16:59:53.988 DEBUG core] database file is /var/lib/sawtooth/merkle-00.lmdb
[2017-09-15 16:59:53.988 DEBUG core] state delta store file is /var/lib/sawtooth/state-deltas-00.lmdb
[2017-09-15 16:59:53.989 DEBUG core] block store file is /var/lib/sawtooth/block-00.lmdb
[2017-09-15 16:59:53.992 DEBUG selector_events] Using selector: ZMQSelector
[2017-09-15 16:59:53.993 INFO interconnect] Listening on tcp://eth0:4004
[2017-09-15 16:59:53.993 DEBUG dispatch] Added send_message function for connection ServerThread
[2017-09-15 16:59:53.994 DEBUG genesis] genesis_batch_file: /var/lib/sawtooth/genesis.batch
[2017-09-15 16:59:53.994 DEBUG genesis] chain_head: 2f47fdaf(0, S:307544ad, P:00000000)
[2017-09-15 16:59:53.995 DEBUG genesis] block_chain_id: 2f47fdaf4dd07d8e22d884554b0c287360d5d039b1c529200f0e652404486bf42d90f15ec4ce7f882dab59362c40c745e6b89ca5468d210322999ca0c5ed6d4a
[2017-09-15 16:59:53.995 ERROR cli] Cannot have a genesis_batch_file and an existing chain
[2017-09-15 16:59:53.995 DEBUG dispatch] Attempted to remove send_message function for connection ServerThread, but no send_message function was registered
[2017-09-15 16:59:53.995 DEBUG dispatch] Removed send_message function for connection ServerThread
[2017-09-15 16:59:54.396 INFO core] remaining threads: _ContextReader (_ContextReader), InterconnectThread-1 (Thread), _ContextWriter (_ContextWriter)
[2017-09-15 16:59:56.399 INFO core] All threads have been stopped and joined
```
boydjohnson (Fri, 15 Sep 2017 17:31:48 GMT):
Yeah, it is possible. the genesis commands that are run in the genesis validator should be run in another container that the genesis validator has `volumes_from'. In the genesis container, add to `volumes`, `- /var/lib/sawtooth`.
boydjohnson (Fri, 15 Sep 2017 17:31:48 GMT):
Yeah, it is possible. the genesis commands that are run in the genesis validator should be run in another container that the genesis validator has `volumes_from`. In the genesis container, add to `volumes`, `- /var/lib/sawtooth`.
smagne (Fri, 15 Sep 2017 17:33:22 GMT):
hey @boydjohnson thanks for your help
smagne (Fri, 15 Sep 2017 17:33:29 GMT):
this is my docker-compose file
smagne (Fri, 15 Sep 2017 17:35:05 GMT):
because I already do that but when I do `docker-compose down` and I do `docker-compose up -d` I'm getting that error [ ](https://chat.hyperledger.org/channel/sawtooth?msg=7rwcanGrPqx6d3jW9)
smagne (Fri, 15 Sep 2017 17:36:46 GMT):
```
sawtooth-data-storage:
image: registry.gitlab.com/exo-dev/sawtooth-data-container:latest
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "4004:4004"
depends_on:
- sawtooth-data-storage
volumes: [
'sawtooth-data-storage:/var/lib/sawtooth'
]
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
\""
```
boydjohnson (Fri, 15 Sep 2017 17:37:53 GMT):
Oh, I forgot with the setup that I described docker-compose down and docker-compose up won't work but `docker
boydjohnson (Fri, 15 Sep 2017 17:38:17 GMT):
Let me send you an example yaml file.
boydjohnson (Fri, 15 Sep 2017 17:40:10 GMT):
Rocket chat won't let me attach the yaml file. I will just post it.
boydjohnson (Fri, 15 Sep 2017 17:40:46 GMT):
```services:
genesis-0:
image: sawtooth-validator:$ISOLATION_ID
volumes:
- $SAWTOOTH_CORE:/project/sawtooth-core
- /etc/sawtooth/keys
- /var/lib/sawtooth
expose:
- 4004
- 8800
command: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth config genesis \
-k /etc/sawtooth/keys/validator.priv \
-o config-genesis.batch && \
sawtooth config proposal create \
-k /etc/sawtooth/keys/validator.priv \
sawtooth.consensus.algorithm=poet \
sawtooth.poet.target_wait_time=25 \
sawtooth.poet.initial_wait_time=30 \
sawtooth.poet.report_public_key_pem=\
\\\"$$(cat /project/sawtooth-core/consensus/poet/simulator/packaging/simulator_rk_pub.pem)\\\" \
sawtooth.poet.valid_enclave_measurements=$$(poet enclave measurement) \
sawtooth.poet.valid_enclave_basenames=$$(poet enclave basename) \
-o config.batch && \
poet genesis -o poet.batch && \
sawtooth admin genesis \
config-genesis.batch config.batch poet.batch
\""
validator-0:
image: sawtooth-validator:$ISOLATION_ID
volumes:
- $SAWTOOTH_CORE:/project/sawtooth-core
volumes_from:
- genesis-0
expose:
- 4004
- 8800
command: "bash -c \"\
sleep 7 && \
sawtooth-validator -v \
--endpoint tcp://validator-0:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
environment:
PYTHONPATH: "/project/sawtooth-core/consensus/poet/common:\
/project/sawtooth-core/consensus/poet/simulator:\
/project/sawtooth-core/consensus/poet/core"
stop_signal: SIGKILL
validator-1:
image: sawtooth-validator:$ISOLATION_ID
volumes:
- $SAWTOOTH_CORE:/project/sawtooth-core
expose:
- 4004
- 8800
depends_on:
- validator-0
command: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth-validator -v \
--endpoint tcp://validator-1:8800 \
--peers tcp://validator-0:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
environment:
PYTHONPATH: "/project/sawtooth-core/consensus/poet/common:\
/project/sawtooth-core/consensus/poet/simulator:\
/project/sawtooth-core/consensus/poet/core"
stop_signal: SIGKILL
validator-2:
image: sawtooth-validator:$ISOLATION_ID
volumes:
- $SAWTOOTH_CORE:/project/sawtooth-core
expose:
- 4004
- 8800
depends_on:
- validator-0
- validator-1
command: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth-validator -v \
--endpoint tcp://validator-2:8800 \
--peers tcp://validator-0:8800,tcp://validator-1:8800
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
environment:
PYTHONPATH: "/project/sawtooth-core/consensus/poet/common:\
/project/sawtooth-core/consensus/poet/simulator:\
/project/sawtooth-core/consensus/poet/core"
stop_signal: SIGKILL```
boydjohnson (Fri, 15 Sep 2017 17:41:34 GMT):
That is a three validator network where the three validators can be docker started and stopped.
smagne (Fri, 15 Sep 2017 17:46:23 GMT):
Thanks again @boydjohnson
boydjohnson (Fri, 15 Sep 2017 17:46:41 GMT):
You're welcome, @smagne
smagne (Fri, 15 Sep 2017 17:46:44 GMT):
this is my yaml
```
version: "3"
services:
sawtooth-data-storage:
image: registry.gitlab.com/exo-dev/sawtooth-data-container:latest
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "4004:4004"
depends_on:
- sawtooth-data-storage
volumes: [
'sawtooth-data-storage:/var/lib/sawtooth'
]
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
\""
settings-tp:
image: hyperledger/sawtooth-tp_settings:latest
container_name: sawtooth-settings-tp-default
expose:
- 4004
depends_on:
- validator
entrypoint: settings-tp -vv tcp://validator:4004
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "8080:8080"
depends_on:
- validator
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080
sawtooth-payment-processor:
image: registry.gitlab.com/exo-dev/sawtooth-payment-processor:fix-tests-processor
container_name: sawtooth-payment-processor
environment:
- SAWTOOTH_PAYMENT_PROCESSOR_FAMILY=exosp
- SAWTOOTH_PAYMENT_PROCESSOR_CREATION=0
- SAWTOOTH_PAYMENT_PROCESSOR_ISSUANCE=1
- SAWTOOTH_PAYMENT_PROCESSOR_TRANSFERENCE=2
- SAWTOOTH_PAYMENT_PROCESSOR_MIN_VALUE=0
- SAWTOOTH_PAYMENT_PROCESSOR_MAX_VALUE=4294967295
- SAWTOOTH_PAYMENT_PROCESSOR_BALANCE=100
- SAWTOOTH_PAYMENT_PROCESSOR_VALIDATOR_URL=tcp://validator:4004
- SAWTOOTH_PAYMENT_PROCESSOR_FAMILY_VERSION=1.0
- SAWTOOTH_PAYMENT_PROCESSOR_FAMILY_ENCODING=application/protobuf
- SAWTOOTH_PAYMENT_PROCESSOR_TRANSFERENCE_NAMESPACE=TransactionPayload
- SAWTOOTH_PAYMENT_PROCESSOR_WALLET_NAMESPACE=WalletPayload
- NODE_ENV=develop
depends_on:
- settings-tp
- rest-api
volumes:
sawtooth-data-storage:
```
smagne (Fri, 15 Sep 2017 17:48:55 GMT):
I should add a validator container with the genesis and another validator which is the one that would be able to stop and start
smagne (Fri, 15 Sep 2017 17:49:12 GMT):
and also I must share the volumes between them
boydjohnson (Fri, 15 Sep 2017 17:51:00 GMT):
Not exactly, Add a genesis container where the genesis commands, ```sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch``` are run and then share volumes from this container with the validator container.
smagne (Fri, 15 Sep 2017 17:54:13 GMT):
The container would be something like this right:
```
genesis-concainer:
image: hyperledger/sawtooth-validator:latest
volumes:
- 'sawtooth-data-storage:/project/sawtooth-core'
- /etc/sawtooth/keys
- /var/lib/sawtooth
expose:
- 4004
- 8800
command: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch
\""
```
smagne (Fri, 15 Sep 2017 17:54:13 GMT):
The container would be something like this right:
```
genesis-container:
image: hyperledger/sawtooth-validator:latest
volumes:
- 'sawtooth-data-storage:/project/sawtooth-core'
- /etc/sawtooth/keys
- /var/lib/sawtooth
expose:
- 4004
- 8800
command: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch
\""
```
boydjohnson (Fri, 15 Sep 2017 18:00:24 GMT):
Yeah, looks right.
smagne (Fri, 15 Sep 2017 18:04:21 GMT):
great thanks
smagne (Fri, 15 Sep 2017 19:44:53 GMT):
works great @boydjohnson great support guys cheers!!!
kelly_ (Fri, 15 Sep 2017 21:39:24 GMT):
@smagne i'm not sure if we asked, but is your sawtooth work personal or for a company, also any thoughts on submitting your TP back into open source?
Meai1 (Sat, 16 Sep 2017 05:47:24 GMT):
What incentive to people have for running sawtooth nodes? Blockchain in my opinion is so successful because it gives people incentive to participate, is there anything like that in sawtooth?
Meai1 (Sat, 16 Sep 2017 05:47:34 GMT):
do*
zac (Mon, 18 Sep 2017 14:33:33 GMT):
There are a couple of points to make in response to that:
zac (Mon, 18 Sep 2017 14:33:33 GMT):
There are ~~a couple of~~ three points I would make in response to that:
zac (Mon, 18 Sep 2017 14:35:00 GMT):
1) Sawtooth is general purpose and almost entirely unopinionated about how you use it. There is no built in incentive to run nodes, but there is also nothing preventing you from implementing some incentive scheme if it suits your purpose.
zac (Mon, 18 Sep 2017 14:37:57 GMT):
2) Sawtooth is being developed with "consortiums" in mind in particular. Which is to say, small groups of interested parties, rather than one global network. Imagine a few dozen banks, that all need to agree on some data, but don't trust each other to maintain that data. They could deploy a semi-private blockchain using Sawtooth, which would enforce trust for them. In this case the incentive would be their own business interests.
zac (Mon, 18 Sep 2017 14:40:05 GMT):
3) PoET is a novel consensus algorithm available through Sawtooth which uses negligible amounts of CPU (unlike more traditional PoW mechanisms). This makes it fairly trivial to run a Sawtooth node, and largely obviates the need for some sort of direct payment.
zac (Mon, 18 Sep 2017 14:40:42 GMT):
@Meai1 ^
jparth11 (Mon, 18 Sep 2017 14:45:53 GMT):
Has joined the channel.
HintikkaKimmo (Mon, 18 Sep 2017 16:33:33 GMT):
Has joined the channel.
JamesKempf (Mon, 18 Sep 2017 20:28:30 GMT):
Hi, I'm trying to get a network of validators up, and I would like them to find their peers dynamically. The only thing that seems to work though is to have one control and use the -s command line argument to specify the control for the peers. I have both the control and the peers coming up with -P dynamic, and both are advertising their endpoints with -E. Am I missing something?
Southside (Mon, 18 Sep 2017 20:56:15 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=B5EC33YavTsGJK9Aw) @zac
Southside (Mon, 18 Sep 2017 21:01:25 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=B5EC33YavTsGJK9Aw) @zac
Thank yo for an informative post.
You say "PoET is a novel consensus algorithm available through Sawtooth which uses negligible amounts of CPU (unlike more traditional PoW mechanisms). "
Where can I get a clue about the actual amount of computation work needed?
We know that for now PoET can only be impemeted on late model Intel mobos with the correct SGX etensions enabled (Is this correct?) However the PoET consensus seems to depend on the use of a TEE(Trusted Execution Environment) which many if not most chis have these days inclusing mobiles.
Could a PoET node conceivably run on a mobile phone? If the computation load was sufficiently low?
Southside (Mon, 18 Sep 2017 21:01:25 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=B5EC33YavTsGJK9Aw) @zac
Thank you for an informative post.
You say "PoET is a novel consensus algorithm available through Sawtooth which uses negligible amounts of CPU (unlike more traditional PoW mechanisms). "
Where can I get a clue about the actual amount of computation work needed?
We know that for now PoET can only be impemeted on late model Intel mobos with the correct SGX etensions enabled (Is this correct?) However the PoET consensus seems to depend on the use of a TEE(Trusted Execution Environment) which many if not most chis have these days inclusing mobiles.
Could a PoET node conceivably run on a mobile phone? If the computation load was sufficiently low?
Southside (Mon, 18 Sep 2017 21:01:25 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=B5EC33YavTsGJK9Aw) @zac
Thank you for an informative post.
You say "PoET is a novel consensus algorithm available through Sawtooth which uses negligible amounts of CPU (unlike more traditional PoW mechanisms). "
Where can I get a clue about the actual amount of computation work needed?
We know that for now PoET can only be impemeted on late model Intel mobos with the correct SGX extensions enabled (Is this correct?) However the PoET consensus seems to depend on the use of a TEE(Trusted Execution Environment) which many if not most chis have these days inclusing mobiles.
Could a PoET node conceivably run on a mobile phone? If the computation load was sufficiently low?
zac (Mon, 18 Sep 2017 21:04:17 GMT):
I don't really know the details of how PoET works, but its CPU usage is trivial. The other business of a validator is going to be what limits what machine you might run it on.
zac (Mon, 18 Sep 2017 21:04:17 GMT):
I don't really know the details of how PoET works, but its CPU usage is trivial. The other business of a validator is going to be creates any performance bottlenecks that might limit what machines you could run one on.
zac (Mon, 18 Sep 2017 21:04:17 GMT):
I don't really know the details of how PoET works, but its CPU usage is trivial. The other business of a validator is going to be what creates any performance bottlenecks that might limit what machines you could run one on.
zac (Mon, 18 Sep 2017 21:05:50 GMT):
But yes, you do need a TEE, of which SGX is an example.
zac (Mon, 18 Sep 2017 21:05:50 GMT):
But yes, if you are running PoET, you do need a TEE, of which SGX is an example (consensus in Sawtooth is pluggable, so you could potentially deploy a network _without_ PoET too).
zac (Mon, 18 Sep 2017 21:06:24 GMT):
(if you are running PoET, Sawtooth features pluggable consensus, and could potentially run something else)
zac (Mon, 18 Sep 2017 21:06:51 GMT):
I am not sure how widespread TEE's are, or if there are any on mobile chips.
zac (Mon, 18 Sep 2017 21:07:16 GMT):
SGX specifically is featured in a lot of newer hardware, including some budget PC's like NUCs.
boydjohnson (Mon, 18 Sep 2017 21:17:11 GMT):
6th gen Intel chips are needed for SGX. I don't know (but could just be ignorant) of phones with 6th gen Intel chips.
Meai1 (Tue, 19 Sep 2017 06:00:52 GMT):
So I was looking into installing some kind of SGX SDK from intel but there are lots of signup forms and agreements and all kinds of legal stuff. SGX is fully commercial? They dont even show a price tag...
Meai1 (Tue, 19 Sep 2017 06:01:23 GMT):
I take it that I cant actually run sawtooth without paying for SGX from Intel which may or may not be affordable
raymundl (Tue, 19 Sep 2017 06:26:47 GMT):
Has joined the channel.
HintikkaKimmo (Tue, 19 Sep 2017 08:00:21 GMT):
@Meai1 good catch, I was just thinking to take sawtooth for a spin... Looking at SGX SDK docs it indeed looks like you need a commercial agreement with unknown future cost.
leogzl (Tue, 19 Sep 2017 11:04:06 GMT):
it may be a silly question, i would like to know to generate pdf of sawtooth doc on https://intelledger.github.io/contents.html so i can test it offline.
agunde (Tue, 19 Sep 2017 13:46:47 GMT):
SGX is only required to run PoET(consensus algorithm), but there is a poet simulator that allows you to test out poet without SGX. The consensus algorithm is pluggable in Sawtooth and therefore Sawtooth does not require SGX to be used.
agunde (Tue, 19 Sep 2017 13:47:28 GMT):
@Meai1 @HintikkaKimmo ^
boydjohnson (Tue, 19 Sep 2017 14:13:34 GMT):
@leogzl This pdf is from our build process https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/master/lastSuccessfulBuild/artifact/docs/build/latex/sawtooth.pdf I can also give you commands to build the docs into pdfs locally if that is wanted.
Meai1 (Tue, 19 Sep 2017 14:55:35 GMT):
by "actually" running, I meant of course in production
zac (Tue, 19 Sep 2017 15:08:53 GMT):
If you wanted to stand up a production Sawtooth network today (and need Byzantine fault tolerance), it would need to be built with validators running on PCs with 6th gen intel chips
zac (Tue, 19 Sep 2017 15:09:15 GMT):
There is not any licensing fees or anything as far as I know
zac (Tue, 19 Sep 2017 15:09:15 GMT):
There are not any licensing fees or anything as far as I know
zac (Tue, 19 Sep 2017 15:09:37 GMT):
Also, tomorrow that answer will likely be different
zac (Tue, 19 Sep 2017 15:10:33 GMT):
Both because there will be Trusted Execution Environments besides SGX available for PoET
kelly_ (Tue, 19 Sep 2017 15:10:38 GMT):
There are no fees to run sgx applications
zac (Tue, 19 Sep 2017 15:11:03 GMT):
And because there will be consensus algorithms with Byzantine fault tolerance available for Sawtooth
zac (Tue, 19 Sep 2017 15:11:03 GMT):
And because there will be other consensus algorithms with Byzantine fault tolerance available for Sawtooth
kelly_ (Tue, 19 Sep 2017 15:11:10 GMT):
There are no fees to develop sgx applications, however a license agreement must be signed staying that you will now develop malicious software
zac (Tue, 19 Sep 2017 15:11:28 GMT):
I think you mean _not_
kelly_ (Tue, 19 Sep 2017 15:12:17 GMT):
@Meai1 @HintikkaKimmo
kelly_ (Tue, 19 Sep 2017 15:12:42 GMT):
Yep, autocorrect :)
Dan (Tue, 19 Sep 2017 15:26:56 GMT):
haha, yes you MUST make malware!
Dan (Tue, 19 Sep 2017 15:27:29 GMT):
to reiterate... (and it is a common question), you do NOT need SGX to run sawtooth.
Dan (Tue, 19 Sep 2017 15:28:39 GMT):
IF you want to use the SGX hardened version of poet you may use SGX.
But you can run PoET without SGX (with CFT behavior)
JamesKempf (Tue, 19 Sep 2017 17:03:35 GMT):
Okaaay, I take it from the fact that nobody answered my question that it is not possible to have a network of validators self configure and set up dynamically without hard-coding the IP address or host name into the command line.
JamesKempf (Tue, 19 Sep 2017 17:04:25 GMT):
PS: If you want to run PoET with SGX, try running it in Azure: http://tinyurl.com/ychfyu4w
jsmitchell (Tue, 19 Sep 2017 17:04:40 GMT):
@JamesKempf I'm not sure I understand your question
jsmitchell (Tue, 19 Sep 2017 17:04:51 GMT):
are you looking for some kind of local network beacon support?
jsmitchell (Tue, 19 Sep 2017 17:05:25 GMT):
with dynamic peering, you need to provide any new node you start up a --seeds parameter which includes at least one well known endpoint already connected to the network
JamesKempf (Tue, 19 Sep 2017 17:06:56 GMT):
Right, that's what I was trying to find out, whether you needed the --seeds parameter. That means you need to use some kind of service discovery protocol like Consul to find out an existing node. A node can't simply send out a gossip message on the ZeroMQ bus looking for seeds, right?
jsmitchell (Tue, 19 Sep 2017 17:07:40 GMT):
send it to whom?
jsmitchell (Tue, 19 Sep 2017 17:07:56 GMT):
the assumption is that these nodes are not on a local/broadcast network
JamesKempf (Tue, 19 Sep 2017 17:09:34 GMT):
OK, thanx. I guess you could use multicast. Or maybe multicast on unicast, but I get the point, it would involve some complex configuration. I guess I need to add a layer on top of the validator startup that takes care of finding the address.
amundson (Tue, 19 Sep 2017 17:28:54 GMT):
@JamesKempf can you describe your use-case a bit? in most of our discussions, we assume a distributed network (nodes at different sites, etc.); but it sounds like you are wanting local discovery, presumably with everything running on the same subnet?
JamesKempf (Tue, 19 Sep 2017 18:09:57 GMT):
Hi, @amundson, sorry for the delay. Use case is a cloud tenant management system built on top of Sawtooth Burrow. The blockchain will be mostly running inside a data center. So the validators will have multicast available.
amundson (Tue, 19 Sep 2017 18:12:16 GMT):
would you be concerned about running multiple validator networks and accidentally joining the wrong one? for example, leakage between dev/test/prod networks?
JamesKempf (Tue, 19 Sep 2017 18:13:45 GMT):
Right, that's a concern. I suppose we could use some kind of service discovery, like Consul or DNSServRec to configure up the network.
amundson (Tue, 19 Sep 2017 18:18:21 GMT):
a correctly operating validator won't switch networks (genesis block will never be changed). so the natural network identifier is the genesis block id. You can create a file in /var/lib/sawtooth/ to lock a node to a specific genesis block id (if this isn't implemented, is certainly the intent) so that it won't accidentally join the wrong network. But, that is about the same amount of effort (configuring that file) as specifying a list of seed peers.
JamesKempf (Tue, 19 Sep 2017 18:20:47 GMT):
Thanx, I will try that. I think that would give me a way to use the actual blockchain as the ID rather than the IP address which is really what I want.
JamesKempf (Tue, 19 Sep 2017 18:21:37 GMT):
How to I get the genesis block ID? Using the sawtooth cli?
amundson (Tue, 19 Sep 2017 18:23:20 GMT):
as a future considering, some point we want to implement state checkpointing, where we would (essentially) redefine the genesis block so validators don't need the complete chain history. maybe we retain that genesis block id though when we implement that feature. probably safe to ignore for now.
amundson (Tue, 19 Sep 2017 18:23:44 GMT):
yes, 'sawtooth block list', the earliest block
JamesKempf (Tue, 19 Sep 2017 18:24:06 GMT):
great thanx! :slight_smile:
amundson (Tue, 19 Sep 2017 18:25:07 GMT):
potentially, this could be added as another peering method in addition to static/dynamic
amundson (Tue, 19 Sep 2017 18:28:10 GMT):
we should update the sign-off check to ignore merge commits that have no content
amundson (Tue, 19 Sep 2017 18:29:21 GMT):
keep tripping over that check with feature branch merging activity
DarshanBc (Wed, 20 Sep 2017 06:42:17 GMT):
Has joined the channel.
DarshanBc (Wed, 20 Sep 2017 06:43:35 GMT):
can anybody explain in short or post a link why Sawtooth why not fabric or any other hyperledger platform
thomas_p (Wed, 20 Sep 2017 11:41:00 GMT):
Has joined the channel.
zac (Wed, 20 Sep 2017 13:59:20 GMT):
I don't know of anybody who has written up a comparison
zac (Wed, 20 Sep 2017 14:00:29 GMT):
Sawtooth and Fabric attempt to solve essentially the same problem, so there will be many similarities
zac (Wed, 20 Sep 2017 14:00:58 GMT):
In my opinion Sawtooth does a better job of being modular and unopinionated
zac (Wed, 20 Sep 2017 14:01:42 GMT):
It's easier to set up a Sawtooth blockchain for a wide variety of use cases.
zac (Wed, 20 Sep 2017 14:02:29 GMT):
Sawtooth also has access to the PoET consensus algorithm, which gives you Byzantine fault tolerance without all the CPU usage.
zac (Wed, 20 Sep 2017 14:03:30 GMT):
And it better supports a variety of languages and standards, including Python, JavaScript, Go, HTTP/JSON, and ZMQ/Protobuf
zac (Wed, 20 Sep 2017 14:04:33 GMT):
You can write an project for Sawtooth in just about any language. I think for Fabric you _have_ to use Go? Maybe that's not true anymore.
zac (Wed, 20 Sep 2017 14:07:10 GMT):
In Fabric's defense, they have been around a little longer, and there are some nifty toolsets that people have built for it like #composer. I don't think that advantage will exist forever though.
Dan (Wed, 20 Sep 2017 20:39:15 GMT):
What version of vagrant / ubuntu are other core devs on?
```==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: A newer version of the box 'ubuntu/xenial64' is available! You currently
==> default: have version '20161220.0.0'. The latest is version '20170919.0.0'. Run
==> default: `vagrant box update` to update.
```
Dan (Wed, 20 Sep 2017 20:49:46 GMT):
(presupposes anyone is still using vagrant :) )
agunde (Wed, 20 Sep 2017 20:50:38 GMT):
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: A newer version of the box 'ubuntu/xenial64' is available! You currently
==> default: have version '20170624.0.0'. The latest is version '20170919.0.0'. Run
==> default: `vagrant box update` to update.
agunde (Wed, 20 Sep 2017 20:50:47 GMT):
This is what I'm on.
Dan (Wed, 20 Sep 2017 21:16:31 GMT):
Thx
DarshanBc (Thu, 21 Sep 2017 03:48:29 GMT):
@zac Thank you is there any sample apps available so that I go through the work flow
DarshanBc (Thu, 21 Sep 2017 03:48:29 GMT):
@zac Thank you is there any sample apps available so that I can go through the work flow
Dan (Thu, 21 Sep 2017 13:25:59 GMT):
@DarshanBc check out https://intelledger.github.io/app_developers_guide.html
Dan (Thu, 21 Sep 2017 13:27:41 GMT):
Some demo links also here https://www.coindesk.com/intel-demos-seafood-tracking-sawtooth-lake-blockchain/
Southside (Thu, 21 Sep 2017 14:26:55 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=CitAtZGGSgbWjWxrJ) @zac [ ](https://chat.hyperledger.org/channel/sawtooth?msg=CitAtZGGSgbWjWxrJ) @zac
Southside (Thu, 21 Sep 2017 14:26:55 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=CitAtZGGSgbWjWxrJ) @zac [ ] In this case we mostassuredly do want to use PoET.
Southside (Thu, 21 Sep 2017 14:26:55 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=CitAtZGGSgbWjWxrJ) @zac [ ] In this case we most assuredly DO want to use PoET.
TEEs are available on a lot of hardware these days https://en.wikipedia.org/wiki/Trusted_execution_environment
I can understand why IBM would implement on Intel first though
zac (Thu, 21 Sep 2017 14:34:19 GMT):
@Southside Yeah. I haven't done much deployment work on Sawtooth, so I'm not clear on what the story is right now in regards to deploying a PoET network with a non-SGX TEE. I don't know of anyone that has done it yet. That said, I believe the long term plan is for PoET not to be tied to SGX.
zac (Thu, 21 Sep 2017 14:36:17 GMT):
@DarshanBc The documentation Dan linked to is pretty good, and those demos will give you an idea of what has been done with Sawtooth. Those were written against an older version, so the details of their implementation no longer apply, but it should still give you an idea.
zac (Thu, 21 Sep 2017 14:38:02 GMT):
There is a new demo similar to those older ones called Track and Trade in the works. It is being written against the current Sawtooth design, and will be done at the end of the month, so you can check that out then.
zac (Thu, 21 Sep 2017 14:40:01 GMT):
And of course, IntKey and Xo, while very simple, are runnable CLI apps built on top of Sawtooth. They are written in a variety of languages, so if you are looking for a place to start, those would be good: https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples
Dan (Thu, 21 Sep 2017 15:24:06 GMT):
@agunde .. I'm speaking w/ someone at the hackfest atm on security and sawtooth's surface.. are any of the new permissioning docs up?
agunde (Thu, 21 Sep 2017 15:25:42 GMT):
Yes, Here is the Network permissioning doc http://intelledger.github.io/0.8/architecture/validator_network.html#network-permissioning
agunde (Thu, 21 Sep 2017 15:26:23 GMT):
How to use the transactor and validator key permissioning http://intelledger.github.io/0.8/sysadmin_guide/permissioning.html
agunde (Thu, 21 Sep 2017 15:27:02 GMT):
And the Identity Transaction Family Specification http://intelledger.github.io/0.8/transaction_family_specifications/identity_transaction_family.html
agunde (Thu, 21 Sep 2017 15:27:33 GMT):
@Dan ^
Dan (Thu, 21 Sep 2017 15:51:05 GMT):
Thanks Andi! @dhuseby ^
Dan (Thu, 21 Sep 2017 16:59:49 GMT):
At hackfest in security review discussion atm. Reminder on log injection attacks. Be mindful of what you write into a log message. i.e. if you got a malformed transaction, writing that transaction into a log string would be bad. In general any string the user can dictate/influence.
DarshanBc (Fri, 22 Sep 2017 07:41:41 GMT):
Thank you @zac and @Dan
leogzl (Fri, 22 Sep 2017 07:46:40 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=9tTKwzRJGTgsjSNHb) @boydjohnson Thank you.. It will be great, please enlighten me.
boydjohnson (Fri, 22 Sep 2017 15:57:55 GMT):
@leogzl If you are using docker you can run `docker build . -f ci/sawtooth-build-docs -t sawtooth-build-docs:latest` and `docker run --rm -v $(pwd):/project/sawtooth-core sawtooth-build-docs:latest` after having run `./bin/build_all -l python` from the sawtooth-core repo.
Dan (Fri, 22 Sep 2017 16:03:39 GMT):
@sawtooth-enthusiasts... @markparz from Fabric team just suggested we showup at a hackfest at Duke... I think he said Friday next week. If someone is close / wants to be close that would be cool.
markparz (Fri, 22 Sep 2017 16:03:39 GMT):
Has joined the channel.
danconway (Fri, 22 Sep 2017 16:14:33 GMT):
Has joined the channel.
markparz (Fri, 22 Sep 2017 16:16:31 GMT):
Thanks @Dan yes.... here is the information I just found out on the event ....This event is being hosted by the 501c3 nonprofit with (Lincoln Network). Lincoln Network has hosted many events like this one in the past, working with sponsors such as Microsoft, Google, Facebook, AT&T, and others. The event is being co-hosted by Duke Law's Center on Law and Technology. They have sectioned off the panels on Friday night to discuss cryptocurrency and other blockchain applications. Would love to have Hyperledger folks to do a presentation. Additionally, welcome any development resources would like to offer the hackathon teams; during the Saturday of the hackathon, we are hosting a select few to serve as "tech kiosks". The kiosks will serve as a place where our hackers can get blockchain resources, as well as talk to those working specifically within the industry. Hyperledger has such a presence with your blockchain efforts, and giving access to some of that would only amplify the final products produced by those participating in the event. If you have other ideas, we are completely open to them.
markparz (Fri, 22 Sep 2017 16:17:24 GMT):
The times I have found out are about 6pm-9 or 10pm Friday and then 9-9 on Saturday 9/29 & 9/30
Dan (Fri, 22 Sep 2017 16:23:56 GMT):
Thanks @markparz !
Dan (Fri, 22 Sep 2017 16:25:32 GMT):
Chicago hackfest news... we are going to do hands on sawtooth session this afternoon. I think after this morning's session we are sure to have lots of Seth questions. @tkuhrt is going to launch our zoom session. If someone is available to help field questions that would be cool. I would even be inclined to buy beverage(s) for anyone who helps out.
leogzl (Fri, 22 Sep 2017 18:02:17 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=niw9MEhGBwZXpiccj) @boydjohnson Thank you boyjohnson
leogzl (Fri, 22 Sep 2017 18:02:37 GMT):
I am exploring sawtooth now and really need time to understand the concept and how it works.
boydjohnson (Fri, 22 Sep 2017 18:02:59 GMT):
You're welcome @leogzl
tkuhrt (Fri, 22 Sep 2017 18:25:38 GMT):
Has anyone seen the following error. This is an error that we are getting at the Hackfest.
ERROR: for sawtooth-tp_settings-default Cannot start service tp_settings: oci runtime error: container_linux.go:262: starting container process caused "exec: \"tp_settings\": executable file not found in $PATH"
Starting sawtooth-tp_intkey_python-default ... error
zachgoll (Fri, 22 Sep 2017 18:26:18 GMT):
Has joined the channel.
crow15 (Fri, 22 Sep 2017 18:26:28 GMT):
i'm getting that to, on mac
jsmitchell (Fri, 22 Sep 2017 18:27:46 GMT):
where did you get the docker containers?
tkuhrt (Fri, 22 Sep 2017 18:28:28 GMT):
Just using the https://sawtooth.hyperledger.org/docs/app_developers_guide/sawtooth-default.yaml
jsmitchell (Fri, 22 Sep 2017 18:28:39 GMT):
ok, thanks
jsmitchell (Fri, 22 Sep 2017 18:28:48 GMT):
@rbuysse ^
Dan (Fri, 22 Sep 2017 18:30:29 GMT):
Someone also got a file not found when the script tries to execute `validator`
will see if we can get the exact error posted here.
sidrmsh (Fri, 22 Sep 2017 18:32:13 GMT):
Has joined the channel.
Dan (Fri, 22 Sep 2017 18:33:43 GMT):
For those in Chicago... Link to get started: https://sawtooth.hyperledger.org/docs/app_developers_guide.html
conroydave (Fri, 22 Sep 2017 18:37:50 GMT):
Has joined the channel.
conroydave (Fri, 22 Sep 2017 18:37:54 GMT):
good afternoon all
conroydave (Fri, 22 Sep 2017 18:37:58 GMT):
running docker-compose up from the dev guide
conroydave (Fri, 22 Sep 2017 18:38:02 GMT):
mac os , docker install
conroydave (Fri, 22 Sep 2017 18:38:06 GMT):
getting error
conroydave (Fri, 22 Sep 2017 18:38:18 GMT):
```
ERROR: for sawtooth-tp_xo_python-default Cannot start service tp_xo_python: oci runtime error: container_linux.go:262: starting container process caused "exec: \"tp_xo_python\": executable file not found in $PATH"
Creating sawtooth-rest_api-default ... error
ERROR: for sawtooth-rest_api-default Cannot start service rest_api: oci runtime error: container_linux.go:262: starting container process caused "exec: \"rest_api\": executable file not found in $PATH"
Creating sawtooth-tp_settings-default ... error
```
conroydave (Fri, 22 Sep 2017 18:38:47 GMT):
```
writing file: /etc/sawtooth/keys/validator.priv
writing file: /etc/sawtooth/keys/validator.pub
creating key directory: /root/.sawtooth/keys
writing file: /root/.sawtooth/keys/my_key.priv
writing file: /root/.sawtooth/keys/my_key.pub
Generated config-genesis.batch
Processing config-genesis.batch...
Generating /var/lib/sawtooth/genesis.batch
bash: validator: command not found
```
conroydave (Fri, 22 Sep 2017 18:38:58 GMT):
that is the output from the validator container that fails to load from kitematic
conroydave (Fri, 22 Sep 2017 18:39:05 GMT):
doing a docker ps -a i get
conroydave (Fri, 22 Sep 2017 18:39:20 GMT):
```
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b2328a4bf48 hyperledger/sawtooth-rest_api:latest "rest_api --connec..." 22 seconds ago Created sawtooth-rest_api-default
e322728161ae hyperledger/sawtooth-tp_intkey_python:latest "tp_intkey_python ..." 22 seconds ago Created sawtooth-tp_intkey_python-default
1a96b87368b7 hyperledger/sawtooth-tp_xo_python:latest "tp_xo_python -vv ..." 22 seconds ago Created sawtooth-tp_xo_python-default
db798a2b12e9 hyperledger/sawtooth-tp_settings:latest "tp_settings -vv t..." 22 seconds ago Created sawtooth-tp_settings-default
80d667f9a9b7 hyperledger/sawtooth-validator:latest "bash -c 'sawtooth..." 23 seconds ago Exited (127) 19 seconds ago sawtooth-validator-default
```
tkuhrt (Fri, 22 Sep 2017 18:45:51 GMT):
This is the error in my Kitematic:
```
[2017-09-22 18:45:10.384 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
[2017-09-22 18:45:10.385 INFO validator] Skipping validator config loading from non-existent config file: /etc/sawtooth/validator.toml
[2017-09-22 18:45:10.387 ERROR cli] No such signing key file: /etc/sawtooth/keys/validator.priv
[2017-09-22 18:45:10.389 INFO cli] config [path]: config_dir = "/etc/sawtooth"
[2017-09-22 18:45:10.389 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
[2017-09-22 18:45:10.389 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
[2017-09-22 18:45:10.389 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
[2017-09-22 18:45:10.390 INFO cli] config [path]: policy_dir = "/etc/sawtooth/policy"
[2017-09-22 18:45:10.390 ERROR cli] Initialization errors occurred (see previous log ERROR messages), shutting down.
```
conroydave (Fri, 22 Sep 2017 18:49:21 GMT):
i just blew away *all* docker images and retried from a fresh docker compose, and a different network
conroydave (Fri, 22 Sep 2017 18:49:37 GMT):
same errors
MicBowman (Fri, 22 Sep 2017 18:52:42 GMT):
fyi... in the getting started guide... i'm installing from the ubuntu repositories... many of the command in the getting started guide are wrong
MicBowman (Fri, 22 Sep 2017 18:52:51 GMT):
validator --> sawtooth-validator
MicBowman (Fri, 22 Sep 2017 18:53:10 GMT):
rest-api --> sawtooth-rest-api
MicBowman (Fri, 22 Sep 2017 18:54:07 GMT):
tp-intkey-python --> intkey-tp-pythong
agunde (Fri, 22 Sep 2017 18:54:37 GMT):
@conroydave I think the above is the same issue you are seeing, Can you try updating the docker-compose to match the above?
sidrmsh (Fri, 22 Sep 2017 18:54:38 GMT):
Getting the same error as @conroydave
chicagotech (Fri, 22 Sep 2017 18:55:55 GMT):
Has joined the channel.
agunde (Fri, 22 Sep 2017 18:56:27 GMT):
This has been updated now https://sawtooth.hyperledger.org/docs/app_developers_guide/sawtooth-default.yaml
conroydave (Fri, 22 Sep 2017 18:58:48 GMT):
works
conroydave (Fri, 22 Sep 2017 18:58:53 GMT):
thanks Andi
conroydave (Fri, 22 Sep 2017 18:59:18 GMT):
i didnt get a chance to do a dif
conroydave (Fri, 22 Sep 2017 18:59:24 GMT):
what was the error out of curiosity
crow15 (Fri, 22 Sep 2017 19:02:09 GMT):
new json file fixed it for me
jrosmith (Fri, 22 Sep 2017 19:02:56 GMT):
Has joined the channel.
jrosmith (Fri, 22 Sep 2017 19:03:41 GMT):
Anyone run into this with the new file?
```
Joshuas-MacBook-Pro:Sawtooth jrosmith$ docker exec -it sawtooth-client-default bash
root@e882c9a852c9:/# curl http://rest_api:8080/blocks
curl: (6) Could not resolve host: rest_api
root@e882c9a852c9:/# curl http://localhost:8080/blocks
curl: (7) Failed to connect to localhost port 8080: Connection refused
```
Dan (Fri, 22 Sep 2017 19:09:02 GMT):
in the app dev guide instructions it tells you to hit rest_api instead of rest-api
Dan (Fri, 22 Sep 2017 19:10:02 GMT):
`root@75b380886502:/# curl http://rest_api:8080/blocks`
should be
Dan (Fri, 22 Sep 2017 19:10:28 GMT):
`root@75b380886502:/# curl http://rest-api:8080/blocks`
courtesy of Craig (crow15)
jrosmith (Fri, 22 Sep 2017 19:12:45 GMT):
awesome, thank you!
beheraashisa (Fri, 22 Sep 2017 19:14:13 GMT):
Has joined the channel.
Dan (Fri, 22 Sep 2017 19:14:56 GMT):
so it looks like these are all fixed in master
Dan (Fri, 22 Sep 2017 19:15:31 GMT):
so this is probably an issue of the default version of the docs is old
rbuysse (Fri, 22 Sep 2017 19:21:30 GMT):
which URL are you looking at?
JamesKempf (Fri, 22 Sep 2017 20:09:25 GMT):
Couple questions. Is there some way I can register a callback to get notification of the results of a transaction completion? Seth right now simply says that a transaction has been scheduled and you need to look in the sawtooth-validator log file to find out whether the transaction completed or not. Also, is there some way to actually look at the blockchain log (not the validator log file)? Thx.
boydjohnson (Fri, 22 Sep 2017 20:11:50 GMT):
`sawtooth block list --url
JamesKempf (Fri, 22 Sep 2017 20:12:29 GMT):
@boydjohnson, thanx!
boydjohnson (Fri, 22 Sep 2017 20:13:46 GMT):
I'm not very familiar with seth. Does it give you the batch id that the txn was submitted in?
JamesKempf (Fri, 22 Sep 2017 20:14:08 GMT):
Mmm, I think so.
boydjohnson (Fri, 22 Sep 2017 20:14:55 GMT):
You could `sawtooth batch status --url
JamesKempf (Fri, 22 Sep 2017 20:15:15 GMT):
I guess you would need to poll that in a loop, right?
boydjohnson (Fri, 22 Sep 2017 20:15:41 GMT):
There is a `--wait` but I'm not sure if it works correctly.
boydjohnson (Fri, 22 Sep 2017 20:16:10 GMT):
@zac Does `--wait` is sawtooth batch status work correctly?
boydjohnson (Fri, 22 Sep 2017 20:16:10 GMT):
@zac Does `--wait` in sawtooth batch status work correctly?
zac (Fri, 22 Sep 2017 20:37:35 GMT):
should
zac (Fri, 22 Sep 2017 20:37:48 GMT):
is it broke?
boydjohnson (Fri, 22 Sep 2017 20:38:30 GMT):
Several of our tests use a looping mechanism instead of `--wait` flags, and I thought it was because something was broken.
zac (Fri, 22 Sep 2017 20:38:50 GMT):
Could be because they predate `--wait`
boydjohnson (Fri, 22 Sep 2017 20:39:02 GMT):
ah, ok.
zac (Fri, 22 Sep 2017 20:40:18 GMT):
Also worth mentioning that `--wait` queries the REST API, so it is limited by the REST API's timeout (default 300s)
zac (Fri, 22 Sep 2017 20:40:31 GMT):
That is probably fine for a test
zac (Fri, 22 Sep 2017 20:41:08 GMT):
Some of the CLI commands use a loop internally to make `--wait` work indefinitely
zac (Fri, 22 Sep 2017 20:41:57 GMT):
(if the REST API times out and responds, but there are still pending batches, it will request statuses again, so one loop every 300s)
boydjohnson (Fri, 22 Sep 2017 20:42:12 GMT):
Ah, thanks.
jsmitchell (Fri, 22 Sep 2017 20:43:45 GMT):
there is a way to subscribe to events over websockets
jsmitchell (Fri, 22 Sep 2017 20:43:56 GMT):
that is a lot more elegant than --wait
jsmitchell (Fri, 22 Sep 2017 20:44:28 GMT):
@pschwarz @JamesKempf ^
pschwarz (Fri, 22 Sep 2017 20:45:17 GMT):
Not events, per se, but state changes
pschwarz (Fri, 22 Sep 2017 20:45:58 GMT):
Which includes information on when a block was committed, but does not include a list of transactions committed with that block
pschwarz (Fri, 22 Sep 2017 21:21:23 GMT):
There is some documentation for this: https://intelledger.github.io/rest_api/state_delta_websockets.html
JamesKempf (Fri, 22 Sep 2017 21:30:25 GMT):
I will check the docs. Being able to subscribe to state changes would certainly help since the 1 second granularity on --wait may result in substantial latency in many cases. Thanx.
San2k (Sun, 24 Sep 2017 12:10:37 GMT):
Has joined the channel.
San2k (Sun, 24 Sep 2017 16:51:16 GMT):
Hi! Could anyone give me a link on how to mount a host directory into the container of docker? So i can run sawtooth on docker
San2k (Sun, 24 Sep 2017 16:51:19 GMT):
tY
ThiagoAzevedo (Mon, 25 Sep 2017 04:46:10 GMT):
Has joined the channel.
ganbold (Mon, 25 Sep 2017 13:11:29 GMT):
Has joined the channel.
Dan (Mon, 25 Sep 2017 13:24:23 GMT):
Hi @San2k did you already see the docker stuff here? https://sawtooth.hyperledger.org/docs/app_developers_guide/docker.html
Not sure if it answers what you are looking for or not, so please ping back if it doesn't.
nicolapaoli (Mon, 25 Sep 2017 14:16:56 GMT):
Has joined the channel.
DarshanBc (Tue, 26 Sep 2017 05:47:47 GMT):
Is there any Usecase which involves a block is searched by hash or TxID
clima (Tue, 26 Sep 2017 07:04:35 GMT):
Has joined the channel.
k33p3r (Tue, 26 Sep 2017 07:11:44 GMT):
Has joined the channel.
akshaygoyal (Tue, 26 Sep 2017 13:07:23 GMT):
Has joined the channel.
Dan (Tue, 26 Sep 2017 13:16:48 GMT):
@agunde can you think of a way to make this transaction_id dynamic? I'm trying to add a positive test case but having a second valid transaction breaks this model of a single valid txn id. https://github.com/hyperledger/sawtooth-core/blob/master/consensus/poet/families/tests/validator_reg_message_factory.py#L237
Dan (Tue, 26 Sep 2017 13:17:26 GMT):
@RyanBanks you might also have an idea given your recent work with the mock validator?
RyanBanks (Tue, 26 Sep 2017 13:17:26 GMT):
Has joined the channel.
smagne (Tue, 26 Sep 2017 13:29:40 GMT):
Hello, I'm using sawtooth with the javascript sdk
smagne (Tue, 26 Sep 2017 13:31:45 GMT):
and when I post a batch I need to wait until the processor process the batch. Reading the documentation I saw that there is a wait parameter but there isn't any reference in the javascript sdk any ideas on how to use it?
agunde (Tue, 26 Sep 2017 13:51:04 GMT):
@Dan you can update the method so you can pass the txn_id along with the validator name. You would then just have to calculate the txn_id within the test.
akshaygoyal (Tue, 26 Sep 2017 13:51:45 GMT):
Hello folks! I am new to hyperledger. I want to use sawtooth lake to develop applications for supply chain management. Any documentation or leads from where I can start? Thanks in advance.
Dan (Tue, 26 Sep 2017 14:18:57 GMT):
Thanks @agunde. Is the txn id the `signature` property of `self.factory.create_tp_process_request(..)` ?
agunde (Tue, 26 Sep 2017 14:28:19 GMT):
@Dan yep
Dan (Tue, 26 Sep 2017 14:33:11 GMT):
thx!
smagne (Tue, 26 Sep 2017 15:02:30 GMT):
Hello, I'm using sawtooth with the javascript sdk
and when I post a batch I need to wait until the processor process the batch. Reading the documentation I saw that there is a wait parameter but there isn't any reference in the javascript sdk any ideas on how to use it?
zac (Tue, 26 Sep 2017 16:29:28 GMT):
@smagne I believe you are referring to the wait query parameter?
zac (Tue, 26 Sep 2017 16:30:56 GMT):
In that case, you would use it like any other query parameter, regardless of the SDK. Just have the client make an HTTP request with `?wait` at the end.
zac (Tue, 26 Sep 2017 16:40:10 GMT):
So, if your REST API is at localhost:8080, and you wanted to query batch status using the request library in Node:
```
const request = require('request')
const batchId = 'whateveryourbatchidis'
request(`http://localhost:8080/batch_status?wait&id=${batchId}`, (err, res, body) => {
console.log('Batch status:', body.data[0].status)
})
```
zac (Tue, 26 Sep 2017 16:42:20 GMT):
You can see this HTTP request used in a fairly sophisticated manner in some of the CLI's
zac (Tue, 26 Sep 2017 16:43:59 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/cli/sawtooth_cli/batch.py#L258
jrosmith (Tue, 26 Sep 2017 16:44:56 GMT):
Has left the channel.
zac (Tue, 26 Sep 2017 16:47:13 GMT):
This implementation allows the sawtooth CLI to wait indefinitely, even though the REST API will eventually timeout. If batches are still pending it, it remakes the batch status request. However, if you are fine with wait times maxxing out at ~300 seconds, then you only need to make the request once.
kelly_ (Tue, 26 Sep 2017 20:05:59 GMT):
@akshaygoyal you should check this out http://intelledger.github.io/examples/supplychain/overview.html
Dan (Tue, 26 Sep 2017 20:41:51 GMT):
@kelly_ checkout new URL: https://sawtooth.hyperledger.org/docs/examples/supplychain/overview.html
JamesKempf (Wed, 27 Sep 2017 19:34:52 GMT):
I got an unhandled exception message in sawtooth validator:
JamesKempf (Wed, 27 Sep 2017 19:35:11 GMT):
[2017-09-27 19:25:52.514 ERROR future] An unhandled error occurred while running future callback
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_validator/networking/future.py", line 80, in run_callback
self._callback_func(self._request, self._result)
TypeError: _remove_temporary_connection() takes 2 positional arguments but 4 were given
Dan (Thu, 28 Sep 2017 00:04:04 GMT):
Hi @JamesKempf Did that happen repeatably? And what version of ST are you using?
nolan330 (Thu, 28 Sep 2017 00:07:41 GMT):
Has joined the channel.
pschwarz (Thu, 28 Sep 2017 15:08:33 GMT):
That problem has been fixed in master, and should be in the next release
nolan330 (Thu, 28 Sep 2017 19:24:06 GMT):
hey everyone, trying to get my dev env setup, and wondering if there is a guide to get from the tutorial to running the track-and-trade example. im sure it is a pretty simple modification of the docker-compose file, but i havent been able to crack it. i have been able to get the track-and-trade image to run itself by following the build/run commands, but not connected as a transaction family within sawtooth itself. is this something you guys support? id be happy to help with docs after it gets ironed out
zac (Thu, 28 Sep 2017 20:19:55 GMT):
track-and-trade is still in flight
zac (Thu, 28 Sep 2017 20:20:09 GMT):
make sure you are pulling it from the `track-and-trade` branch for now
zac (Thu, 28 Sep 2017 20:20:26 GMT):
though it will be merged back into master by next week
zac (Thu, 28 Sep 2017 20:21:12 GMT):
since it is still being built, there is not much in the way of documentation for how to get it running
zac (Thu, 28 Sep 2017 20:24:18 GMT):
However, if you follow the testing instructions in [PR-879](https://github.com/hyperledger/sawtooth-core/pull/879) and [PR-889](https://github.com/hyperledger/sawtooth-core/pull/889), you should be able to get it running.
zac (Thu, 28 Sep 2017 20:24:29 GMT):
Probably.
jsmitchell (Thu, 28 Sep 2017 20:24:47 GMT):
seems like waiting until next week might be a smoother experience
zac (Thu, 28 Sep 2017 20:24:56 GMT):
This is accurate.
zac (Thu, 28 Sep 2017 20:25:39 GMT):
By then we'll have a Docker compose file, or at the very least a bash script, that will get everything going.
zac (Thu, 28 Sep 2017 20:27:10 GMT):
@nolan330 ^
nolan330 (Thu, 28 Sep 2017 20:31:11 GMT):
ah, right on. thanks everyone. really appreciate it
nolan330 (Thu, 28 Sep 2017 20:31:36 GMT):
i was messing around in the track-and-trade branch, but was still having trouble gluing it together
nolan330 (Thu, 28 Sep 2017 20:31:48 GMT):
but it is an awesome template/example
zac (Thu, 28 Sep 2017 20:37:46 GMT):
Thanks! Is there a particular step you are stuck on right now?
tommling (Fri, 29 Sep 2017 17:41:52 GMT):
Hey all, I am running into an interesting errors related to batch submission
tommling (Fri, 29 Sep 2017 17:42:19 GMT):
I think it is related to the wait parameter
tommling (Fri, 29 Sep 2017 17:43:30 GMT):
?wait added onto the post request. I am using the most recent version of STL, on OSX el capitan, docker version 17.06.0-ce-mac19, running docker-compose -f sawtooth-default.yaml up/down
tommling (Fri, 29 Sep 2017 17:43:56 GMT):
"""wtooth-validator-default | [17:38:05.918 ERROR _base] exception calling callback for
tommling (Fri, 29 Sep 2017 17:43:56 GMT):
"""sawwtooth-validator-default | [17:38:05.918 ERROR _base] exception calling callback for
tommling (Fri, 29 Sep 2017 17:43:56 GMT):
"""sawwtooth-validator-default | [17:38:05.918 ERROR _base] exception calling callback for
tommling (Fri, 29 Sep 2017 17:44:51 GMT):
my gut says there is a race condition
tommling (Fri, 29 Sep 2017 17:44:51 GMT):
my gut says there is a race condition related to this _BatchWaiter and the time it takes to complete the response.
zac (Fri, 29 Sep 2017 17:46:39 GMT):
hrmmm
zac (Fri, 29 Sep 2017 17:46:40 GMT):
could be
zac (Fri, 29 Sep 2017 17:46:49 GMT):
does this happen everytime you `?wait`?
jsmitchell (Fri, 29 Sep 2017 17:46:54 GMT):
looks like just a straight up bug to me
jsmitchell (Fri, 29 Sep 2017 17:47:18 GMT):
that publisher debug message is unrelated
tommling (Fri, 29 Sep 2017 17:50:06 GMT):
@jsmitchell, I think you're right. It was a `double spend`. No, it doesn't happen on every time. I am poking sawtooth with interesting inputs though, for instance I create two int-key states at 0, and then decrement the first by one and increment the second by 1 in the same batch. I post this batch via curl
tommling (Fri, 29 Sep 2017 17:50:27 GMT):
curl --request POST --header "Content-Type: application/octet-stream" --data-binary @intkey.batches "http://localhost:8080/batches?wait=300"
{
"error": {
"code": 17,
"message": "The request timed out while waiting for a response from the validator. Your request may or may not have been processed.",
"title": "Validator Timed Out"
}
jsmitchell (Fri, 29 Sep 2017 17:50:49 GMT):
yeah, that seems due to that attributerrror
tommling (Fri, 29 Sep 2017 17:51:10 GMT):
I am getting the bug now consistently
tommling (Fri, 29 Sep 2017 17:52:17 GMT):
I am going to poke around at the source for a tad
jsmitchell (Fri, 29 Sep 2017 17:54:05 GMT):
its because the method is called notify_batches_finished() not notify_finished()
jsmitchell (Fri, 29 Sep 2017 17:55:14 GMT):
that got fixed in commit af3e7b69a
jsmitchell (Fri, 29 Sep 2017 17:55:26 GMT):
```
commit af3e7b69a7cd26212e5db62c0ae47b5600501a27
Author: Zac Delventhal
jsmitchell (Fri, 29 Sep 2017 17:55:31 GMT):
from august 29th
tommling (Fri, 29 Sep 2017 17:55:35 GMT):
hmm. I literally just cloned the repo
jsmitchell (Fri, 29 Sep 2017 17:55:37 GMT):
where did you get your sawtooth?
jsmitchell (Fri, 29 Sep 2017 17:55:49 GMT):
master?
tommling (Fri, 29 Sep 2017 17:55:56 GMT):
because I thought that might be the case, so I updated
tommling (Fri, 29 Sep 2017 17:55:58 GMT):
yessir
jsmitchell (Fri, 29 Sep 2017 17:56:05 GMT):
that is ... odd
tommling (Fri, 29 Sep 2017 17:56:18 GMT):
* master 2974dd1 [origin/master] Merge pull request #937 from chenette/Intro-TF-rewrite
tommling (Fri, 29 Sep 2017 17:57:21 GMT):
lemme make sure
tommling (Fri, 29 Sep 2017 17:57:23 GMT):
yup that is head
jsmitchell (Fri, 29 Sep 2017 17:57:26 GMT):
@rbuysse is that docker compose file up to date?
tommling (Fri, 29 Sep 2017 17:57:50 GMT):
good question, I am using the one from master, but it might be behind
jsmitchell (Fri, 29 Sep 2017 17:57:57 GMT):
the stuff you get from that docker compose file is not coming from the source repo
jsmitchell (Fri, 29 Sep 2017 17:58:07 GMT):
but rather dockerhub images
jsmitchell (Fri, 29 Sep 2017 17:58:26 GMT):
so, the version in the docker images is probably old/broken
jsmitchell (Fri, 29 Sep 2017 17:58:57 GMT):
i think there is a compose file in there that spins up containers based on the source repo
rbuysse (Fri, 29 Sep 2017 17:59:00 GMT):
the docker images are 0.8.8
jsmitchell (Fri, 29 Sep 2017 17:59:03 GMT):
but I don't have experience with it
tommling (Fri, 29 Sep 2017 17:59:11 GMT):
Okay, thanks for the tip
tommling (Fri, 29 Sep 2017 17:59:19 GMT):
I will check it out, sorry for the duplicate
jsmitchell (Fri, 29 Sep 2017 17:59:41 GMT):
hey, no worries! thanks for reporting it
jsmitchell (Fri, 29 Sep 2017 18:00:06 GMT):
@rbuysse do you know how to docker compose up with the source referencing compose file?
rbuysse (Fri, 29 Sep 2017 18:00:24 GMT):
I do not
jsmitchell (Fri, 29 Sep 2017 18:00:36 GMT):
@adamludvik ^
johanherman (Fri, 29 Sep 2017 19:19:08 GMT):
Has joined the channel.
amundson (Sat, 30 Sep 2017 21:34:07 GMT):
the easiest is to build the mounted version of the images "./bin/build_all -x java -x cxx -x javascript" and use the smallbank-local-mounted.yaml file "docker-compose -f docker/compose/smallbank-local-mounted.yaml up"
mikykey (Sun, 01 Oct 2017 09:44:41 GMT):
Has joined the channel.
grovnick (Sun, 01 Oct 2017 10:31:01 GMT):
Has joined the channel.
kiro112 (Mon, 02 Oct 2017 01:32:19 GMT):
Has joined the channel.
Benudek (Mon, 02 Oct 2017 11:51:07 GMT):
Has joined the channel.
carlos_frijoles (Mon, 02 Oct 2017 12:09:42 GMT):
Has joined the channel.
Dan (Mon, 02 Oct 2017 15:04:42 GMT):
Trying to join sprint planning. Are others getting ... "The host has another meeting in progress" from zoom?
mfford (Mon, 02 Oct 2017 15:06:18 GMT):
Try now. Tracy fixed it.
Dan (Mon, 02 Oct 2017 21:18:30 GMT):
I want to send out a link to T&T docs, but it's only on master. If I go to the new URL and use the selector for master it gives me the old URL. Is that one of the limitations that prevented closing the story or is that unanticipated?
Dan (Mon, 02 Oct 2017 21:18:42 GMT):
@rbuysse ^
rbuysse (Mon, 02 Oct 2017 21:19:05 GMT):
you're right.
rbuysse (Mon, 02 Oct 2017 21:19:52 GMT):
the docs are being published to the hyperledger url but we aren't "cut over"
Dan (Mon, 02 Oct 2017 21:20:21 GMT):
if I want to circulate a link for that doc using the new domain when do you think I could do that? (whether it's a cut over or making a new release or whatever)
rbuysse (Mon, 02 Oct 2017 21:22:29 GMT):
is it this? https://sawtooth.hyperledger.org/docs/nightly/transaction_family_specifications/track_and_trade_transaction_family.html
Dan (Mon, 02 Oct 2017 21:29:05 GMT):
yes!
Dan (Tue, 03 Oct 2017 16:27:55 GMT):
what's the sawtooth-manage package for?
Dan (Tue, 03 Oct 2017 16:28:16 GMT):
as in `python3-sawtooth-manage 0.8.9~dev377-1 all Sawtooth Lake Management Library`
Dan (Tue, 03 Oct 2017 16:28:16 GMT):
as in `python3-sawtooth-manage 0.8.9~dev377-1 all Sawtooth Lake Management Library`
Dan (Tue, 03 Oct 2017 21:11:48 GMT):
per other conversations this ^ is deprecated.
vbledar (Tue, 03 Oct 2017 21:33:45 GMT):
hi. i'm trying to query my blockchain using the rest api but I'm receiving the following error:
vbledar (Tue, 03 Oct 2017 21:33:47 GMT):
{
"error": {
"code": 15,
"message": "The validator has no genesis block, and is not yet ready to be queried. Try your request again later.",
"title": "Validator Not Ready"
}
}
vbledar (Tue, 03 Oct 2017 21:34:10 GMT):
I'm running a get request on this endpoint: http://localhost:18080/batches
vbledar (Tue, 03 Oct 2017 21:34:31 GMT):
I started my validator running the following commands:
vbledar (Tue, 03 Oct 2017 21:35:09 GMT):
sawtooth keygen
sawtooth config genesis
sudo -u sawtooth sawtooth admin genesis config-genesis.batch
sudo sawtooth admin keygen
vbledar (Tue, 03 Oct 2017 21:35:30 GMT):
sudo -u sawtooth sawtooth-validator -vv
vbledar (Tue, 03 Oct 2017 21:35:55 GMT):
any idea what have i don wrong?
vbledar (Tue, 03 Oct 2017 21:51:11 GMT):
Found the following: https://jira.hyperledger.org/browse/STL-39
vbledar (Tue, 03 Oct 2017 21:51:34 GMT):
It seems I didn't execute the following line: sudo sawtooth admin genesis
vbledar (Tue, 03 Oct 2017 21:51:50 GMT):
I'm not sure if it is correct to run it with sudo, but it is working now!
amundson (Tue, 03 Oct 2017 21:54:06 GMT):
FYI - @rjones is rolling out some DCO changes in github sawtooth-core repo, let's keep him up-to-date with any problems so he has all the info
rjones (Tue, 03 Oct 2017 21:54:06 GMT):
Has joined the channel.
amundson (Tue, 03 Oct 2017 21:56:25 GMT):
@vbledar - anything in /var/log/sawtooth/validator-error.log? (older versions of sawtooth might have a validator id in that filename)
vbledar (Tue, 03 Oct 2017 21:58:18 GMT):
@amundson unfortunately I deleted everything and started the procedure again. I'll take a look as soon as everything is setup again
Dan (Tue, 03 Oct 2017 21:59:12 GMT):
thanks @vbledar. I wasn't clear from your note above whether there's a missing step in the instructions or not. If there is a new defect please let us know.
vbledar (Tue, 03 Oct 2017 22:09:51 GMT):
@Dan I'm confused about the following two commands:
vbledar (Tue, 03 Oct 2017 22:10:02 GMT):
sudo -u sawtooth sawtooth admin genesis config-genesis.batch
vbledar (Tue, 03 Oct 2017 22:10:18 GMT):
produces the following output: Processing config-genesis.batch...
Generating /var/lib/sawtooth/genesis.batch
vbledar (Tue, 03 Oct 2017 22:10:35 GMT):
sudo -u sawtooth sawtooth admin genesis
rjones (Tue, 03 Oct 2017 22:10:40 GMT):
@dan I renamed supply-chain to sawtooth-supply-chain, sorry for any turbulence
vbledar (Tue, 03 Oct 2017 22:10:54 GMT):
produces the following output: Generating /var/lib/sawtooth/genesis.batch
vbledar (Tue, 03 Oct 2017 22:11:37 GMT):
if I don't run the latter the rest api produces the error 15 from above
vbledar (Tue, 03 Oct 2017 22:11:56 GMT):
if do run it then the rest api works perfectly
vbledar (Tue, 03 Oct 2017 22:12:15 GMT):
both commands give the same output!
Dan (Tue, 03 Oct 2017 22:12:24 GMT):
thanks for the heads up @ry. @amundson was in process of populating that. so heads up to you shawn.
amundson (Tue, 03 Oct 2017 22:12:48 GMT):
no worries
Dan (Tue, 03 Oct 2017 22:21:41 GMT):
@vbledar .. let me take a look ...
Dan (Tue, 03 Oct 2017 22:27:03 GMT):
that output file is the default name that command will produce unless it's overridden. But to your main question, I'm not sure why there's an apparently redundant command there. @amundson is more familiar with the CLI than I am. Maybe he can shed some light.
Dan (Tue, 03 Oct 2017 22:29:06 GMT):
Btw, @vbledar which set of instructions are you working from?
vbledar (Tue, 03 Oct 2017 22:29:57 GMT):
From this location if that's what you mean: https://intelledger.github.io/app_developers_guide/ubuntu.html#validator-start-up-process
Dan (Tue, 03 Oct 2017 22:31:57 GMT):
yep that's what I was looking for. So there isn't an instruction to do `sudo -u sawtooth sawtooth admin genesis config-genesis.batch` twice. You just figured out that if you ran the command a second time with no argument then the validator would work?
vbledar (Tue, 03 Oct 2017 22:35:57 GMT):
Didn't figure it by myself. I found the following from @amundson here: https://jira.hyperledger.org/browse/STL-39
vbledar (Tue, 03 Oct 2017 22:37:29 GMT):
Just pure luck I didn't realize in the beginning that it was the same command. I'm referring to the following from STL-39: "b) create data for the genesis block with 'sawtooth admin genesis'"
vbledar (Tue, 03 Oct 2017 22:37:44 GMT):
after running it like that it worked
vbledar (Tue, 03 Oct 2017 22:38:09 GMT):
On the other hand I have tried yet to run only the short version of the command without even running the long version
vbledar (Tue, 03 Oct 2017 22:38:21 GMT):
I'll give it a try and let you know
vbledar (Tue, 03 Oct 2017 22:41:37 GMT):
Executing the following in sequence works:
vbledar@sawtoothsrv1:~$ clear
vbledar@sawtoothsrv1:~$ sudo rm -rf /var/lib/sawtooth/*
vbledar@sawtoothsrv1:~$ sawtooth keygen --force
overwriting file: /home/vbledar/.sawtooth/keys/vbledar.priv
overwriting file: /home/vbledar/.sawtooth/keys/vbledar.pub
vbledar@sawtoothsrv1:~$ sawtooth config genesis
Generated config-genesis.batch
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth admin keygen --force
overwriting file: /etc/sawtooth/keys/validator.priv
overwriting file: /etc/sawtooth/keys/validator.pub
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth admin genesis
Generating /var/lib/sawtooth/genesis.batch
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth-validator -vv
vbledar (Tue, 03 Oct 2017 22:44:52 GMT):
Running this sequence it doesn't work (basically only the admin genesis is different):
vbledar (Tue, 03 Oct 2017 22:44:53 GMT):
vbledar@sawtoothsrv1:~$ sudo rm -rf /var/lib/sawtooth/*
vbledar@sawtoothsrv1:~$ sawtooth keygen --force
overwriting file: /home/vbledar/.sawtooth/keys/vbledar.priv
overwriting file: /home/vbledar/.sawtooth/keys/vbledar.pub
vbledar@sawtoothsrv1:~$ sawtooth config genesis
Generated config-genesis.batch
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth admin keygen --force
overwriting file: /etc/sawtooth/keys/validator.priv
overwriting file: /etc/sawtooth/keys/validator.pub
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth admin genesis config-genesis.batch
Processing config-genesis.batch...
Generating /var/lib/sawtooth/genesis.batch
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth-validator -vv
rjones (Tue, 03 Oct 2017 22:51:33 GMT):
I think if you surround those with triple ticks they turn into collapsible text.
rjones (Tue, 03 Oct 2017 22:51:40 GMT):
```vbledar@sawtoothsrv1:~$ sudo rm -rf /var/lib/sawtooth/*
vbledar@sawtoothsrv1:~$ sawtooth keygen --force
overwriting file: /home/vbledar/.sawtooth/keys/vbledar.priv
overwriting file: /home/vbledar/.sawtooth/keys/vbledar.pub
vbledar@sawtoothsrv1:~$ sawtooth config genesis
Generated config-genesis.batch
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth admin keygen --force
overwriting file: /etc/sawtooth/keys/validator.priv
overwriting file: /etc/sawtooth/keys/validator.pub
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth admin genesis config-genesis.batch
Processing config-genesis.batch...
Generating /var/lib/sawtooth/genesis.batch
vbledar@sawtoothsrv1:~$ sudo -u sawtooth sawtooth-validator -vv```
rjones (Tue, 03 Oct 2017 22:51:51 GMT):
I'm wrong. What's new?
vbledar (Tue, 03 Oct 2017 22:52:22 GMT):
{{{test}}}
vbledar (Tue, 03 Oct 2017 22:52:32 GMT):
sorry, what is a "tick"
rjones (Tue, 03 Oct 2017 23:01:36 GMT):
\`\`\`
rjones (Tue, 03 Oct 2017 23:01:36 GMT):
it is this symbol: `
rjones (Tue, 03 Oct 2017 23:01:36 GMT):
```
rjones (Tue, 03 Oct 2017 23:02:19 GMT):
next to tilde on my keyboard: ~
amundson (Wed, 04 Oct 2017 00:04:31 GMT):
@vbledar have you attempted to submit any transactions? I'm wondering if it may be the case that no batches where in the genesis file and so no block was generated, but that if you were to submit one (with 'xo create game000' for example), you would get the expected behavior and that /batches/ endpoint would start returning data appropriately
mfford (Wed, 04 Oct 2017 16:18:17 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, October 5th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, October 5th
Time: 10-11am CDT
We are using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
Agenda:
1. Introductions-Mark Ford
2. Hyperledger Sawtooth Transactor Key and Validator Key Permissioning –Andrea Gunderson
3. Open Forum
vbledar (Wed, 04 Oct 2017 19:16:48 GMT):
@amundson No I didn't submit any transactions. I will give it a try and let you know.
t_stephens67 (Wed, 04 Oct 2017 19:38:22 GMT):
Has joined the channel.
t_stephens67 (Wed, 04 Oct 2017 19:38:27 GMT):
Has left the channel.
cyyber (Wed, 04 Oct 2017 22:31:20 GMT):
Has joined the channel.
iuriarte (Thu, 05 Oct 2017 20:13:21 GMT):
Has joined the channel.
Edama (Thu, 05 Oct 2017 20:46:18 GMT):
Has joined the channel.
AlekNS (Fri, 06 Oct 2017 05:06:41 GMT):
Has joined the channel.
CppMaster (Fri, 06 Oct 2017 07:58:48 GMT):
Has joined the channel.
CppMaster (Fri, 06 Oct 2017 08:03:16 GMT):
Hello. How could I run my custom Transaction Handler, like XoTransactionHandler example, on Docker on Windows 10 Pro? I run configuration using command: 'docker-compose -f sawtooth-default.yaml up', which has content:
'''# Copyright 2017 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ------------------------------------------------------------------------------
version: "2.1"
services:
settings-tp:
image: hyperledger/sawtooth-tp_settings:latest
container_name: sawtooth-settings-tp-default
expose:
- 4004
depends_on:
- validator
entrypoint: settings-tp -vv tcp://validator:4004
intkey-tp-python:
image: hyperledger/sawtooth-tp_intkey_python:latest
container_name: sawtooth-intkey-tp-python-default
expose:
- 4004
depends_on:
- validator
entrypoint: intkey-tp-python -vv tcp://validator:4004
xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "4004:4004"
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "8080:8080"
depends_on:
- validator
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080
client:
image: hyperledger/sawtooth-all:latest
container_name: sawtooth-client-default
expose:
- 8080
- 4004
depends_on:
- rest-api
entrypoint: "bash -c \"\
sawtooth keygen && \
tail -f /dev/null \
\""
'''
JamesKempf (Fri, 06 Oct 2017 22:00:00 GMT):
Hi, I've been trying to get a network of sawtooth validators up and so far have not had any success. With dynamic peering, I started up a validator on one VM and one on another and though the second found the first,I still got a 505 Service Not Available when I tried sawtooth block list. With static peering, I listed the addresses of the validators after the --static flag but got the same message. What am I missing? Thanx.
mikykey (Sun, 08 Oct 2017 09:36:08 GMT):
Hello to Everybody! does anybody know if in Sawtooth there is the concept of channels (i.e. Multi Channel) as in Hyperledger Fabric? I didn't found anythink about it. Thank you very much
Dpkkmr (Mon, 09 Oct 2017 11:40:53 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=qKxL2AduvQom23opE) @mikykey
Even I have same Question. If anyone knows the answer please respond.
Dan (Mon, 09 Oct 2017 13:33:44 GMT):
@mikykey @Dpkkmr we have a couple concepts for privacy. Channels are essentially separate blockchain networks so you can do the same with Sawtooth by spinning up separate networks with our launch scripts.
Maybe more interesting is Private UTXO. https://sawtooth.hyperledger.org/docs/examples/private_utxo/overview.html. This transaction type lets you create confidential transactions with any other party.
Dan (Mon, 09 Oct 2017 14:06:03 GMT):
Looking at Jira it appears the Parallel Scheduler epic is complete. Is this battlestation fully operational @boydjohnson!?
agunde (Mon, 09 Oct 2017 15:23:06 GMT):
@JamesKempf Did you run `sawtooth admin genesis` before starting up the first validator? Also for `--peering dynamic` make sure you list the other validators in `--seeds`. For static list the validators after `--peers`
Dan (Mon, 09 Oct 2017 16:19:54 GMT):
Build is broken. Ryan is triaging and will hand off to relevant maintainer.
JamesKempf (Mon, 09 Oct 2017 16:43:09 GMT):
@agunde, yes, I ran sawtooth admin genesis for the first validator and listed the first validator after --seeds for dynamic and after --peers for static.
amundson (Mon, 09 Oct 2017 19:25:36 GMT):
@Dan the parallel scheduler has feature parity with the serial scheduler, it's just faster
Dan (Mon, 09 Oct 2017 19:30:27 GMT):
if it's fully operational then we should have a little party. maybe at the Scarif office where we store all our centrally housed data.
amundson (Mon, 09 Oct 2017 20:50:18 GMT):
seems fully operational. seems like we should all get t-shirts.
Dan (Tue, 10 Oct 2017 14:41:57 GMT):
FYI, Looks like some false positive fails on DCO checks in PRs. https://github.com/hyperledger/sawtooth-core/pull/987. @rjones can you see what is amiss?
Dan (Tue, 10 Oct 2017 14:42:27 GMT):
https://github.com/hyperledger/sawtooth-core/pull/988
Dan (Tue, 10 Oct 2017 14:43:58 GMT):
Note this are resubmits from previous PRs that actually were missing sign-offs.
amundson (Tue, 10 Oct 2017 15:52:02 GMT): Dan (Tue, 10 Oct 2017 16:00:14 GMT): rjones (Tue, 10 Oct 2017 16:28:47 GMT): rjones (Tue, 10 Oct 2017 16:30:25 GMT): rjones (Tue, 10 Oct 2017 16:30:42 GMT): Dan (Tue, 10 Oct 2017 17:57:13 GMT): Dan (Tue, 10 Oct 2017 17:57:41 GMT): Dan (Tue, 10 Oct 2017 18:00:56 GMT): Dan (Tue, 10 Oct 2017 18:01:35 GMT): jsmitchell (Tue, 10 Oct 2017 18:02:12 GMT): jsmitchell (Tue, 10 Oct 2017 18:03:08 GMT): rjones (Tue, 10 Oct 2017 18:15:16 GMT): rjones (Tue, 10 Oct 2017 18:16:02 GMT): Dan (Tue, 10 Oct 2017 18:16:55 GMT): rjones (Tue, 10 Oct 2017 18:17:10 GMT): boydjohnson (Tue, 10 Oct 2017 18:17:36 GMT): Dan (Tue, 10 Oct 2017 18:18:15 GMT): Dan (Tue, 10 Oct 2017 18:19:13 GMT): jsmitchell (Tue, 10 Oct 2017 18:19:35 GMT): jsmitchell (Tue, 10 Oct 2017 18:19:44 GMT): Dan (Tue, 10 Oct 2017 18:19:52 GMT): jsmitchell (Tue, 10 Oct 2017 18:20:16 GMT): jsmitchell (Tue, 10 Oct 2017 18:21:01 GMT): Dan (Tue, 10 Oct 2017 18:22:53 GMT): kelly_ (Tue, 10 Oct 2017 22:33:39 GMT): rbuysse (Wed, 11 Oct 2017 00:49:09 GMT): mredmundto (Wed, 11 Oct 2017 02:57:17 GMT): bamboo (Wed, 11 Oct 2017 11:51:51 GMT): parisa (Wed, 11 Oct 2017 17:19:20 GMT): JamesKempf (Wed, 11 Oct 2017 20:23:47 GMT): boydjohnson (Wed, 11 Oct 2017 21:18:55 GMT): JamesKempf (Wed, 11 Oct 2017 22:34:14 GMT): JamesKempf (Wed, 11 Oct 2017 22:34:50 GMT): alexandra_g (Thu, 12 Oct 2017 05:25:39 GMT): Dan (Thu, 12 Oct 2017 14:06:55 GMT): zac (Thu, 12 Oct 2017 14:36:00 GMT): zac (Thu, 12 Oct 2017 14:36:07 GMT): Dan (Thu, 12 Oct 2017 14:46:14 GMT): amundson (Thu, 12 Oct 2017 14:53:55 GMT): zac (Thu, 12 Oct 2017 15:00:50 GMT): Dan (Thu, 12 Oct 2017 15:10:08 GMT): zac (Thu, 12 Oct 2017 15:12:46 GMT): alexandra_g (Thu, 12 Oct 2017 17:06:48 GMT): alexandra_g (Thu, 12 Oct 2017 17:06:48 GMT): Dan (Thu, 12 Oct 2017 17:49:43 GMT): zac (Thu, 12 Oct 2017 17:52:36 GMT): zac (Thu, 12 Oct 2017 17:53:05 GMT): Dan (Thu, 12 Oct 2017 18:06:16 GMT): Dan (Thu, 12 Oct 2017 18:06:20 GMT): Dan (Thu, 12 Oct 2017 18:10:14 GMT): amundson (Thu, 12 Oct 2017 18:10:42 GMT): amundson (Thu, 12 Oct 2017 18:10:42 GMT): boydjohnson (Thu, 12 Oct 2017 18:10:50 GMT): Dan (Thu, 12 Oct 2017 18:13:00 GMT): Dan (Thu, 12 Oct 2017 18:14:31 GMT): Dan (Thu, 12 Oct 2017 18:14:43 GMT): amundson (Thu, 12 Oct 2017 18:16:00 GMT): amundson (Thu, 12 Oct 2017 18:16:47 GMT): amundson (Thu, 12 Oct 2017 18:17:31 GMT): amundson (Thu, 12 Oct 2017 18:19:10 GMT): zac (Thu, 12 Oct 2017 18:21:35 GMT): boydjohnson (Thu, 12 Oct 2017 18:21:50 GMT): zac (Thu, 12 Oct 2017 18:22:11 GMT): boydjohnson (Thu, 12 Oct 2017 18:22:26 GMT): zac (Thu, 12 Oct 2017 18:22:33 GMT): Dan (Thu, 12 Oct 2017 18:23:19 GMT): Dan (Thu, 12 Oct 2017 18:23:21 GMT): Dan (Thu, 12 Oct 2017 18:24:06 GMT): amundson (Thu, 12 Oct 2017 18:34:51 GMT): amundson (Thu, 12 Oct 2017 18:35:17 GMT): amundson (Thu, 12 Oct 2017 18:35:21 GMT): amundson (Thu, 12 Oct 2017 18:36:40 GMT): amundson (Thu, 12 Oct 2017 18:36:50 GMT): Dan (Thu, 12 Oct 2017 18:45:36 GMT): amundson (Thu, 12 Oct 2017 18:46:01 GMT): amundson (Thu, 12 Oct 2017 18:46:22 GMT): Dan (Thu, 12 Oct 2017 18:46:27 GMT): amundson (Thu, 12 Oct 2017 18:47:20 GMT): Dan (Thu, 12 Oct 2017 18:53:41 GMT): alexandra_g (Thu, 12 Oct 2017 19:39:03 GMT): alexandra_g (Thu, 12 Oct 2017 19:40:56 GMT): alexandra_g (Thu, 12 Oct 2017 19:41:51 GMT): parisa (Thu, 12 Oct 2017 20:15:48 GMT): parisa (Thu, 12 Oct 2017 20:16:39 GMT): drozd (Thu, 12 Oct 2017 20:27:55 GMT): drozd (Thu, 12 Oct 2017 20:28:17 GMT): parisa (Thu, 12 Oct 2017 20:53:21 GMT): drozd (Thu, 12 Oct 2017 21:01:07 GMT): parisa (Thu, 12 Oct 2017 21:17:22 GMT): drozd (Thu, 12 Oct 2017 21:24:47 GMT): parisa (Thu, 12 Oct 2017 21:25:49 GMT): drozd (Thu, 12 Oct 2017 21:34:31 GMT): rbuysse (Thu, 12 Oct 2017 21:57:27 GMT): rbuysse (Thu, 12 Oct 2017 21:57:27 GMT): zac (Thu, 12 Oct 2017 21:58:59 GMT): zac (Thu, 12 Oct 2017 21:59:35 GMT): zac (Thu, 12 Oct 2017 22:00:16 GMT): zac (Thu, 12 Oct 2017 22:00:45 GMT): zac (Thu, 12 Oct 2017 22:02:23 GMT): zac (Thu, 12 Oct 2017 22:02:47 GMT): zac (Thu, 12 Oct 2017 22:03:21 GMT): zac (Thu, 12 Oct 2017 22:03:21 GMT): drozd (Thu, 12 Oct 2017 22:04:52 GMT): drozd (Thu, 12 Oct 2017 22:05:18 GMT): zac (Thu, 12 Oct 2017 22:05:46 GMT): alexandra_g (Thu, 12 Oct 2017 22:06:57 GMT): alexandra_g (Thu, 12 Oct 2017 22:08:03 GMT): zac (Thu, 12 Oct 2017 22:09:26 GMT): zac (Thu, 12 Oct 2017 22:10:18 GMT): Dan (Thu, 12 Oct 2017 22:12:46 GMT): zac (Thu, 12 Oct 2017 22:13:09 GMT): zac (Thu, 12 Oct 2017 22:13:17 GMT): zac (Thu, 12 Oct 2017 22:13:24 GMT): zac (Thu, 12 Oct 2017 22:13:47 GMT): zac (Thu, 12 Oct 2017 22:13:47 GMT): zac (Thu, 12 Oct 2017 22:13:47 GMT): zac (Thu, 12 Oct 2017 22:14:38 GMT): zac (Thu, 12 Oct 2017 22:15:19 GMT): drozd (Thu, 12 Oct 2017 22:18:11 GMT): drozd (Thu, 12 Oct 2017 22:18:18 GMT): zac (Thu, 12 Oct 2017 22:20:51 GMT): zac (Thu, 12 Oct 2017 22:21:09 GMT): zac (Thu, 12 Oct 2017 22:21:44 GMT): zac (Thu, 12 Oct 2017 22:22:43 GMT): parisa (Thu, 12 Oct 2017 22:44:29 GMT): drozd (Thu, 12 Oct 2017 22:45:59 GMT): drozd (Thu, 12 Oct 2017 22:46:06 GMT): alexandra_g (Thu, 12 Oct 2017 22:46:27 GMT): zac (Thu, 12 Oct 2017 22:49:28 GMT): zac (Thu, 12 Oct 2017 22:49:28 GMT): zac (Thu, 12 Oct 2017 22:50:15 GMT): alexandra_g (Thu, 12 Oct 2017 22:59:22 GMT): zac (Thu, 12 Oct 2017 23:00:48 GMT): zac (Thu, 12 Oct 2017 23:01:35 GMT): zac (Thu, 12 Oct 2017 23:02:01 GMT): Dan (Fri, 13 Oct 2017 14:02:01 GMT): JamesKempf (Fri, 13 Oct 2017 14:43:25 GMT): zac (Fri, 13 Oct 2017 14:49:12 GMT): zac (Fri, 13 Oct 2017 14:49:57 GMT): Dan (Fri, 13 Oct 2017 15:19:35 GMT): alexandra_g (Fri, 13 Oct 2017 15:54:17 GMT): alexandra_g (Fri, 13 Oct 2017 15:56:26 GMT): alexandra_g (Sat, 14 Oct 2017 23:33:09 GMT): Dan (Sun, 15 Oct 2017 01:19:13 GMT): Dan (Sun, 15 Oct 2017 01:19:53 GMT): vbledar (Sun, 15 Oct 2017 17:25:06 GMT): vbledar (Sun, 15 Oct 2017 17:25:17 GMT): vbledar (Sun, 15 Oct 2017 18:15:17 GMT): kelly_ (Mon, 16 Oct 2017 00:33:45 GMT): Dan (Mon, 16 Oct 2017 14:31:23 GMT): Dan (Mon, 16 Oct 2017 14:31:37 GMT): Dan (Mon, 16 Oct 2017 14:31:37 GMT): Dan (Mon, 16 Oct 2017 15:40:43 GMT): boydjohnson (Mon, 16 Oct 2017 15:49:25 GMT): Dan (Mon, 16 Oct 2017 15:58:47 GMT): GhadiShayban (Mon, 16 Oct 2017 17:54:59 GMT): GhadiShayban (Mon, 16 Oct 2017 17:54:59 GMT): GhadiShayban (Mon, 16 Oct 2017 17:54:59 GMT): GhadiShayban (Mon, 16 Oct 2017 17:57:47 GMT): GhadiShayban (Mon, 16 Oct 2017 17:58:14 GMT): parisa (Mon, 16 Oct 2017 18:17:36 GMT): parisa (Mon, 16 Oct 2017 18:43:23 GMT): vbledar (Mon, 16 Oct 2017 18:43:49 GMT): vbledar (Mon, 16 Oct 2017 18:45:53 GMT): kelly_ (Mon, 16 Oct 2017 18:49:39 GMT): parisa (Mon, 16 Oct 2017 19:03:53 GMT): vbledar (Mon, 16 Oct 2017 19:07:35 GMT): parisa (Mon, 16 Oct 2017 19:30:14 GMT): parisa (Mon, 16 Oct 2017 19:30:15 GMT): parisa (Mon, 16 Oct 2017 19:31:28 GMT): vbledar (Mon, 16 Oct 2017 19:35:11 GMT): vbledar (Mon, 16 Oct 2017 19:36:19 GMT): Dan (Mon, 16 Oct 2017 21:16:37 GMT): Dan (Mon, 16 Oct 2017 21:16:37 GMT): parisa (Tue, 17 Oct 2017 00:20:19 GMT): parisa (Tue, 17 Oct 2017 00:25:41 GMT): pschwarz (Tue, 17 Oct 2017 14:09:57 GMT): brianz (Tue, 17 Oct 2017 19:49:21 GMT): vbledar (Tue, 17 Oct 2017 20:13:36 GMT): kelly_ (Tue, 17 Oct 2017 20:50:16 GMT): vbledar (Tue, 17 Oct 2017 20:59:26 GMT): pschwarz (Tue, 17 Oct 2017 21:27:19 GMT): pschwarz (Tue, 17 Oct 2017 21:29:10 GMT): pschwarz (Tue, 17 Oct 2017 21:31:04 GMT): vbledar (Tue, 17 Oct 2017 21:47:07 GMT): pschwarz (Tue, 17 Oct 2017 22:07:40 GMT): mfford (Wed, 18 Oct 2017 13:20:52 GMT): mredmundto (Wed, 18 Oct 2017 16:01:48 GMT): boydjohnson (Wed, 18 Oct 2017 16:16:54 GMT): mredmundto (Wed, 18 Oct 2017 16:29:42 GMT): boydjohnson (Wed, 18 Oct 2017 16:31:27 GMT): mbd 1 (Wed, 18 Oct 2017 18:13:48 GMT): Dan (Wed, 18 Oct 2017 20:50:32 GMT): boydjohnson (Wed, 18 Oct 2017 20:53:21 GMT): Dan (Wed, 18 Oct 2017 20:53:56 GMT): boydjohnson (Wed, 18 Oct 2017 20:54:51 GMT): Dan (Wed, 18 Oct 2017 20:55:04 GMT): jcbombardelli (Wed, 18 Oct 2017 21:28:43 GMT): podfrogs (Wed, 18 Oct 2017 23:32:22 GMT): benjaminverhaegen (Thu, 19 Oct 2017 09:18:35 GMT): benjaminverhaegen (Thu, 19 Oct 2017 09:20:07 GMT): benjaminverhaegen (Thu, 19 Oct 2017 09:20:27 GMT): benjaminverhaegen (Thu, 19 Oct 2017 09:20:36 GMT): bamboo (Thu, 19 Oct 2017 12:10:56 GMT): bamboo (Thu, 19 Oct 2017 12:10:56 GMT): zac (Thu, 19 Oct 2017 13:16:44 GMT): benjaminverhaegen (Thu, 19 Oct 2017 13:18:04 GMT): zac (Thu, 19 Oct 2017 13:18:59 GMT): kelly_ (Thu, 19 Oct 2017 17:43:02 GMT): kelly_ (Thu, 19 Oct 2017 17:53:17 GMT): mfford (Thu, 19 Oct 2017 17:54:10 GMT): tkuhrt (Thu, 19 Oct 2017 17:54:14 GMT): kelly_ (Thu, 19 Oct 2017 17:57:44 GMT): larry (Thu, 19 Oct 2017 18:28:19 GMT): GhadiShayban (Thu, 19 Oct 2017 19:23:41 GMT): Dan (Thu, 19 Oct 2017 19:45:53 GMT): GhadiShayban (Thu, 19 Oct 2017 19:45:54 GMT): GhadiShayban (Thu, 19 Oct 2017 19:45:54 GMT): GhadiShayban (Thu, 19 Oct 2017 19:47:22 GMT): GhadiShayban (Thu, 19 Oct 2017 19:55:53 GMT): Dan (Thu, 19 Oct 2017 20:10:41 GMT): vbledar (Thu, 19 Oct 2017 21:32:01 GMT): kelly_ (Fri, 20 Oct 2017 15:04:11 GMT): pschwarz (Fri, 20 Oct 2017 15:09:37 GMT): pschwarz (Fri, 20 Oct 2017 15:10:12 GMT): pschwarz (Fri, 20 Oct 2017 15:23:25 GMT): pschwarz (Fri, 20 Oct 2017 15:24:07 GMT): pschwarz (Fri, 20 Oct 2017 15:27:20 GMT): mfford (Fri, 20 Oct 2017 18:40:19 GMT): mfford (Fri, 20 Oct 2017 18:40:19 GMT): mfford (Fri, 20 Oct 2017 18:42:23 GMT): mfford (Fri, 20 Oct 2017 18:44:37 GMT): kelly_ (Fri, 20 Oct 2017 19:10:45 GMT): kelly_ (Fri, 20 Oct 2017 19:11:58 GMT): kelly_ (Fri, 20 Oct 2017 19:15:37 GMT): mfford (Fri, 20 Oct 2017 20:49:32 GMT): mfford (Fri, 20 Oct 2017 20:49:52 GMT): zac (Fri, 20 Oct 2017 21:19:25 GMT): kelly_ (Fri, 20 Oct 2017 21:21:31 GMT): kelly_ (Fri, 20 Oct 2017 21:21:45 GMT): kelly_ (Fri, 20 Oct 2017 21:21:46 GMT): podfrogs (Sat, 21 Oct 2017 11:32:00 GMT): vbledar (Sat, 21 Oct 2017 14:02:13 GMT): crow15 (Sat, 21 Oct 2017 15:54:31 GMT): mredmundto85 (Sun, 22 Oct 2017 05:24:20 GMT): bamboo (Sun, 22 Oct 2017 09:55:33 GMT): jarvis26 (Sun, 22 Oct 2017 14:25:04 GMT): jarvis26 (Sun, 22 Oct 2017 14:26:24 GMT): Dan (Sun, 22 Oct 2017 20:34:38 GMT): Dan (Sun, 22 Oct 2017 21:39:08 GMT): Dan (Sun, 22 Oct 2017 21:39:48 GMT): aviralwal (Mon, 23 Oct 2017 10:19:54 GMT): pschwarz (Mon, 23 Oct 2017 14:08:54 GMT): Dan (Mon, 23 Oct 2017 18:32:31 GMT): VipinB (Mon, 23 Oct 2017 19:03:19 GMT): VipinB (Mon, 23 Oct 2017 19:03:44 GMT): conroydave (Tue, 24 Oct 2017 00:42:38 GMT): bamboo (Tue, 24 Oct 2017 12:17:42 GMT): VijendraKulkarni (Tue, 24 Oct 2017 18:34:23 GMT): vbledar (Tue, 24 Oct 2017 18:45:12 GMT): pschwarz (Tue, 24 Oct 2017 18:47:48 GMT): vbledar (Tue, 24 Oct 2017 18:51:11 GMT): vbledar (Tue, 24 Oct 2017 18:57:28 GMT): vbledar (Tue, 24 Oct 2017 19:22:36 GMT): pschwarz (Tue, 24 Oct 2017 19:23:43 GMT): pschwarz (Tue, 24 Oct 2017 19:23:43 GMT): vbledar (Tue, 24 Oct 2017 19:32:06 GMT): pschwarz (Tue, 24 Oct 2017 20:23:07 GMT): pschwarz (Tue, 24 Oct 2017 20:23:07 GMT): pschwarz (Tue, 24 Oct 2017 20:23:07 GMT): vbledar (Tue, 24 Oct 2017 20:26:08 GMT): pschwarz (Tue, 24 Oct 2017 20:27:10 GMT): pschwarz (Tue, 24 Oct 2017 20:27:44 GMT): pschwarz (Tue, 24 Oct 2017 20:27:49 GMT): pschwarz (Tue, 24 Oct 2017 20:27:49 GMT): vbledar (Tue, 24 Oct 2017 20:38:11 GMT): vbledar (Tue, 24 Oct 2017 20:38:24 GMT): pschwarz (Tue, 24 Oct 2017 21:11:10 GMT): Dan (Tue, 24 Oct 2017 23:22:09 GMT): Dan (Tue, 24 Oct 2017 23:23:40 GMT): akmishra (Wed, 25 Oct 2017 05:08:03 GMT): akmishra (Wed, 25 Oct 2017 11:23:13 GMT): akmishra (Wed, 25 Oct 2017 11:25:37 GMT): akmishra (Wed, 25 Oct 2017 11:25:56 GMT): akmishra (Wed, 25 Oct 2017 11:27:05 GMT): Dan (Wed, 25 Oct 2017 14:52:18 GMT): vbledar (Wed, 25 Oct 2017 15:52:52 GMT): jsmitchell (Wed, 25 Oct 2017 16:31:47 GMT): tkuhrt (Wed, 25 Oct 2017 16:56:28 GMT): boydjohnson (Wed, 25 Oct 2017 17:04:30 GMT): tkuhrt (Wed, 25 Oct 2017 17:15:29 GMT): akmishra (Wed, 25 Oct 2017 17:31:20 GMT): akmishra (Wed, 25 Oct 2017 17:33:33 GMT): Dan (Wed, 25 Oct 2017 18:02:30 GMT): vbledar (Wed, 25 Oct 2017 19:03:36 GMT): pschwarz (Wed, 25 Oct 2017 19:36:21 GMT): Dan (Wed, 25 Oct 2017 19:58:06 GMT): Dan (Wed, 25 Oct 2017 19:58:29 GMT): zac (Wed, 25 Oct 2017 20:57:43 GMT): zac (Wed, 25 Oct 2017 20:57:52 GMT): zac (Wed, 25 Oct 2017 20:58:43 GMT): Dan (Wed, 25 Oct 2017 22:21:40 GMT): kelly_ (Wed, 25 Oct 2017 22:54:22 GMT): JamesKempf (Thu, 26 Oct 2017 07:49:39 GMT): sgermanz (Thu, 26 Oct 2017 12:44:35 GMT): sgermanz (Thu, 26 Oct 2017 12:50:17 GMT): sgermanz (Thu, 26 Oct 2017 12:50:17 GMT): Timote (Thu, 26 Oct 2017 13:47:06 GMT): kelly_ (Thu, 26 Oct 2017 14:00:59 GMT): boydjohnson (Thu, 26 Oct 2017 15:27:07 GMT): sgermanz (Thu, 26 Oct 2017 18:18:14 GMT): pschwarz (Thu, 26 Oct 2017 18:41:05 GMT): AbelVillavicencio (Fri, 27 Oct 2017 05:00:46 GMT): karthikworks (Fri, 27 Oct 2017 08:39:07 GMT): duncanjw (Fri, 27 Oct 2017 12:00:29 GMT): akmishra (Fri, 27 Oct 2017 12:36:19 GMT): BeeKay (Sat, 28 Oct 2017 16:45:49 GMT): HvDoes (Sat, 28 Oct 2017 21:14:08 GMT): HvDoes (Sat, 28 Oct 2017 21:14:34 GMT): HvDoes (Sat, 28 Oct 2017 21:14:48 GMT): HvDoes (Sat, 28 Oct 2017 21:14:52 GMT): HvDoes (Sat, 28 Oct 2017 21:15:18 GMT): HvDoes (Sat, 28 Oct 2017 21:15:18 GMT): myin2000 (Sun, 29 Oct 2017 12:48:28 GMT): tradesage (Sun, 29 Oct 2017 13:32:28 GMT): meridian (Sun, 29 Oct 2017 15:08:56 GMT): meridian (Sun, 29 Oct 2017 15:47:36 GMT): meridian (Sun, 29 Oct 2017 15:47:44 GMT): ivtpz (Sun, 29 Oct 2017 17:31:23 GMT): zorrothefox (Mon, 30 Oct 2017 01:30:53 GMT): qixiaozzz (Mon, 30 Oct 2017 02:30:40 GMT): Dan (Mon, 30 Oct 2017 13:15:55 GMT): meridian (Mon, 30 Oct 2017 13:16:15 GMT): meridian (Mon, 30 Oct 2017 13:16:28 GMT): meridian (Mon, 30 Oct 2017 13:17:09 GMT): meridian (Mon, 30 Oct 2017 13:17:55 GMT): Dan (Mon, 30 Oct 2017 14:10:34 GMT): zac (Mon, 30 Oct 2017 15:17:53 GMT): zac (Mon, 30 Oct 2017 15:18:30 GMT): zac (Mon, 30 Oct 2017 15:18:30 GMT): zac (Mon, 30 Oct 2017 15:29:23 GMT): meridian (Mon, 30 Oct 2017 16:19:45 GMT): meridian (Mon, 30 Oct 2017 16:20:18 GMT): meridian (Mon, 30 Oct 2017 16:20:42 GMT): meridian (Mon, 30 Oct 2017 16:21:08 GMT): ganbold (Tue, 31 Oct 2017 11:28:11 GMT): urkidi (Tue, 31 Oct 2017 12:58:09 GMT): Dan (Tue, 31 Oct 2017 13:05:54 GMT): ganbold (Tue, 31 Oct 2017 13:18:53 GMT): grovnick (Tue, 31 Oct 2017 14:52:23 GMT): zac (Tue, 31 Oct 2017 14:58:39 GMT): zac (Tue, 31 Oct 2017 15:03:35 GMT): amundson (Wed, 01 Nov 2017 01:47:54 GMT): grovnick (Wed, 01 Nov 2017 10:36:22 GMT): amundson (Wed, 01 Nov 2017 12:39:56 GMT): amundson (Wed, 01 Nov 2017 12:44:35 GMT): amundson (Wed, 01 Nov 2017 12:45:02 GMT): Dan (Wed, 01 Nov 2017 14:53:00 GMT): zac (Wed, 01 Nov 2017 14:54:01 GMT): zac (Wed, 01 Nov 2017 14:54:34 GMT): zac (Wed, 01 Nov 2017 14:54:34 GMT): zac (Wed, 01 Nov 2017 14:55:11 GMT): zac (Wed, 01 Nov 2017 14:56:06 GMT): zac (Wed, 01 Nov 2017 14:57:24 GMT): zac (Wed, 01 Nov 2017 14:57:40 GMT): zac (Wed, 01 Nov 2017 14:58:15 GMT): zac (Wed, 01 Nov 2017 14:58:51 GMT): zac (Wed, 01 Nov 2017 14:58:59 GMT): Dan (Wed, 01 Nov 2017 15:03:20 GMT): zac (Wed, 01 Nov 2017 15:03:48 GMT): chris (Wed, 01 Nov 2017 15:08:03 GMT): chris (Wed, 01 Nov 2017 15:11:11 GMT): Dan (Wed, 01 Nov 2017 15:16:58 GMT): Dan (Wed, 01 Nov 2017 15:20:35 GMT): drozd (Wed, 01 Nov 2017 15:23:32 GMT): drozd (Wed, 01 Nov 2017 15:24:48 GMT): chris (Wed, 01 Nov 2017 15:25:26 GMT): chris (Wed, 01 Nov 2017 15:26:36 GMT): chris (Wed, 01 Nov 2017 15:31:54 GMT): sam (Wed, 01 Nov 2017 15:32:12 GMT): chris (Wed, 01 Nov 2017 15:37:24 GMT): zac (Wed, 01 Nov 2017 15:37:43 GMT): chris (Wed, 01 Nov 2017 15:39:14 GMT): zac (Wed, 01 Nov 2017 15:39:55 GMT): chris (Wed, 01 Nov 2017 15:42:15 GMT): kolawoleOlulana (Wed, 01 Nov 2017 15:44:46 GMT): zac (Wed, 01 Nov 2017 15:45:47 GMT): zac (Wed, 01 Nov 2017 15:47:30 GMT): zac (Wed, 01 Nov 2017 15:47:56 GMT): chris (Wed, 01 Nov 2017 15:49:27 GMT): zac (Wed, 01 Nov 2017 15:50:41 GMT): zac (Wed, 01 Nov 2017 15:50:49 GMT): zac (Wed, 01 Nov 2017 15:51:22 GMT): zac (Wed, 01 Nov 2017 15:51:36 GMT): zac (Wed, 01 Nov 2017 15:51:50 GMT): zac (Wed, 01 Nov 2017 15:52:29 GMT): zac (Wed, 01 Nov 2017 15:52:40 GMT): chris (Wed, 01 Nov 2017 15:56:06 GMT): Dan (Wed, 01 Nov 2017 16:00:23 GMT): zac (Wed, 01 Nov 2017 16:01:04 GMT): Dan (Wed, 01 Nov 2017 16:02:37 GMT): chris (Wed, 01 Nov 2017 16:02:53 GMT): sam (Wed, 01 Nov 2017 16:22:51 GMT): zac (Wed, 01 Nov 2017 16:29:45 GMT): zac (Wed, 01 Nov 2017 16:30:07 GMT): zac (Wed, 01 Nov 2017 16:30:24 GMT): zac (Wed, 01 Nov 2017 16:30:41 GMT): zac (Wed, 01 Nov 2017 16:35:54 GMT): sam (Wed, 01 Nov 2017 16:43:45 GMT): Dan (Wed, 01 Nov 2017 16:45:13 GMT): sam (Wed, 01 Nov 2017 16:45:43 GMT): chris (Wed, 01 Nov 2017 16:49:12 GMT): zac (Wed, 01 Nov 2017 16:51:40 GMT): zac (Wed, 01 Nov 2017 16:55:33 GMT): zac (Wed, 01 Nov 2017 16:56:21 GMT): zac (Wed, 01 Nov 2017 16:57:44 GMT): zac (Wed, 01 Nov 2017 16:58:10 GMT): zac (Wed, 01 Nov 2017 16:59:09 GMT): zac (Wed, 01 Nov 2017 16:59:31 GMT): zac (Wed, 01 Nov 2017 16:59:49 GMT): zac (Wed, 01 Nov 2017 17:00:28 GMT): zac (Wed, 01 Nov 2017 17:01:36 GMT): sam (Wed, 01 Nov 2017 17:04:40 GMT): sam (Wed, 01 Nov 2017 17:04:48 GMT): mfford (Wed, 01 Nov 2017 17:05:27 GMT): zac (Wed, 01 Nov 2017 17:24:03 GMT): kelly_ (Wed, 01 Nov 2017 17:27:08 GMT): kelly_ (Wed, 01 Nov 2017 17:27:21 GMT): zac (Wed, 01 Nov 2017 17:29:53 GMT): kelly_ (Wed, 01 Nov 2017 17:30:06 GMT): kelly_ (Wed, 01 Nov 2017 17:30:25 GMT): zac (Wed, 01 Nov 2017 17:30:30 GMT): zac (Wed, 01 Nov 2017 17:31:26 GMT): kelly_ (Wed, 01 Nov 2017 17:31:48 GMT): kelly_ (Wed, 01 Nov 2017 17:31:52 GMT): kelly_ (Wed, 01 Nov 2017 17:32:01 GMT): kelly_ (Wed, 01 Nov 2017 17:32:17 GMT): kelly_ (Wed, 01 Nov 2017 17:33:28 GMT): kelly_ (Wed, 01 Nov 2017 17:33:35 GMT): zac (Wed, 01 Nov 2017 17:35:13 GMT): zac (Wed, 01 Nov 2017 17:35:13 GMT): kelly_ (Wed, 01 Nov 2017 17:35:30 GMT): zac (Wed, 01 Nov 2017 17:35:37 GMT): zac (Wed, 01 Nov 2017 17:35:47 GMT): kelly_ (Wed, 01 Nov 2017 17:36:17 GMT): kelly_ (Wed, 01 Nov 2017 17:36:19 GMT): kelly_ (Wed, 01 Nov 2017 18:05:19 GMT): kelly_ (Wed, 01 Nov 2017 18:05:23 GMT): kelly_ (Wed, 01 Nov 2017 18:05:43 GMT): kelly_ (Wed, 01 Nov 2017 18:06:12 GMT): kelly_ (Wed, 01 Nov 2017 18:06:14 GMT): kelly_ (Wed, 01 Nov 2017 18:06:25 GMT): zac (Wed, 01 Nov 2017 18:06:38 GMT): zac (Wed, 01 Nov 2017 18:06:54 GMT): kelly_ (Wed, 01 Nov 2017 18:07:34 GMT): zac (Wed, 01 Nov 2017 18:08:04 GMT): kelly_ (Wed, 01 Nov 2017 18:08:18 GMT): zac (Wed, 01 Nov 2017 18:08:22 GMT): zac (Wed, 01 Nov 2017 18:09:12 GMT): zac (Wed, 01 Nov 2017 18:09:25 GMT): kelly_ (Wed, 01 Nov 2017 18:09:27 GMT): zac (Wed, 01 Nov 2017 18:09:36 GMT): kelly_ (Wed, 01 Nov 2017 18:09:45 GMT): kelly_ (Wed, 01 Nov 2017 18:10:08 GMT): zac (Wed, 01 Nov 2017 18:10:27 GMT): kelly_ (Wed, 01 Nov 2017 18:10:58 GMT): kelly_ (Wed, 01 Nov 2017 18:11:05 GMT): kelly_ (Wed, 01 Nov 2017 18:11:15 GMT): zac (Wed, 01 Nov 2017 18:11:25 GMT): zac (Wed, 01 Nov 2017 18:11:33 GMT): zac (Wed, 01 Nov 2017 18:11:57 GMT): zac (Wed, 01 Nov 2017 18:12:08 GMT): zac (Wed, 01 Nov 2017 18:12:14 GMT): kelly_ (Wed, 01 Nov 2017 18:12:31 GMT): kelly_ (Wed, 01 Nov 2017 18:12:40 GMT): zac (Wed, 01 Nov 2017 18:13:35 GMT): kelly_ (Wed, 01 Nov 2017 18:13:43 GMT): zac (Wed, 01 Nov 2017 18:13:55 GMT): kelly_ (Wed, 01 Nov 2017 18:13:55 GMT): zac (Wed, 01 Nov 2017 18:14:04 GMT): zac (Wed, 01 Nov 2017 18:14:43 GMT): zac (Wed, 01 Nov 2017 18:14:58 GMT): zac (Wed, 01 Nov 2017 18:15:12 GMT): zac (Wed, 01 Nov 2017 18:15:41 GMT): zac (Wed, 01 Nov 2017 18:15:49 GMT): zac (Wed, 01 Nov 2017 18:15:54 GMT): kelly_ (Wed, 01 Nov 2017 18:17:19 GMT): kelly_ (Wed, 01 Nov 2017 18:17:41 GMT): zac (Wed, 01 Nov 2017 18:18:09 GMT): zac (Wed, 01 Nov 2017 18:18:15 GMT): kelly_ (Wed, 01 Nov 2017 18:20:46 GMT): kelly_ (Wed, 01 Nov 2017 18:21:18 GMT): zac (Wed, 01 Nov 2017 18:23:30 GMT): kelly_ (Wed, 01 Nov 2017 18:23:35 GMT): zac (Wed, 01 Nov 2017 18:23:56 GMT): zac (Wed, 01 Nov 2017 18:24:01 GMT): kelly_ (Wed, 01 Nov 2017 18:29:08 GMT): kelly_ (Wed, 01 Nov 2017 18:30:06 GMT): kelly_ (Wed, 01 Nov 2017 18:30:09 GMT): kelly_ (Wed, 01 Nov 2017 18:30:12 GMT): kelly_ (Wed, 01 Nov 2017 18:30:22 GMT): zac (Wed, 01 Nov 2017 18:30:31 GMT): kelly_ (Wed, 01 Nov 2017 18:31:01 GMT): kelly_ (Wed, 01 Nov 2017 18:31:10 GMT): zac (Wed, 01 Nov 2017 18:31:15 GMT): zac (Wed, 01 Nov 2017 18:31:21 GMT): kelly_ (Wed, 01 Nov 2017 18:31:44 GMT): zac (Wed, 01 Nov 2017 18:33:04 GMT): kelly_ (Wed, 01 Nov 2017 18:35:39 GMT): kelly_ (Wed, 01 Nov 2017 18:35:56 GMT): kelly_ (Wed, 01 Nov 2017 18:36:21 GMT): kelly_ (Wed, 01 Nov 2017 18:42:39 GMT): kelly_ (Wed, 01 Nov 2017 18:42:53 GMT): kelly_ (Wed, 01 Nov 2017 18:43:05 GMT): kelly_ (Wed, 01 Nov 2017 18:45:51 GMT): kelly_ (Wed, 01 Nov 2017 18:48:58 GMT): kelly_ (Wed, 01 Nov 2017 18:49:57 GMT): kelly_ (Wed, 01 Nov 2017 18:50:02 GMT): zac (Wed, 01 Nov 2017 19:00:08 GMT): zac (Wed, 01 Nov 2017 19:00:15 GMT): zac (Wed, 01 Nov 2017 19:03:31 GMT): zac (Wed, 01 Nov 2017 19:04:35 GMT): kelly_ (Wed, 01 Nov 2017 19:12:26 GMT): kelly_ (Wed, 01 Nov 2017 19:12:37 GMT): kelly_ (Wed, 01 Nov 2017 19:12:56 GMT): sam (Wed, 01 Nov 2017 19:17:44 GMT): kelly_ (Wed, 01 Nov 2017 19:22:42 GMT): zac (Wed, 01 Nov 2017 19:22:57 GMT): zac (Wed, 01 Nov 2017 19:23:08 GMT): zac (Wed, 01 Nov 2017 19:23:25 GMT): zac (Wed, 01 Nov 2017 19:23:38 GMT): zac (Wed, 01 Nov 2017 19:25:27 GMT): zac (Wed, 01 Nov 2017 19:25:27 GMT): sam (Wed, 01 Nov 2017 19:26:52 GMT): zac (Wed, 01 Nov 2017 19:29:42 GMT): zac (Wed, 01 Nov 2017 19:30:14 GMT): sam (Wed, 01 Nov 2017 19:30:54 GMT): zac (Wed, 01 Nov 2017 19:30:54 GMT): zac (Wed, 01 Nov 2017 19:31:40 GMT): zac (Wed, 01 Nov 2017 19:31:40 GMT): zac (Wed, 01 Nov 2017 19:33:11 GMT): zac (Wed, 01 Nov 2017 19:33:52 GMT): zac (Wed, 01 Nov 2017 19:34:33 GMT): zac (Wed, 01 Nov 2017 19:34:59 GMT): zac (Wed, 01 Nov 2017 19:35:19 GMT): zac (Wed, 01 Nov 2017 19:35:56 GMT): zac (Wed, 01 Nov 2017 19:36:49 GMT): zac (Wed, 01 Nov 2017 19:40:20 GMT): zac (Wed, 01 Nov 2017 19:40:20 GMT): zac (Wed, 01 Nov 2017 19:42:47 GMT): zac (Wed, 01 Nov 2017 19:43:06 GMT): zac (Wed, 01 Nov 2017 19:43:47 GMT): zac (Wed, 01 Nov 2017 19:44:04 GMT): sam (Wed, 01 Nov 2017 19:55:44 GMT): sam (Wed, 01 Nov 2017 19:56:36 GMT): zac (Wed, 01 Nov 2017 19:58:18 GMT): zac (Wed, 01 Nov 2017 19:59:44 GMT): zac (Wed, 01 Nov 2017 20:00:11 GMT): zac (Wed, 01 Nov 2017 20:01:07 GMT): zac (Wed, 01 Nov 2017 20:02:01 GMT): zac (Wed, 01 Nov 2017 20:02:53 GMT): zac (Wed, 01 Nov 2017 20:03:14 GMT): zac (Wed, 01 Nov 2017 20:03:14 GMT): zac (Wed, 01 Nov 2017 20:03:14 GMT): Dan (Wed, 01 Nov 2017 20:39:47 GMT): sam (Wed, 01 Nov 2017 21:11:06 GMT): Dan (Wed, 01 Nov 2017 21:59:11 GMT): zac (Wed, 01 Nov 2017 22:01:06 GMT): zac (Wed, 01 Nov 2017 22:01:15 GMT): zac (Wed, 01 Nov 2017 22:01:52 GMT): zac (Wed, 01 Nov 2017 22:06:38 GMT): msg2muthu (Thu, 02 Nov 2017 01:09:23 GMT): msg2muthu (Thu, 02 Nov 2017 01:09:31 GMT): Dan (Thu, 02 Nov 2017 01:43:00 GMT): askmish (Thu, 02 Nov 2017 09:58:35 GMT): msg2muthu (Thu, 02 Nov 2017 11:12:33 GMT): msg2muthu (Thu, 02 Nov 2017 11:12:33 GMT): askmish (Thu, 02 Nov 2017 12:46:27 GMT): msg2muthu (Thu, 02 Nov 2017 13:45:17 GMT): zac (Thu, 02 Nov 2017 14:28:34 GMT): zac (Thu, 02 Nov 2017 14:29:11 GMT): zac (Thu, 02 Nov 2017 14:29:41 GMT): zac (Thu, 02 Nov 2017 14:29:48 GMT): zac (Thu, 02 Nov 2017 14:30:33 GMT): msg2muthu (Thu, 02 Nov 2017 15:17:12 GMT): zac (Thu, 02 Nov 2017 15:23:48 GMT): zac (Thu, 02 Nov 2017 15:23:58 GMT): zac (Thu, 02 Nov 2017 15:24:07 GMT): zac (Thu, 02 Nov 2017 15:24:30 GMT): zac (Thu, 02 Nov 2017 15:24:49 GMT): zac (Thu, 02 Nov 2017 15:25:19 GMT): sam (Thu, 02 Nov 2017 16:26:33 GMT): zac (Thu, 02 Nov 2017 16:44:59 GMT): zac (Thu, 02 Nov 2017 16:45:09 GMT): zac (Thu, 02 Nov 2017 16:45:19 GMT): amundson (Thu, 02 Nov 2017 16:49:49 GMT): sam (Thu, 02 Nov 2017 17:37:02 GMT): sam (Thu, 02 Nov 2017 17:37:49 GMT): JohnHClark3 (Thu, 02 Nov 2017 17:52:56 GMT): zac (Thu, 02 Nov 2017 18:16:03 GMT): zac (Thu, 02 Nov 2017 18:16:20 GMT): teious (Thu, 02 Nov 2017 18:34:52 GMT): chris (Thu, 02 Nov 2017 20:22:34 GMT): amundson (Thu, 02 Nov 2017 20:35:43 GMT): chris (Thu, 02 Nov 2017 20:53:22 GMT): zac (Thu, 02 Nov 2017 20:53:59 GMT): boydjohnson (Thu, 02 Nov 2017 21:29:09 GMT): zac (Thu, 02 Nov 2017 21:30:22 GMT): zac (Thu, 02 Nov 2017 21:30:40 GMT): chris (Thu, 02 Nov 2017 21:41:50 GMT): zac (Thu, 02 Nov 2017 21:54:14 GMT): chris (Thu, 02 Nov 2017 22:30:29 GMT): chris (Thu, 02 Nov 2017 22:36:06 GMT): zac (Fri, 03 Nov 2017 01:49:29 GMT): zac (Fri, 03 Nov 2017 01:52:31 GMT): zac (Fri, 03 Nov 2017 01:53:52 GMT): zac (Fri, 03 Nov 2017 01:55:08 GMT): zac (Fri, 03 Nov 2017 01:57:40 GMT): zac (Fri, 03 Nov 2017 02:04:47 GMT): zac (Fri, 03 Nov 2017 02:04:47 GMT): meridian (Fri, 03 Nov 2017 03:56:11 GMT): meridian (Fri, 03 Nov 2017 03:56:22 GMT): meridian (Fri, 03 Nov 2017 03:56:35 GMT): meridian (Fri, 03 Nov 2017 03:56:53 GMT): rjones (Fri, 03 Nov 2017 04:45:15 GMT): chokha (Fri, 03 Nov 2017 06:48:59 GMT): meridian (Fri, 03 Nov 2017 12:57:41 GMT): chris (Fri, 03 Nov 2017 13:33:38 GMT): msg2muthu (Fri, 03 Nov 2017 13:35:56 GMT): bennettneale (Fri, 03 Nov 2017 16:19:30 GMT): sttysane (Fri, 03 Nov 2017 20:09:25 GMT): sttysane (Fri, 03 Nov 2017 20:13:11 GMT): Dan (Fri, 03 Nov 2017 20:23:34 GMT): Dan (Fri, 03 Nov 2017 20:24:49 GMT): Dan (Fri, 03 Nov 2017 20:26:03 GMT): sttysane (Fri, 03 Nov 2017 21:02:51 GMT): pschwarz (Fri, 03 Nov 2017 21:37:53 GMT): pschwarz (Fri, 03 Nov 2017 21:38:41 GMT): ajenie (Sat, 04 Nov 2017 16:24:51 GMT): ajenie (Sat, 04 Nov 2017 16:27:41 GMT): ajenie (Sat, 04 Nov 2017 16:27:41 GMT): ganbold (Sat, 04 Nov 2017 17:06:25 GMT): Dan (Sat, 04 Nov 2017 18:36:56 GMT): Dan (Sat, 04 Nov 2017 18:40:47 GMT): ajenie (Sun, 05 Nov 2017 03:17:28 GMT): AuHuR (Sun, 05 Nov 2017 08:59:26 GMT): BurnzZ (Sun, 05 Nov 2017 10:29:39 GMT): hhimanshu (Sun, 05 Nov 2017 16:36:25 GMT): mulderbm (Sun, 05 Nov 2017 19:30:02 GMT): tommling (Sun, 05 Nov 2017 20:11:20 GMT): tommling (Sun, 05 Nov 2017 20:11:20 GMT): tommling (Sun, 05 Nov 2017 20:11:20 GMT): tommling (Sun, 05 Nov 2017 20:13:59 GMT): miguelcalero (Sun, 05 Nov 2017 21:43:07 GMT): BeeKay (Sun, 05 Nov 2017 21:50:41 GMT): ganbold (Mon, 06 Nov 2017 02:55:28 GMT): Dan (Mon, 06 Nov 2017 04:00:49 GMT): Dan (Mon, 06 Nov 2017 04:04:29 GMT): ganbold (Mon, 06 Nov 2017 04:19:10 GMT): dniHze (Mon, 06 Nov 2017 10:14:14 GMT): anton_petrashkevich (Mon, 06 Nov 2017 14:29:06 GMT): dniHze (Mon, 06 Nov 2017 15:14:31 GMT): ganbold (Mon, 06 Nov 2017 15:25:50 GMT): ganbold (Mon, 06 Nov 2017 15:25:59 GMT): kelly_ (Mon, 06 Nov 2017 15:30:55 GMT): dniHze (Mon, 06 Nov 2017 15:31:11 GMT): kelly_ (Mon, 06 Nov 2017 15:31:24 GMT): kelly_ (Mon, 06 Nov 2017 15:32:30 GMT): ganbold (Mon, 06 Nov 2017 15:32:34 GMT): kenvhnguyen (Mon, 06 Nov 2017 16:50:19 GMT): cam.ross (Mon, 06 Nov 2017 19:45:48 GMT): TimWalton (Mon, 06 Nov 2017 20:17:10 GMT): bogoreser (Mon, 06 Nov 2017 20:42:24 GMT): bogoreser (Mon, 06 Nov 2017 20:42:44 GMT): BeeKay (Tue, 07 Nov 2017 02:58:49 GMT): Dan (Tue, 07 Nov 2017 04:26:18 GMT): dv29 (Tue, 07 Nov 2017 12:19:49 GMT): grkvlt (Tue, 07 Nov 2017 13:33:28 GMT): grkvlt (Tue, 07 Nov 2017 13:34:47 GMT): grkvlt (Tue, 07 Nov 2017 13:35:10 GMT): grkvlt (Tue, 07 Nov 2017 13:35:22 GMT): grkvlt (Tue, 07 Nov 2017 13:35:22 GMT): grkvlt (Tue, 07 Nov 2017 13:36:04 GMT): grkvlt (Tue, 07 Nov 2017 13:36:04 GMT): grkvlt (Tue, 07 Nov 2017 14:19:21 GMT): pschwarz (Tue, 07 Nov 2017 18:59:22 GMT): kelly_ (Tue, 07 Nov 2017 20:08:24 GMT): oatmealraisin (Wed, 08 Nov 2017 00:43:44 GMT): oatmealraisin (Wed, 08 Nov 2017 00:43:54 GMT): Dan (Wed, 08 Nov 2017 08:33:25 GMT): ahp (Wed, 08 Nov 2017 12:15:41 GMT): grkvlt (Wed, 08 Nov 2017 13:07:08 GMT): grkvlt (Wed, 08 Nov 2017 13:07:08 GMT): grkvlt (Wed, 08 Nov 2017 13:07:08 GMT): grkvlt (Wed, 08 Nov 2017 13:07:08 GMT): grkvlt (Wed, 08 Nov 2017 13:12:29 GMT): zac (Wed, 08 Nov 2017 15:00:05 GMT): zac (Wed, 08 Nov 2017 15:01:26 GMT): zac (Wed, 08 Nov 2017 15:01:50 GMT): zac (Wed, 08 Nov 2017 15:01:50 GMT): zac (Wed, 08 Nov 2017 15:03:08 GMT): maoxine (Wed, 08 Nov 2017 16:33:03 GMT): pd93 (Wed, 08 Nov 2017 16:37:16 GMT): maoxine (Wed, 08 Nov 2017 16:38:59 GMT): Jimskie (Wed, 08 Nov 2017 16:49:49 GMT): boydjohnson (Wed, 08 Nov 2017 16:55:34 GMT): jsmitchell (Wed, 08 Nov 2017 17:17:36 GMT): grkvlt (Wed, 08 Nov 2017 17:19:23 GMT): grkvlt (Wed, 08 Nov 2017 17:19:23 GMT): grkvlt (Wed, 08 Nov 2017 17:19:23 GMT): grkvlt (Wed, 08 Nov 2017 17:19:23 GMT): jsmitchell (Wed, 08 Nov 2017 17:20:15 GMT): grkvlt (Wed, 08 Nov 2017 17:20:36 GMT): jsmitchell (Wed, 08 Nov 2017 17:20:38 GMT): jsmitchell (Wed, 08 Nov 2017 17:20:41 GMT): jsmitchell (Wed, 08 Nov 2017 17:21:10 GMT): jsmitchell (Wed, 08 Nov 2017 17:21:30 GMT): jsmitchell (Wed, 08 Nov 2017 17:22:30 GMT): jsmitchell (Wed, 08 Nov 2017 17:22:42 GMT): jsmitchell (Wed, 08 Nov 2017 17:23:05 GMT): jsmitchell (Wed, 08 Nov 2017 17:23:22 GMT): grkvlt (Wed, 08 Nov 2017 17:23:32 GMT): jsmitchell (Wed, 08 Nov 2017 17:23:55 GMT): jsmitchell (Wed, 08 Nov 2017 17:23:59 GMT): jsmitchell (Wed, 08 Nov 2017 17:25:13 GMT): grkvlt (Wed, 08 Nov 2017 17:26:45 GMT): grkvlt (Wed, 08 Nov 2017 17:26:45 GMT): grkvlt (Wed, 08 Nov 2017 17:26:45 GMT): grkvlt (Wed, 08 Nov 2017 17:27:31 GMT): jsmitchell (Wed, 08 Nov 2017 17:28:10 GMT): grkvlt (Wed, 08 Nov 2017 17:29:02 GMT): grkvlt (Wed, 08 Nov 2017 17:29:02 GMT): jsmitchell (Wed, 08 Nov 2017 17:30:50 GMT): grkvlt (Wed, 08 Nov 2017 17:30:59 GMT): jsmitchell (Wed, 08 Nov 2017 17:32:27 GMT): jsmitchell (Wed, 08 Nov 2017 17:32:37 GMT): agunde (Wed, 08 Nov 2017 17:36:51 GMT): grkvlt (Wed, 08 Nov 2017 17:39:22 GMT): grkvlt (Wed, 08 Nov 2017 17:39:28 GMT): grkvlt (Wed, 08 Nov 2017 17:39:59 GMT): grkvlt (Wed, 08 Nov 2017 17:43:20 GMT): jsmitchell (Wed, 08 Nov 2017 17:43:46 GMT): grkvlt (Wed, 08 Nov 2017 17:45:07 GMT): agunde (Wed, 08 Nov 2017 17:46:24 GMT): agunde (Wed, 08 Nov 2017 17:46:24 GMT): agunde (Wed, 08 Nov 2017 17:46:24 GMT): pschwarz (Wed, 08 Nov 2017 17:46:50 GMT): jsmitchell (Wed, 08 Nov 2017 17:48:02 GMT): jsmitchell (Wed, 08 Nov 2017 17:48:02 GMT): jsmitchell (Wed, 08 Nov 2017 17:48:11 GMT): jsmitchell (Wed, 08 Nov 2017 17:48:26 GMT): jsmitchell (Wed, 08 Nov 2017 17:49:11 GMT): jsmitchell (Wed, 08 Nov 2017 17:49:11 GMT): grkvlt (Wed, 08 Nov 2017 17:49:25 GMT): jsmitchell (Wed, 08 Nov 2017 17:49:38 GMT): jsmitchell (Wed, 08 Nov 2017 17:49:45 GMT): grkvlt (Wed, 08 Nov 2017 17:50:36 GMT): jsmitchell (Wed, 08 Nov 2017 17:51:06 GMT): jsmitchell (Wed, 08 Nov 2017 17:51:17 GMT): jsmitchell (Wed, 08 Nov 2017 17:51:53 GMT): jsmitchell (Wed, 08 Nov 2017 17:52:34 GMT): jsmitchell (Wed, 08 Nov 2017 17:52:44 GMT): jsmitchell (Wed, 08 Nov 2017 17:53:30 GMT): jsmitchell (Wed, 08 Nov 2017 17:54:25 GMT): jsmitchell (Wed, 08 Nov 2017 17:54:36 GMT): jsmitchell (Wed, 08 Nov 2017 17:54:56 GMT): grkvlt (Wed, 08 Nov 2017 17:57:45 GMT): grkvlt (Wed, 08 Nov 2017 17:58:26 GMT): jsmitchell (Wed, 08 Nov 2017 17:59:30 GMT): jsmitchell (Wed, 08 Nov 2017 17:59:50 GMT): jsmitchell (Wed, 08 Nov 2017 17:59:57 GMT): grkvlt (Wed, 08 Nov 2017 18:00:40 GMT): grkvlt (Wed, 08 Nov 2017 18:01:17 GMT): oatmealraisin (Wed, 08 Nov 2017 18:01:41 GMT): oatmealraisin (Wed, 08 Nov 2017 18:01:53 GMT): oatmealraisin (Wed, 08 Nov 2017 18:02:02 GMT): jsmitchell (Wed, 08 Nov 2017 18:03:36 GMT): jsmitchell (Wed, 08 Nov 2017 18:03:51 GMT): jsmitchell (Wed, 08 Nov 2017 18:04:15 GMT): grkvlt (Wed, 08 Nov 2017 18:24:30 GMT): jsmitchell (Wed, 08 Nov 2017 18:29:34 GMT): grkvlt (Wed, 08 Nov 2017 18:42:10 GMT): grkvlt (Wed, 08 Nov 2017 18:42:10 GMT): jsmitchell (Wed, 08 Nov 2017 18:42:36 GMT): jsmitchell (Wed, 08 Nov 2017 18:43:28 GMT): grkvlt (Wed, 08 Nov 2017 18:43:40 GMT): grkvlt (Wed, 08 Nov 2017 18:45:39 GMT): grkvlt (Wed, 08 Nov 2017 18:45:54 GMT): jsmitchell (Wed, 08 Nov 2017 18:45:57 GMT): jsmitchell (Wed, 08 Nov 2017 18:46:04 GMT): jsmitchell (Wed, 08 Nov 2017 18:46:44 GMT): grkvlt (Wed, 08 Nov 2017 18:47:28 GMT): grkvlt (Wed, 08 Nov 2017 18:47:45 GMT): jsmitchell (Wed, 08 Nov 2017 18:48:30 GMT): grkvlt (Wed, 08 Nov 2017 18:49:16 GMT): boydjohnson (Wed, 08 Nov 2017 18:50:39 GMT): grkvlt (Wed, 08 Nov 2017 18:50:55 GMT): jsmitchell (Wed, 08 Nov 2017 18:50:58 GMT): jsmitchell (Wed, 08 Nov 2017 18:51:09 GMT): jsmitchell (Wed, 08 Nov 2017 18:52:07 GMT): grkvlt (Wed, 08 Nov 2017 18:52:42 GMT): grkvlt (Wed, 08 Nov 2017 18:56:29 GMT): grkvlt (Wed, 08 Nov 2017 18:57:38 GMT): maoxine (Wed, 08 Nov 2017 19:30:15 GMT): boydjohnson (Wed, 08 Nov 2017 19:30:29 GMT): maoxine (Wed, 08 Nov 2017 19:33:49 GMT): boydjohnson (Wed, 08 Nov 2017 19:34:44 GMT): maoxine (Wed, 08 Nov 2017 19:35:15 GMT): boydjohnson (Wed, 08 Nov 2017 19:35:40 GMT): jsmitchell (Wed, 08 Nov 2017 20:44:23 GMT): jsmitchell (Wed, 08 Nov 2017 20:44:35 GMT): jsmitchell (Wed, 08 Nov 2017 20:44:56 GMT): grkvlt (Wed, 08 Nov 2017 20:45:49 GMT): jsmitchell (Wed, 08 Nov 2017 20:46:20 GMT): srongzhe (Thu, 09 Nov 2017 00:51:37 GMT): yoni (Thu, 09 Nov 2017 11:08:20 GMT): grkvlt (Thu, 09 Nov 2017 14:27:48 GMT): amundson (Thu, 09 Nov 2017 14:30:01 GMT): amundson (Thu, 09 Nov 2017 14:30:40 GMT): msg2muthu (Thu, 09 Nov 2017 14:33:03 GMT): kelly_ (Thu, 09 Nov 2017 14:52:55 GMT): kelly_ (Thu, 09 Nov 2017 14:53:43 GMT): grkvlt (Thu, 09 Nov 2017 14:56:16 GMT): amundson (Thu, 09 Nov 2017 14:57:01 GMT): grkvlt (Thu, 09 Nov 2017 14:57:24 GMT): amundson (Thu, 09 Nov 2017 14:57:53 GMT): amundson (Thu, 09 Nov 2017 14:58:06 GMT): grkvlt (Thu, 09 Nov 2017 14:58:29 GMT): msg2muthu (Thu, 09 Nov 2017 15:10:28 GMT): msg2muthu (Thu, 09 Nov 2017 15:10:28 GMT): msg2muthu (Thu, 09 Nov 2017 15:12:26 GMT): msg2muthu (Thu, 09 Nov 2017 15:15:46 GMT): GhadiShayban (Thu, 09 Nov 2017 15:49:52 GMT): pschwarz (Thu, 09 Nov 2017 15:50:41 GMT): pschwarz (Thu, 09 Nov 2017 15:51:15 GMT): GhadiShayban (Thu, 09 Nov 2017 15:51:48 GMT): pschwarz (Thu, 09 Nov 2017 15:51:57 GMT): GhadiShayban (Thu, 09 Nov 2017 15:56:33 GMT): anton_petrashkevich (Thu, 09 Nov 2017 16:25:40 GMT): msg2muthu (Thu, 09 Nov 2017 16:31:40 GMT): GhadiShayban (Thu, 09 Nov 2017 16:37:21 GMT): pschwarz (Thu, 09 Nov 2017 16:51:44 GMT): pschwarz (Thu, 09 Nov 2017 16:52:21 GMT): pschwarz (Thu, 09 Nov 2017 16:52:21 GMT): pschwarz (Thu, 09 Nov 2017 16:52:55 GMT): pschwarz (Thu, 09 Nov 2017 16:53:23 GMT): hhimanshu (Thu, 09 Nov 2017 16:53:52 GMT): GhadiShayban (Thu, 09 Nov 2017 17:44:48 GMT): pschwarz (Thu, 09 Nov 2017 18:10:16 GMT): kelly_ (Thu, 09 Nov 2017 18:22:17 GMT): kelly_ (Thu, 09 Nov 2017 18:22:27 GMT): kelly_ (Thu, 09 Nov 2017 18:22:41 GMT): kelly_ (Thu, 09 Nov 2017 18:24:20 GMT): kelly_ (Thu, 09 Nov 2017 18:24:36 GMT): kelly_ (Thu, 09 Nov 2017 18:25:57 GMT): kelly_ (Thu, 09 Nov 2017 18:26:00 GMT): GhadiShayban (Thu, 09 Nov 2017 19:11:04 GMT): msg2muthu (Thu, 09 Nov 2017 19:25:24 GMT): msg2muthu (Thu, 09 Nov 2017 19:44:09 GMT): kelly_ (Thu, 09 Nov 2017 19:45:18 GMT): pschwarz (Thu, 09 Nov 2017 20:47:21 GMT): tommling (Thu, 09 Nov 2017 21:27:33 GMT): tommling (Thu, 09 Nov 2017 21:28:03 GMT): franckjhonatan (Fri, 10 Nov 2017 00:39:05 GMT): franckjhonatan (Fri, 10 Nov 2017 00:39:52 GMT): franckjhonatan (Fri, 10 Nov 2017 00:41:12 GMT): pradeeppadmarajaiah (Fri, 10 Nov 2017 11:46:24 GMT): grkvlt (Fri, 10 Nov 2017 12:47:52 GMT): grkvlt (Fri, 10 Nov 2017 12:48:28 GMT): jsmitchell (Fri, 10 Nov 2017 14:28:31 GMT): jsmitchell (Fri, 10 Nov 2017 14:30:54 GMT): jsmitchell (Fri, 10 Nov 2017 14:31:38 GMT): jsmitchell (Fri, 10 Nov 2017 14:32:37 GMT): NicoPretorius (Fri, 10 Nov 2017 14:45:46 GMT): grkvlt (Fri, 10 Nov 2017 15:19:57 GMT): msg2muthu (Fri, 10 Nov 2017 15:59:07 GMT): boydjohnson (Fri, 10 Nov 2017 16:02:08 GMT): brighty73 (Fri, 10 Nov 2017 16:03:49 GMT): msg2muthu (Fri, 10 Nov 2017 16:04:44 GMT): boydjohnson (Fri, 10 Nov 2017 16:09:57 GMT): brighty73 (Fri, 10 Nov 2017 16:10:07 GMT): msg2muthu (Fri, 10 Nov 2017 16:11:33 GMT): boydjohnson (Fri, 10 Nov 2017 16:11:56 GMT): boydjohnson (Fri, 10 Nov 2017 16:12:03 GMT): boydjohnson (Fri, 10 Nov 2017 16:12:09 GMT): brighty73 (Fri, 10 Nov 2017 16:13:30 GMT): boydjohnson (Fri, 10 Nov 2017 16:14:57 GMT): msg2muthu (Fri, 10 Nov 2017 16:16:42 GMT): boydjohnson (Fri, 10 Nov 2017 16:17:45 GMT): msg2muthu (Fri, 10 Nov 2017 16:19:02 GMT): brighty73 (Fri, 10 Nov 2017 16:20:28 GMT): msg2muthu (Fri, 10 Nov 2017 16:20:48 GMT): msg2muthu (Fri, 10 Nov 2017 16:20:48 GMT): zac (Fri, 10 Nov 2017 16:22:18 GMT): agunde (Fri, 10 Nov 2017 16:22:19 GMT): zac (Fri, 10 Nov 2017 16:22:28 GMT): msg2muthu (Fri, 10 Nov 2017 16:25:09 GMT): zac (Fri, 10 Nov 2017 16:27:53 GMT): zac (Fri, 10 Nov 2017 16:28:00 GMT): msg2muthu (Fri, 10 Nov 2017 16:31:02 GMT): brighty73 (Fri, 10 Nov 2017 16:32:53 GMT): zac (Fri, 10 Nov 2017 16:41:14 GMT): zac (Fri, 10 Nov 2017 16:41:34 GMT): msg2muthu (Fri, 10 Nov 2017 16:48:41 GMT): zac (Fri, 10 Nov 2017 16:49:16 GMT): zac (Fri, 10 Nov 2017 16:49:30 GMT): zac (Fri, 10 Nov 2017 16:49:57 GMT): msg2muthu (Fri, 10 Nov 2017 16:50:50 GMT): zac (Fri, 10 Nov 2017 16:51:14 GMT): zac (Fri, 10 Nov 2017 16:51:53 GMT): zac (Fri, 10 Nov 2017 16:52:26 GMT): msg2muthu (Fri, 10 Nov 2017 16:53:25 GMT): zac (Fri, 10 Nov 2017 16:55:35 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:33:35 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:33:41 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:33:44 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:34:10 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:34:14 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:34:28 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:34:34 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:34:41 GMT): boydjohnson (Fri, 10 Nov 2017 17:38:09 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:39:57 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:40:32 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:40:40 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:40:49 GMT): grkvlt (Fri, 10 Nov 2017 17:45:46 GMT): grkvlt (Fri, 10 Nov 2017 17:46:28 GMT): grkvlt (Fri, 10 Nov 2017 17:47:09 GMT): grkvlt (Fri, 10 Nov 2017 17:47:26 GMT): grkvlt (Fri, 10 Nov 2017 17:48:13 GMT): grkvlt (Fri, 10 Nov 2017 17:48:13 GMT): grkvlt (Fri, 10 Nov 2017 17:50:05 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:51:03 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:51:04 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:51:12 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:51:14 GMT): LEscobar-Driver (Fri, 10 Nov 2017 17:52:53 GMT): LEscobar-Driver (Fri, 10 Nov 2017 18:05:18 GMT): LEscobar-Driver (Fri, 10 Nov 2017 18:05:23 GMT): LEscobar-Driver (Fri, 10 Nov 2017 18:05:34 GMT): LEscobar-Driver (Fri, 10 Nov 2017 18:05:45 GMT): LEscobar-Driver (Fri, 10 Nov 2017 18:05:48 GMT): msg2muthu (Fri, 10 Nov 2017 18:43:43 GMT): zac (Fri, 10 Nov 2017 18:56:00 GMT): zac (Fri, 10 Nov 2017 18:58:38 GMT): msg2muthu (Fri, 10 Nov 2017 18:59:33 GMT): agunde (Fri, 10 Nov 2017 19:00:28 GMT): MicBowman (Fri, 10 Nov 2017 19:10:17 GMT): zac (Fri, 10 Nov 2017 19:12:38 GMT): zac (Fri, 10 Nov 2017 19:13:35 GMT): zac (Fri, 10 Nov 2017 19:13:55 GMT): grkvlt (Fri, 10 Nov 2017 19:26:46 GMT): msg2muthu (Fri, 10 Nov 2017 19:26:59 GMT): jsmitchell (Fri, 10 Nov 2017 19:27:20 GMT): msg2muthu (Fri, 10 Nov 2017 19:29:00 GMT): zac (Fri, 10 Nov 2017 19:29:53 GMT): rbuysse (Fri, 10 Nov 2017 19:30:08 GMT): rbuysse (Fri, 10 Nov 2017 19:30:26 GMT): jsmitchell (Fri, 10 Nov 2017 19:30:42 GMT): jsmitchell (Fri, 10 Nov 2017 19:31:05 GMT): jsmitchell (Fri, 10 Nov 2017 19:31:09 GMT): MicBowman (Fri, 10 Nov 2017 19:34:30 GMT): jsmitchell (Fri, 10 Nov 2017 19:36:02 GMT): MicBowman (Fri, 10 Nov 2017 19:36:30 GMT): msg2muthu (Fri, 10 Nov 2017 19:36:35 GMT): msg2muthu (Fri, 10 Nov 2017 19:36:56 GMT): zac (Fri, 10 Nov 2017 19:38:01 GMT): rbuysse (Fri, 10 Nov 2017 19:38:45 GMT): msg2muthu (Fri, 10 Nov 2017 19:39:47 GMT): zac (Fri, 10 Nov 2017 19:40:47 GMT): zac (Fri, 10 Nov 2017 19:41:21 GMT): MicBowman (Fri, 10 Nov 2017 19:41:28 GMT): zac (Fri, 10 Nov 2017 19:41:38 GMT): msg2muthu (Fri, 10 Nov 2017 19:41:56 GMT): zac (Fri, 10 Nov 2017 19:43:42 GMT): msg2muthu (Fri, 10 Nov 2017 19:43:43 GMT): zac (Fri, 10 Nov 2017 19:45:07 GMT): zac (Fri, 10 Nov 2017 19:45:13 GMT): msg2muthu (Fri, 10 Nov 2017 19:46:56 GMT): jsmitchell (Fri, 10 Nov 2017 19:49:31 GMT): zac (Fri, 10 Nov 2017 19:49:44 GMT): zac (Fri, 10 Nov 2017 19:50:53 GMT): zac (Fri, 10 Nov 2017 19:50:53 GMT): zac (Fri, 10 Nov 2017 19:51:45 GMT): MicBowman (Fri, 10 Nov 2017 19:51:58 GMT): zac (Fri, 10 Nov 2017 19:52:11 GMT): MicBowman (Fri, 10 Nov 2017 19:52:47 GMT): jsmitchell (Fri, 10 Nov 2017 19:52:55 GMT): MicBowman (Fri, 10 Nov 2017 19:53:02 GMT): jsmitchell (Fri, 10 Nov 2017 19:53:06 GMT): MicBowman (Fri, 10 Nov 2017 19:53:12 GMT): jsmitchell (Fri, 10 Nov 2017 19:53:15 GMT): MicBowman (Fri, 10 Nov 2017 19:53:36 GMT): jsmitchell (Fri, 10 Nov 2017 19:53:38 GMT): MicBowman (Fri, 10 Nov 2017 19:53:43 GMT): MicBowman (Fri, 10 Nov 2017 19:53:45 GMT): jsmitchell (Fri, 10 Nov 2017 19:53:52 GMT): msg2muthu (Fri, 10 Nov 2017 19:53:57 GMT): MicBowman (Fri, 10 Nov 2017 19:54:09 GMT): msg2muthu (Fri, 10 Nov 2017 19:54:13 GMT): jsmitchell (Fri, 10 Nov 2017 19:54:22 GMT): jsmitchell (Fri, 10 Nov 2017 19:55:12 GMT): jsmitchell (Fri, 10 Nov 2017 19:55:27 GMT): jsmitchell (Fri, 10 Nov 2017 19:55:35 GMT): cianx (Fri, 10 Nov 2017 19:58:56 GMT): jsmitchell (Fri, 10 Nov 2017 19:59:18 GMT): jsmitchell (Fri, 10 Nov 2017 20:03:00 GMT): jsmitchell (Fri, 10 Nov 2017 20:03:07 GMT): MicBowman (Fri, 10 Nov 2017 20:08:12 GMT): MicBowman (Fri, 10 Nov 2017 20:08:22 GMT): jsmitchell (Fri, 10 Nov 2017 20:17:42 GMT): jsmitchell (Fri, 10 Nov 2017 20:17:54 GMT): jsmitchell (Fri, 10 Nov 2017 20:18:00 GMT): MicBowman (Fri, 10 Nov 2017 20:18:03 GMT): jsmitchell (Fri, 10 Nov 2017 20:18:27 GMT): jsmitchell (Fri, 10 Nov 2017 20:18:51 GMT): jsmitchell (Fri, 10 Nov 2017 21:18:25 GMT): jsmitchell (Fri, 10 Nov 2017 21:22:14 GMT): jsmitchell (Fri, 10 Nov 2017 21:22:21 GMT): cianx (Fri, 10 Nov 2017 23:41:20 GMT): cianx (Fri, 10 Nov 2017 23:42:44 GMT): cianx (Fri, 10 Nov 2017 23:46:10 GMT): Dan (Sat, 11 Nov 2017 02:16:10 GMT): Dan (Sat, 11 Nov 2017 02:22:43 GMT): cianx (Sat, 11 Nov 2017 05:28:44 GMT): cianx (Sat, 11 Nov 2017 05:30:45 GMT): cianx (Sat, 11 Nov 2017 05:31:07 GMT): cianx (Sat, 11 Nov 2017 05:31:19 GMT): cianx (Sat, 11 Nov 2017 05:31:47 GMT): Tianjian (Sat, 11 Nov 2017 08:55:37 GMT): grkvlt (Sat, 11 Nov 2017 16:22:52 GMT): cianx (Sat, 11 Nov 2017 16:27:27 GMT): Dan (Sat, 11 Nov 2017 17:15:26 GMT): tanya_ogwel (Sat, 11 Nov 2017 21:33:29 GMT): george (Sun, 12 Nov 2017 20:43:34 GMT): george (Sun, 12 Nov 2017 20:45:43 GMT): rojanjose (Mon, 13 Nov 2017 04:11:55 GMT): Otherside (Mon, 13 Nov 2017 14:06:37 GMT): LaurenceWBD (Mon, 13 Nov 2017 14:46:43 GMT): zac (Mon, 13 Nov 2017 16:47:57 GMT): Dan (Mon, 13 Nov 2017 17:00:22 GMT): rbuysse (Mon, 13 Nov 2017 17:07:27 GMT): pschwarz (Mon, 13 Nov 2017 20:38:48 GMT): pschwarz (Mon, 13 Nov 2017 20:38:48 GMT): pschwarz (Mon, 13 Nov 2017 20:40:38 GMT): jsmitchell (Mon, 13 Nov 2017 20:42:55 GMT): Dan (Mon, 13 Nov 2017 21:21:58 GMT): cianx (Mon, 13 Nov 2017 21:38:02 GMT): jsmitchell (Mon, 13 Nov 2017 21:38:24 GMT): jsmitchell (Mon, 13 Nov 2017 21:38:37 GMT): jsmitchell (Mon, 13 Nov 2017 21:38:51 GMT): cianx (Mon, 13 Nov 2017 21:38:54 GMT): cianx (Mon, 13 Nov 2017 21:39:20 GMT): amundson (Mon, 13 Nov 2017 21:41:18 GMT): cianx (Mon, 13 Nov 2017 21:42:21 GMT): amundson (Mon, 13 Nov 2017 21:43:25 GMT): amundson (Mon, 13 Nov 2017 21:44:39 GMT): cianx (Mon, 13 Nov 2017 21:44:50 GMT): jsmitchell (Mon, 13 Nov 2017 21:45:36 GMT): jsmitchell (Mon, 13 Nov 2017 21:45:54 GMT): cianx (Mon, 13 Nov 2017 21:46:33 GMT): cianx (Mon, 13 Nov 2017 21:47:34 GMT): amundson (Mon, 13 Nov 2017 21:49:47 GMT): amundson (Mon, 13 Nov 2017 21:51:31 GMT): cianx (Mon, 13 Nov 2017 21:52:32 GMT): amundson (Mon, 13 Nov 2017 21:53:02 GMT): amundson (Mon, 13 Nov 2017 21:53:04 GMT): cianx (Mon, 13 Nov 2017 21:53:38 GMT): amundson (Mon, 13 Nov 2017 21:54:01 GMT): amundson (Mon, 13 Nov 2017 21:54:25 GMT): amundson (Mon, 13 Nov 2017 21:55:27 GMT): amundson (Mon, 13 Nov 2017 21:56:52 GMT): Dan (Mon, 13 Nov 2017 22:03:21 GMT): Dan (Mon, 13 Nov 2017 22:04:09 GMT): Dan (Mon, 13 Nov 2017 22:05:06 GMT): kelly_ (Mon, 13 Nov 2017 22:05:37 GMT): kelly_ (Mon, 13 Nov 2017 22:05:46 GMT): kelly_ (Mon, 13 Nov 2017 22:06:05 GMT): amundson (Mon, 13 Nov 2017 22:06:40 GMT): Dan (Mon, 13 Nov 2017 22:06:45 GMT): amundson (Mon, 13 Nov 2017 22:08:41 GMT): amundson (Mon, 13 Nov 2017 22:09:14 GMT): amundson (Mon, 13 Nov 2017 22:09:23 GMT): Dan (Mon, 13 Nov 2017 22:09:37 GMT): amundson (Mon, 13 Nov 2017 22:09:41 GMT): amundson (Mon, 13 Nov 2017 22:10:49 GMT): amundson (Mon, 13 Nov 2017 22:10:50 GMT): amundson (Mon, 13 Nov 2017 22:12:11 GMT): Dan (Mon, 13 Nov 2017 22:13:05 GMT): amundson (Mon, 13 Nov 2017 22:13:44 GMT): amundson (Mon, 13 Nov 2017 22:13:59 GMT): amundson (Mon, 13 Nov 2017 22:14:50 GMT): Dan (Mon, 13 Nov 2017 22:14:59 GMT): Dan (Mon, 13 Nov 2017 22:15:45 GMT): amundson (Mon, 13 Nov 2017 22:15:56 GMT): amundson (Mon, 13 Nov 2017 22:16:56 GMT): Dan (Mon, 13 Nov 2017 22:17:04 GMT): amundson (Mon, 13 Nov 2017 22:17:41 GMT): amundson (Mon, 13 Nov 2017 22:18:36 GMT): amundson (Mon, 13 Nov 2017 22:19:38 GMT): amundson (Mon, 13 Nov 2017 22:20:46 GMT): amundson (Mon, 13 Nov 2017 22:22:28 GMT): Dan (Mon, 13 Nov 2017 22:33:31 GMT): Dan (Mon, 13 Nov 2017 22:34:50 GMT): amundson (Mon, 13 Nov 2017 22:39:45 GMT): Dan (Mon, 13 Nov 2017 22:40:10 GMT): rahulchan (Mon, 13 Nov 2017 23:50:24 GMT): amundson (Tue, 14 Nov 2017 15:08:43 GMT): amundson (Tue, 14 Nov 2017 15:09:29 GMT): GhadiShayban (Tue, 14 Nov 2017 15:44:02 GMT): GhadiShayban (Tue, 14 Nov 2017 15:44:02 GMT): GhadiShayban (Tue, 14 Nov 2017 15:44:02 GMT): pschwarz (Tue, 14 Nov 2017 15:53:43 GMT): pschwarz (Tue, 14 Nov 2017 15:54:57 GMT): GhadiShayban (Tue, 14 Nov 2017 17:23:23 GMT): Cryptobuster (Tue, 14 Nov 2017 23:06:50 GMT): ajksharma (Wed, 15 Nov 2017 08:07:19 GMT): dniHze (Wed, 15 Nov 2017 15:00:12 GMT): pschwarz (Wed, 15 Nov 2017 15:29:39 GMT): dniHze (Wed, 15 Nov 2017 15:32:03 GMT): dniHze (Wed, 15 Nov 2017 15:39:46 GMT): pschwarz (Wed, 15 Nov 2017 15:46:45 GMT): benoit.razet (Wed, 15 Nov 2017 18:08:52 GMT): jvilchez (Wed, 15 Nov 2017 18:14:13 GMT): benoit.razet (Wed, 15 Nov 2017 18:21:33 GMT): agunde (Wed, 15 Nov 2017 18:26:00 GMT): benoit.razet (Wed, 15 Nov 2017 18:32:10 GMT): pschwarz (Wed, 15 Nov 2017 21:46:35 GMT): GhadiShayban (Wed, 15 Nov 2017 21:47:59 GMT): abelsilva (Thu, 16 Nov 2017 01:18:12 GMT): divssheth (Thu, 16 Nov 2017 07:54:04 GMT): balmeida (Thu, 16 Nov 2017 10:29:17 GMT): GhadiShayban (Thu, 16 Nov 2017 15:52:39 GMT): jsmitchell (Thu, 16 Nov 2017 16:01:23 GMT): jsmitchell (Thu, 16 Nov 2017 16:01:33 GMT): jsmitchell (Thu, 16 Nov 2017 16:01:58 GMT): benoit.razet (Thu, 16 Nov 2017 16:02:07 GMT): benoit.razet (Thu, 16 Nov 2017 16:02:59 GMT): benoit.razet (Thu, 16 Nov 2017 16:02:59 GMT): jsmitchell (Thu, 16 Nov 2017 16:03:09 GMT): jsmitchell (Thu, 16 Nov 2017 16:12:32 GMT): benoit.razet (Thu, 16 Nov 2017 16:15:42 GMT): benoit.razet (Thu, 16 Nov 2017 16:24:48 GMT): jsmitchell (Thu, 16 Nov 2017 16:46:00 GMT): jsmitchell (Thu, 16 Nov 2017 16:46:08 GMT): mpr 10 (Thu, 16 Nov 2017 16:49:04 GMT): gokhankocak (Thu, 16 Nov 2017 16:58:08 GMT): chandrairawan (Fri, 17 Nov 2017 03:35:13 GMT): czarx (Fri, 17 Nov 2017 04:20:56 GMT): guoger (Fri, 17 Nov 2017 05:43:18 GMT): guoger (Fri, 17 Nov 2017 05:45:20 GMT): amolk (Fri, 17 Nov 2017 06:44:10 GMT): adamludvik (Fri, 17 Nov 2017 19:32:46 GMT): Infodataway (Sat, 18 Nov 2017 10:34:22 GMT): ajenie (Sat, 18 Nov 2017 11:14:13 GMT): ajenie (Sat, 18 Nov 2017 11:14:13 GMT): ajenie (Sat, 18 Nov 2017 11:15:18 GMT): ajenie (Sat, 18 Nov 2017 11:15:51 GMT): ajenie (Sat, 18 Nov 2017 11:20:09 GMT): ajenie (Sat, 18 Nov 2017 11:20:09 GMT): ajenie (Sat, 18 Nov 2017 11:20:30 GMT): ajenie (Sat, 18 Nov 2017 11:20:30 GMT): ajenie (Sat, 18 Nov 2017 11:20:30 GMT): ajenie (Sat, 18 Nov 2017 11:20:30 GMT): ajenie (Sat, 18 Nov 2017 11:23:24 GMT): ajenie (Sat, 18 Nov 2017 11:23:24 GMT): ajenie (Sat, 18 Nov 2017 11:23:24 GMT): ajenie (Sat, 18 Nov 2017 11:23:24 GMT): ajenie (Sat, 18 Nov 2017 11:23:24 GMT): ajenie (Sat, 18 Nov 2017 11:23:24 GMT): ajenie (Sat, 18 Nov 2017 11:31:12 GMT): ajenie (Sat, 18 Nov 2017 11:31:12 GMT): ajenie (Sat, 18 Nov 2017 11:31:12 GMT): ajenie (Sat, 18 Nov 2017 11:35:06 GMT): ajenie (Sat, 18 Nov 2017 11:35:06 GMT): ajenie (Sat, 18 Nov 2017 11:44:12 GMT): ajenie (Sat, 18 Nov 2017 11:44:12 GMT): ajenie (Sat, 18 Nov 2017 11:44:12 GMT): ajenie (Sat, 18 Nov 2017 11:44:12 GMT): jasoncys (Sat, 18 Nov 2017 12:02:26 GMT): jasoncys (Sat, 18 Nov 2017 12:10:58 GMT): jasoncys (Sat, 18 Nov 2017 13:12:46 GMT): agunde (Sat, 18 Nov 2017 16:38:16 GMT): agunde (Sat, 18 Nov 2017 16:39:51 GMT): agunde (Sat, 18 Nov 2017 16:55:58 GMT): agunde (Sat, 18 Nov 2017 16:56:29 GMT): agunde (Sat, 18 Nov 2017 16:57:05 GMT): agunde (Sat, 18 Nov 2017 17:00:39 GMT): creativemonk (Sun, 19 Nov 2017 06:02:26 GMT): ajenie (Sun, 19 Nov 2017 07:37:52 GMT): ajenie (Sun, 19 Nov 2017 07:56:43 GMT): ajenie (Sun, 19 Nov 2017 07:57:51 GMT): ajenie (Sun, 19 Nov 2017 09:42:33 GMT): ajenie (Sun, 19 Nov 2017 09:42:33 GMT): drxos (Sun, 19 Nov 2017 14:16:00 GMT): zac (Sun, 19 Nov 2017 15:14:33 GMT): zac (Sun, 19 Nov 2017 15:15:25 GMT): yoni (Sun, 19 Nov 2017 15:15:37 GMT): jasoncys (Sun, 19 Nov 2017 15:15:58 GMT): zac (Sun, 19 Nov 2017 15:16:24 GMT): zac (Sun, 19 Nov 2017 15:19:38 GMT): zac (Sun, 19 Nov 2017 15:19:38 GMT): zac (Sun, 19 Nov 2017 15:20:07 GMT): zac (Sun, 19 Nov 2017 15:21:23 GMT): zac (Sun, 19 Nov 2017 15:22:44 GMT): zac (Sun, 19 Nov 2017 15:23:49 GMT): yoni (Sun, 19 Nov 2017 15:24:51 GMT): yoni (Sun, 19 Nov 2017 15:25:55 GMT): yoni (Sun, 19 Nov 2017 15:27:24 GMT): zac (Sun, 19 Nov 2017 15:44:08 GMT): zac (Sun, 19 Nov 2017 15:45:19 GMT): zac (Sun, 19 Nov 2017 15:45:45 GMT): yoni (Sun, 19 Nov 2017 15:56:12 GMT): zac (Sun, 19 Nov 2017 15:56:26 GMT): agunde (Sun, 19 Nov 2017 16:22:03 GMT): agunde (Sun, 19 Nov 2017 16:24:51 GMT): saadmir (Mon, 20 Nov 2017 03:01:11 GMT): ajenie (Mon, 20 Nov 2017 05:19:01 GMT): zac (Mon, 20 Nov 2017 07:16:09 GMT): nitefrog (Mon, 20 Nov 2017 09:07:03 GMT): umairmansha (Mon, 20 Nov 2017 13:26:00 GMT): Dan (Mon, 20 Nov 2017 19:53:40 GMT): cianx (Mon, 20 Nov 2017 19:54:33 GMT): Dan (Mon, 20 Nov 2017 20:26:14 GMT): Dan (Mon, 20 Nov 2017 20:30:01 GMT): cianx (Mon, 20 Nov 2017 20:30:24 GMT): Dan (Mon, 20 Nov 2017 21:15:34 GMT): Dan (Mon, 20 Nov 2017 21:15:58 GMT): yoni (Tue, 21 Nov 2017 06:14:34 GMT): askmish (Tue, 21 Nov 2017 08:20:33 GMT): askmish (Tue, 21 Nov 2017 08:20:33 GMT): askmish (Tue, 21 Nov 2017 08:20:33 GMT): askmish (Tue, 21 Nov 2017 08:20:52 GMT): marksta (Tue, 21 Nov 2017 09:04:25 GMT): evandro.franco (Tue, 21 Nov 2017 10:47:00 GMT): divssheth (Tue, 21 Nov 2017 14:58:57 GMT): divssheth (Tue, 21 Nov 2017 14:59:11 GMT): jsmitchell (Tue, 21 Nov 2017 17:15:40 GMT): GhadiShayban (Tue, 21 Nov 2017 17:15:52 GMT): jsmitchell (Tue, 21 Nov 2017 17:16:11 GMT): benoit.razet (Tue, 21 Nov 2017 17:16:37 GMT): jsmitchell (Tue, 21 Nov 2017 17:16:50 GMT): pschwarz (Tue, 21 Nov 2017 17:28:58 GMT): pschwarz (Tue, 21 Nov 2017 17:29:25 GMT): shahdhruv 2 (Wed, 22 Nov 2017 09:05:07 GMT): WendellNichols (Wed, 22 Nov 2017 14:22:15 GMT): jsmitchell (Wed, 22 Nov 2017 17:58:45 GMT): benoit.razet (Wed, 22 Nov 2017 17:59:30 GMT): GhadiShayban (Wed, 22 Nov 2017 18:33:44 GMT): jsmitchell (Wed, 22 Nov 2017 18:33:59 GMT): GhadiShayban (Wed, 22 Nov 2017 18:34:01 GMT): pschwarz (Wed, 22 Nov 2017 19:14:19 GMT): chandrairawan (Thu, 23 Nov 2017 02:17:11 GMT): DrewLexmond (Thu, 23 Nov 2017 02:46:35 GMT): ajenie (Thu, 23 Nov 2017 05:02:18 GMT): BDAP1729 (Thu, 23 Nov 2017 06:20:42 GMT): BDAP1729 (Thu, 23 Nov 2017 06:20:55 GMT): BDAP1729 (Thu, 23 Nov 2017 06:20:55 GMT): zzying (Thu, 23 Nov 2017 08:25:20 GMT): BasanthVerma (Thu, 23 Nov 2017 10:37:38 GMT): grkvlt (Thu, 23 Nov 2017 23:10:46 GMT): grkvlt (Thu, 23 Nov 2017 23:21:15 GMT): grkvlt (Thu, 23 Nov 2017 23:25:53 GMT): ruchit 2 (Thu, 23 Nov 2017 23:33:58 GMT): Dan (Fri, 24 Nov 2017 02:18:36 GMT): michaelcwang2 (Fri, 24 Nov 2017 02:51:54 GMT): vinit_3101 (Fri, 24 Nov 2017 07:49:28 GMT): Dan (Fri, 24 Nov 2017 16:20:29 GMT): ajenie (Fri, 24 Nov 2017 23:00:01 GMT): ajenie (Fri, 24 Nov 2017 23:00:01 GMT): grkvlt (Sat, 25 Nov 2017 17:22:45 GMT): bmiller59 (Sat, 25 Nov 2017 19:31:15 GMT): mikykey (Sun, 26 Nov 2017 07:43:38 GMT): BeeKay (Sun, 26 Nov 2017 18:57:41 GMT): mfford (Mon, 27 Nov 2017 14:34:56 GMT): agunde (Mon, 27 Nov 2017 14:35:18 GMT): woodyjon (Mon, 27 Nov 2017 14:36:00 GMT): mfford (Mon, 27 Nov 2017 14:36:41 GMT): woodyjon (Mon, 27 Nov 2017 14:42:59 GMT): jsmitchell (Mon, 27 Nov 2017 16:02:43 GMT): jsmitchell (Mon, 27 Nov 2017 16:04:11 GMT): jsmitchell (Mon, 27 Nov 2017 16:04:11 GMT): woodyjon (Mon, 27 Nov 2017 16:12:29 GMT): jsmitchell (Mon, 27 Nov 2017 16:12:42 GMT): jsmitchell (Mon, 27 Nov 2017 16:12:52 GMT): woodyjon (Mon, 27 Nov 2017 16:22:05 GMT): woodyjon (Mon, 27 Nov 2017 16:23:16 GMT): woodyjon (Mon, 27 Nov 2017 16:23:30 GMT): jsmitchell (Mon, 27 Nov 2017 16:27:44 GMT): jsmitchell (Mon, 27 Nov 2017 16:28:05 GMT): woodyjon (Mon, 27 Nov 2017 16:29:47 GMT): woodyjon (Mon, 27 Nov 2017 16:30:25 GMT): jsmitchell (Mon, 27 Nov 2017 16:51:19 GMT): jsmitchell (Mon, 27 Nov 2017 16:55:31 GMT): jsmitchell (Mon, 27 Nov 2017 16:55:41 GMT): woodyjon (Mon, 27 Nov 2017 17:02:47 GMT): woodyjon (Mon, 27 Nov 2017 17:05:14 GMT): woodyjon (Mon, 27 Nov 2017 17:17:10 GMT): pschwarz (Mon, 27 Nov 2017 17:18:33 GMT): woodyjon (Mon, 27 Nov 2017 17:19:07 GMT): woodyjon (Mon, 27 Nov 2017 17:19:37 GMT): meridian (Mon, 27 Nov 2017 18:14:31 GMT): zac (Mon, 27 Nov 2017 18:20:17 GMT): zac (Mon, 27 Nov 2017 18:20:17 GMT): meridian (Mon, 27 Nov 2017 18:22:09 GMT): zac (Mon, 27 Nov 2017 18:22:28 GMT): zac (Mon, 27 Nov 2017 18:23:03 GMT): meridian (Mon, 27 Nov 2017 18:23:16 GMT): zac (Mon, 27 Nov 2017 18:23:19 GMT): zac (Mon, 27 Nov 2017 18:23:32 GMT): meridian (Mon, 27 Nov 2017 18:23:44 GMT): meridian (Mon, 27 Nov 2017 18:23:59 GMT): zac (Mon, 27 Nov 2017 18:24:18 GMT): zac (Mon, 27 Nov 2017 18:24:18 GMT): meridian (Mon, 27 Nov 2017 18:24:32 GMT): meridian (Mon, 27 Nov 2017 18:24:48 GMT): meridian (Mon, 27 Nov 2017 18:24:55 GMT): meridian (Mon, 27 Nov 2017 18:25:08 GMT): zac (Mon, 27 Nov 2017 18:25:24 GMT): meridian (Mon, 27 Nov 2017 18:25:43 GMT): zac (Mon, 27 Nov 2017 18:25:51 GMT): meridian (Mon, 27 Nov 2017 18:26:00 GMT): zac (Mon, 27 Nov 2017 18:26:03 GMT): meridian (Mon, 27 Nov 2017 18:26:13 GMT): zac (Mon, 27 Nov 2017 18:26:55 GMT): zac (Mon, 27 Nov 2017 18:27:11 GMT): meridian (Mon, 27 Nov 2017 18:27:35 GMT): meridian (Mon, 27 Nov 2017 18:29:45 GMT): meridian (Mon, 27 Nov 2017 18:29:52 GMT): woodyjon (Mon, 27 Nov 2017 19:00:22 GMT): woodyjon (Mon, 27 Nov 2017 19:00:46 GMT): woodyjon (Mon, 27 Nov 2017 19:00:47 GMT): zac (Mon, 27 Nov 2017 19:12:07 GMT): zac (Mon, 27 Nov 2017 19:13:07 GMT): zac (Mon, 27 Nov 2017 19:14:10 GMT): zac (Mon, 27 Nov 2017 19:14:20 GMT): zac (Mon, 27 Nov 2017 19:14:20 GMT): zac (Mon, 27 Nov 2017 19:15:06 GMT): GhadiShayban (Mon, 27 Nov 2017 20:53:48 GMT): GhadiShayban (Mon, 27 Nov 2017 20:54:16 GMT): pschwarz (Mon, 27 Nov 2017 21:14:55 GMT): pschwarz (Mon, 27 Nov 2017 21:15:03 GMT): GhadiShayban (Mon, 27 Nov 2017 21:17:49 GMT): pschwarz (Mon, 27 Nov 2017 21:24:32 GMT): pschwarz (Mon, 27 Nov 2017 21:24:32 GMT): GhadiShayban (Mon, 27 Nov 2017 21:24:58 GMT): pschwarz (Mon, 27 Nov 2017 21:25:40 GMT): GhadiShayban (Mon, 27 Nov 2017 21:25:42 GMT): GhadiShayban (Mon, 27 Nov 2017 21:26:18 GMT): GhadiShayban (Mon, 27 Nov 2017 21:26:18 GMT): pschwarz (Mon, 27 Nov 2017 21:29:19 GMT): GhadiShayban (Mon, 27 Nov 2017 21:29:25 GMT): GhadiShayban (Mon, 27 Nov 2017 21:29:51 GMT): pschwarz (Mon, 27 Nov 2017 21:31:32 GMT): GhadiShayban (Mon, 27 Nov 2017 21:32:10 GMT): pschwarz (Mon, 27 Nov 2017 21:32:31 GMT): GhadiShayban (Mon, 27 Nov 2017 21:32:36 GMT): GhadiShayban (Mon, 27 Nov 2017 21:32:36 GMT): GhadiShayban (Mon, 27 Nov 2017 21:32:57 GMT): GhadiShayban (Mon, 27 Nov 2017 21:33:33 GMT): GhadiShayban (Mon, 27 Nov 2017 21:34:05 GMT): pschwarz (Mon, 27 Nov 2017 21:35:27 GMT): pschwarz (Mon, 27 Nov 2017 21:35:27 GMT): GhadiShayban (Mon, 27 Nov 2017 21:35:41 GMT): GhadiShayban (Mon, 27 Nov 2017 21:35:41 GMT): pschwarz (Mon, 27 Nov 2017 21:36:24 GMT): GhadiShayban (Mon, 27 Nov 2017 21:36:37 GMT): pschwarz (Mon, 27 Nov 2017 21:39:21 GMT): pschwarz (Mon, 27 Nov 2017 21:41:02 GMT): GhadiShayban (Mon, 27 Nov 2017 21:42:34 GMT): GhadiShayban (Mon, 27 Nov 2017 21:46:41 GMT): GhadiShayban (Mon, 27 Nov 2017 21:46:41 GMT): pschwarz (Mon, 27 Nov 2017 21:56:00 GMT): GhadiShayban (Mon, 27 Nov 2017 21:57:21 GMT): pschwarz (Mon, 27 Nov 2017 21:59:23 GMT): GhadiShayban (Mon, 27 Nov 2017 22:00:11 GMT): pschwarz (Mon, 27 Nov 2017 22:03:48 GMT): GhadiShayban (Mon, 27 Nov 2017 22:12:49 GMT): GhadiShayban (Mon, 27 Nov 2017 22:22:10 GMT): GhadiShayban (Mon, 27 Nov 2017 22:22:44 GMT): pschwarz (Mon, 27 Nov 2017 22:33:26 GMT): pschwarz (Mon, 27 Nov 2017 22:33:36 GMT): GhadiShayban (Mon, 27 Nov 2017 22:33:44 GMT): GhadiShayban (Mon, 27 Nov 2017 22:33:48 GMT): GhadiShayban (Mon, 27 Nov 2017 22:33:48 GMT): rjones (Mon, 27 Nov 2017 22:34:02 GMT): GhadiShayban (Mon, 27 Nov 2017 22:34:27 GMT): pschwarz (Mon, 27 Nov 2017 22:34:43 GMT): GhadiShayban (Mon, 27 Nov 2017 22:34:45 GMT): GhadiShayban (Mon, 27 Nov 2017 22:35:09 GMT): pschwarz (Mon, 27 Nov 2017 22:35:23 GMT): GhadiShayban (Mon, 27 Nov 2017 22:35:27 GMT): pschwarz (Mon, 27 Nov 2017 22:35:30 GMT): GhadiShayban (Mon, 27 Nov 2017 22:35:40 GMT): pschwarz (Mon, 27 Nov 2017 22:36:00 GMT): GhadiShayban (Mon, 27 Nov 2017 22:40:09 GMT): PratikDhrona (Mon, 27 Nov 2017 23:08:36 GMT): pschwarz (Mon, 27 Nov 2017 23:09:18 GMT): woodyjon (Mon, 27 Nov 2017 23:28:40 GMT): muasif80 (Tue, 28 Nov 2017 03:18:51 GMT): zac (Tue, 28 Nov 2017 04:01:27 GMT): zac (Tue, 28 Nov 2017 04:02:50 GMT): zac (Tue, 28 Nov 2017 04:03:57 GMT): zac (Tue, 28 Nov 2017 04:03:57 GMT): zac (Tue, 28 Nov 2017 04:06:07 GMT): zac (Tue, 28 Nov 2017 04:06:07 GMT): zac (Tue, 28 Nov 2017 04:06:07 GMT): zac (Tue, 28 Nov 2017 04:07:16 GMT): zac (Tue, 28 Nov 2017 04:09:12 GMT): zac (Tue, 28 Nov 2017 04:10:51 GMT): BDAP1729 (Tue, 28 Nov 2017 07:31:22 GMT): woodyjon (Tue, 28 Nov 2017 08:42:42 GMT): woodyjon (Tue, 28 Nov 2017 08:42:53 GMT): DjCillers (Tue, 28 Nov 2017 09:43:15 GMT): venkym 1 (Tue, 28 Nov 2017 11:41:02 GMT): grkvlt (Tue, 28 Nov 2017 13:57:05 GMT): grkvlt (Tue, 28 Nov 2017 13:58:08 GMT): meridian (Tue, 28 Nov 2017 14:03:21 GMT): meridian (Tue, 28 Nov 2017 14:03:34 GMT): meridian (Tue, 28 Nov 2017 14:04:06 GMT): vadimmelnicuk (Tue, 28 Nov 2017 14:10:57 GMT): woodyjon (Tue, 28 Nov 2017 14:18:05 GMT): woodyjon (Tue, 28 Nov 2017 14:19:29 GMT): jsmitchell (Tue, 28 Nov 2017 15:05:26 GMT): jsmitchell (Tue, 28 Nov 2017 15:05:28 GMT): agunde (Tue, 28 Nov 2017 15:36:17 GMT): Johnjam (Tue, 28 Nov 2017 16:05:57 GMT): zac (Tue, 28 Nov 2017 16:31:38 GMT): zac (Tue, 28 Nov 2017 16:31:38 GMT): zac (Tue, 28 Nov 2017 16:33:18 GMT): zac (Tue, 28 Nov 2017 16:34:21 GMT): grkvlt (Tue, 28 Nov 2017 16:37:15 GMT): grkvlt (Tue, 28 Nov 2017 16:38:41 GMT): pschwarz (Tue, 28 Nov 2017 16:39:17 GMT): grkvlt (Tue, 28 Nov 2017 16:39:28 GMT): grkvlt (Tue, 28 Nov 2017 16:39:46 GMT): pschwarz (Tue, 28 Nov 2017 16:39:49 GMT): pschwarz (Tue, 28 Nov 2017 16:39:54 GMT): pschwarz (Tue, 28 Nov 2017 16:40:10 GMT): grkvlt (Tue, 28 Nov 2017 16:40:28 GMT): pschwarz (Tue, 28 Nov 2017 16:40:41 GMT): grkvlt (Tue, 28 Nov 2017 16:42:21 GMT): amundson (Tue, 28 Nov 2017 16:43:42 GMT): pschwarz (Tue, 28 Nov 2017 16:43:57 GMT): amundson (Tue, 28 Nov 2017 16:43:57 GMT): pschwarz (Tue, 28 Nov 2017 16:44:11 GMT): grkvlt (Tue, 28 Nov 2017 16:44:22 GMT): amundson (Tue, 28 Nov 2017 16:44:55 GMT): amundson (Tue, 28 Nov 2017 16:45:17 GMT): grkvlt (Tue, 28 Nov 2017 16:45:30 GMT): amundson (Tue, 28 Nov 2017 16:48:06 GMT): GhadiShayban (Tue, 28 Nov 2017 17:12:06 GMT): pschwarz (Tue, 28 Nov 2017 18:13:13 GMT): pschwarz (Tue, 28 Nov 2017 18:13:36 GMT): pschwarz (Tue, 28 Nov 2017 18:21:37 GMT): pschwarz (Tue, 28 Nov 2017 18:21:37 GMT): pschwarz (Tue, 28 Nov 2017 18:32:35 GMT): GhadiShayban (Tue, 28 Nov 2017 18:55:04 GMT): pschwarz (Tue, 28 Nov 2017 18:55:32 GMT): benoit.razet (Tue, 28 Nov 2017 19:01:27 GMT): benoit.razet (Tue, 28 Nov 2017 19:03:41 GMT): pschwarz (Tue, 28 Nov 2017 19:06:03 GMT): benoit.razet (Tue, 28 Nov 2017 19:06:18 GMT): pschwarz (Tue, 28 Nov 2017 19:19:22 GMT): benoit.razet (Tue, 28 Nov 2017 19:21:31 GMT): benoit.razet (Tue, 28 Nov 2017 19:21:31 GMT): GhadiShayban (Tue, 28 Nov 2017 19:27:48 GMT): GhadiShayban (Tue, 28 Nov 2017 19:28:22 GMT): pschwarz (Tue, 28 Nov 2017 19:30:20 GMT): pschwarz (Tue, 28 Nov 2017 19:30:27 GMT): benoit.razet (Tue, 28 Nov 2017 19:30:50 GMT): GhadiShayban (Tue, 28 Nov 2017 20:03:10 GMT): GhadiShayban (Tue, 28 Nov 2017 20:03:40 GMT): benoit.razet (Tue, 28 Nov 2017 20:13:35 GMT): pschwarz (Tue, 28 Nov 2017 20:19:36 GMT): Dan (Tue, 28 Nov 2017 20:20:35 GMT): jsmitchell (Tue, 28 Nov 2017 20:51:18 GMT): pschwarz (Tue, 28 Nov 2017 22:22:07 GMT): shreyanadvisory (Wed, 29 Nov 2017 03:37:30 GMT): Mow (Wed, 29 Nov 2017 09:22:03 GMT): woodyjon (Wed, 29 Nov 2017 11:59:10 GMT): woodyjon (Wed, 29 Nov 2017 12:00:10 GMT): ajenie (Wed, 29 Nov 2017 12:43:04 GMT): greg2git (Wed, 29 Nov 2017 13:38:10 GMT): hunter32 (Wed, 29 Nov 2017 15:31:50 GMT): hunter32 (Wed, 29 Nov 2017 15:32:19 GMT): jsmitchell (Wed, 29 Nov 2017 15:32:31 GMT): hunter32 (Wed, 29 Nov 2017 15:32:47 GMT): hunter32 (Wed, 29 Nov 2017 15:35:54 GMT): jsmitchell (Wed, 29 Nov 2017 15:42:20 GMT): jsmitchell (Wed, 29 Nov 2017 15:42:43 GMT): hunter32 (Wed, 29 Nov 2017 15:48:22 GMT): hunter32 (Wed, 29 Nov 2017 15:48:40 GMT): hunter32 (Wed, 29 Nov 2017 15:52:04 GMT): hunter32 (Wed, 29 Nov 2017 15:52:04 GMT): hunter32 (Wed, 29 Nov 2017 15:52:04 GMT): pschwarz (Wed, 29 Nov 2017 15:57:03 GMT): compleatang (Wed, 29 Nov 2017 19:55:59 GMT): Dan (Wed, 29 Nov 2017 21:25:41 GMT): Dan (Wed, 29 Nov 2017 21:26:09 GMT): Dan (Wed, 29 Nov 2017 22:58:53 GMT): Dan (Wed, 29 Nov 2017 23:01:01 GMT): mkhadem (Thu, 30 Nov 2017 01:22:25 GMT): Dan (Thu, 30 Nov 2017 01:24:27 GMT): Dan (Thu, 30 Nov 2017 01:24:27 GMT): Dan (Thu, 30 Nov 2017 01:25:16 GMT): mkhadem (Thu, 30 Nov 2017 01:29:57 GMT): mkhadem (Thu, 30 Nov 2017 01:31:35 GMT): Fofa (Thu, 30 Nov 2017 02:32:58 GMT): Fofa (Thu, 30 Nov 2017 02:33:58 GMT): Fofa (Thu, 30 Nov 2017 03:08:43 GMT): Fofa (Thu, 30 Nov 2017 05:25:40 GMT): tmorin (Thu, 30 Nov 2017 10:31:36 GMT): hunter32 (Thu, 30 Nov 2017 13:22:07 GMT): hunter32 (Thu, 30 Nov 2017 13:22:07 GMT): hunter32 (Thu, 30 Nov 2017 13:22:07 GMT): hunter32 (Thu, 30 Nov 2017 13:22:07 GMT): Dan (Thu, 30 Nov 2017 13:37:44 GMT): hunter32 (Thu, 30 Nov 2017 13:44:32 GMT): hunter32 (Thu, 30 Nov 2017 13:44:32 GMT): Dan (Thu, 30 Nov 2017 13:47:04 GMT): zac (Thu, 30 Nov 2017 15:22:10 GMT): iamprem (Thu, 30 Nov 2017 18:16:39 GMT): agunde (Thu, 30 Nov 2017 22:26:40 GMT): ajenie (Fri, 01 Dec 2017 01:25:40 GMT): ajenie (Fri, 01 Dec 2017 01:26:47 GMT): divssheth (Fri, 01 Dec 2017 07:57:43 GMT): divssheth (Fri, 01 Dec 2017 07:57:43 GMT): divssheth (Fri, 01 Dec 2017 07:57:43 GMT): divssheth (Fri, 01 Dec 2017 07:57:43 GMT): divssheth (Fri, 01 Dec 2017 10:01:10 GMT): BDAP1729 (Fri, 01 Dec 2017 14:41:23 GMT): ddcprg (Fri, 01 Dec 2017 18:30:25 GMT): Fofa (Sat, 02 Dec 2017 05:04:40 GMT): Fofa (Sat, 02 Dec 2017 05:13:14 GMT): Fofa (Sat, 02 Dec 2017 05:13:26 GMT): Fofa (Sat, 02 Dec 2017 05:13:58 GMT): ajenie (Sat, 02 Dec 2017 12:48:05 GMT): ddcprg (Sat, 02 Dec 2017 14:04:06 GMT): Dan (Sat, 02 Dec 2017 15:37:23 GMT): ddcprg (Sat, 02 Dec 2017 15:47:12 GMT): yipcma (Sun, 03 Dec 2017 16:54:45 GMT): alvaradojl (Sun, 03 Dec 2017 18:53:33 GMT): Raheel (Sun, 03 Dec 2017 18:55:34 GMT): jomayma (Sun, 03 Dec 2017 23:33:33 GMT): Fofa (Mon, 04 Dec 2017 01:02:23 GMT): Fofa (Mon, 04 Dec 2017 01:04:22 GMT): Fofa (Mon, 04 Dec 2017 01:18:31 GMT): pschwarz (Mon, 04 Dec 2017 09:42:09 GMT): askmish (Mon, 04 Dec 2017 12:53:50 GMT): Mow (Mon, 04 Dec 2017 15:53:06 GMT): Mow (Mon, 04 Dec 2017 15:55:34 GMT): leilanh (Mon, 04 Dec 2017 16:22:45 GMT): Mow (Mon, 04 Dec 2017 16:26:25 GMT): alexspeller (Mon, 04 Dec 2017 21:02:03 GMT): alexspeller (Mon, 04 Dec 2017 21:04:36 GMT): kelly_ (Mon, 04 Dec 2017 21:31:40 GMT): alexspeller (Mon, 04 Dec 2017 21:46:04 GMT): alexspeller (Mon, 04 Dec 2017 21:46:13 GMT): agunde (Mon, 04 Dec 2017 21:48:06 GMT): alexspeller (Mon, 04 Dec 2017 21:48:36 GMT): alexspeller (Mon, 04 Dec 2017 21:50:18 GMT): kelly_ (Mon, 04 Dec 2017 23:27:44 GMT): Ruslanas (Mon, 04 Dec 2017 23:29:58 GMT): alexspeller (Mon, 04 Dec 2017 23:44:29 GMT): agunde (Tue, 05 Dec 2017 00:10:33 GMT): Fofa (Tue, 05 Dec 2017 06:12:48 GMT): reggie (Tue, 05 Dec 2017 10:00:04 GMT): Dan (Tue, 05 Dec 2017 10:03:39 GMT): rjones (Tue, 05 Dec 2017 10:03:39 GMT): alexspeller (Tue, 05 Dec 2017 12:47:27 GMT): rbuysse (Tue, 05 Dec 2017 14:51:46 GMT): rbuysse (Tue, 05 Dec 2017 14:51:46 GMT): rbuysse (Tue, 05 Dec 2017 14:51:46 GMT): alexspeller (Tue, 05 Dec 2017 15:11:21 GMT): susarino (Tue, 05 Dec 2017 15:17:03 GMT): jeffblack360 (Tue, 05 Dec 2017 15:37:04 GMT): zac (Tue, 05 Dec 2017 16:00:02 GMT): Dan (Tue, 05 Dec 2017 16:47:07 GMT): Dan (Tue, 05 Dec 2017 16:47:36 GMT): Dan (Tue, 05 Dec 2017 16:48:09 GMT): kelly_ (Tue, 05 Dec 2017 16:59:29 GMT): kelly_ (Tue, 05 Dec 2017 16:59:39 GMT): kelly_ (Tue, 05 Dec 2017 17:00:04 GMT): rjones (Tue, 05 Dec 2017 17:16:27 GMT): Dan (Tue, 05 Dec 2017 17:26:56 GMT): rjones (Tue, 05 Dec 2017 17:28:05 GMT): askmish (Tue, 05 Dec 2017 18:07:26 GMT): block_geek (Wed, 06 Dec 2017 09:11:39 GMT): tristanperalta (Wed, 06 Dec 2017 10:06:24 GMT): tristanperalta (Wed, 06 Dec 2017 10:35:31 GMT): tristanperalta (Wed, 06 Dec 2017 10:36:13 GMT): muasif80 (Wed, 06 Dec 2017 12:22:14 GMT): zac (Wed, 06 Dec 2017 14:08:40 GMT): BDAP1729 (Wed, 06 Dec 2017 14:25:14 GMT): zac (Wed, 06 Dec 2017 15:48:59 GMT): Dan (Wed, 06 Dec 2017 20:17:51 GMT): jsmitchell (Wed, 06 Dec 2017 20:24:47 GMT): jsmitchell (Wed, 06 Dec 2017 20:24:51 GMT): Dan (Wed, 06 Dec 2017 20:27:56 GMT): maddyhopper (Wed, 06 Dec 2017 20:44:14 GMT): maddyhopper (Wed, 06 Dec 2017 20:44:19 GMT): maddyhopper (Wed, 06 Dec 2017 20:48:59 GMT): maddyhopper (Wed, 06 Dec 2017 20:49:03 GMT): maddyhopper (Wed, 06 Dec 2017 20:49:14 GMT): kelly_ (Wed, 06 Dec 2017 20:50:08 GMT): maddyhopper (Wed, 06 Dec 2017 20:50:38 GMT): nima7r (Wed, 06 Dec 2017 20:51:05 GMT): kelly_ (Wed, 06 Dec 2017 20:54:30 GMT): kelly_ (Wed, 06 Dec 2017 20:54:43 GMT): kelly_ (Wed, 06 Dec 2017 20:57:15 GMT): nima7r (Wed, 06 Dec 2017 21:00:24 GMT): kelly_ (Wed, 06 Dec 2017 21:00:59 GMT): kelly_ (Wed, 06 Dec 2017 21:01:07 GMT): nima7r (Wed, 06 Dec 2017 21:01:13 GMT): kelly_ (Wed, 06 Dec 2017 21:01:18 GMT): kelly_ (Wed, 06 Dec 2017 21:01:31 GMT): kelly_ (Wed, 06 Dec 2017 21:01:40 GMT): kelly_ (Wed, 06 Dec 2017 21:01:54 GMT): kelly_ (Wed, 06 Dec 2017 21:01:57 GMT): nima7r (Wed, 06 Dec 2017 21:03:49 GMT): kelly_ (Wed, 06 Dec 2017 21:04:22 GMT): nima7r (Wed, 06 Dec 2017 21:04:35 GMT): kelly_ (Wed, 06 Dec 2017 21:04:48 GMT): kelly_ (Wed, 06 Dec 2017 21:05:02 GMT): maddyhopper (Wed, 06 Dec 2017 21:05:11 GMT): maddyhopper (Wed, 06 Dec 2017 21:05:24 GMT): nima7r (Wed, 06 Dec 2017 21:08:28 GMT): maddyhopper (Wed, 06 Dec 2017 21:09:00 GMT): maddyhopper (Wed, 06 Dec 2017 21:09:05 GMT): maddyhopper (Wed, 06 Dec 2017 21:10:55 GMT): maddyhopper (Wed, 06 Dec 2017 21:11:06 GMT): nima7r (Wed, 06 Dec 2017 21:12:28 GMT): maddyhopper (Wed, 06 Dec 2017 21:13:02 GMT): maddyhopper (Wed, 06 Dec 2017 21:13:15 GMT): nima7r (Wed, 06 Dec 2017 21:13:26 GMT): nima7r (Wed, 06 Dec 2017 21:13:34 GMT): nima7r (Wed, 06 Dec 2017 21:13:43 GMT): steptan (Thu, 07 Dec 2017 00:09:01 GMT): Dan (Thu, 07 Dec 2017 03:03:16 GMT): vizillion (Thu, 07 Dec 2017 03:17:06 GMT): ivopatty (Thu, 07 Dec 2017 08:57:44 GMT): GhadiShayban (Thu, 07 Dec 2017 16:24:12 GMT): ericswenson (Thu, 07 Dec 2017 16:57:21 GMT): Johnjam (Thu, 07 Dec 2017 18:02:18 GMT): zac (Thu, 07 Dec 2017 19:57:00 GMT): GhadiShayban (Thu, 07 Dec 2017 19:57:42 GMT): snowy13 (Thu, 07 Dec 2017 20:39:30 GMT): rahulr92 (Thu, 07 Dec 2017 21:05:43 GMT): tristanperalta (Fri, 08 Dec 2017 05:10:46 GMT): tristanperalta (Fri, 08 Dec 2017 05:33:41 GMT): tristanperalta (Fri, 08 Dec 2017 05:33:57 GMT): ErazerControl (Fri, 08 Dec 2017 05:58:18 GMT): van0303 (Fri, 08 Dec 2017 07:43:43 GMT): askmish (Fri, 08 Dec 2017 08:45:04 GMT): askmish (Fri, 08 Dec 2017 08:45:28 GMT): askmish (Fri, 08 Dec 2017 08:46:08 GMT): tristanperalta (Fri, 08 Dec 2017 09:42:45 GMT): tristanperalta (Fri, 08 Dec 2017 09:43:34 GMT): zac (Fri, 08 Dec 2017 15:10:29 GMT): zac (Fri, 08 Dec 2017 15:14:59 GMT): Dan (Fri, 08 Dec 2017 17:50:32 GMT): adamludvik (Fri, 08 Dec 2017 18:25:38 GMT): adamludvik (Fri, 08 Dec 2017 18:25:45 GMT): adamludvik (Fri, 08 Dec 2017 18:26:00 GMT): GhadiShayban (Fri, 08 Dec 2017 19:36:40 GMT): agunde (Fri, 08 Dec 2017 19:43:34 GMT): agunde (Fri, 08 Dec 2017 19:43:34 GMT): GhadiShayban (Fri, 08 Dec 2017 19:48:29 GMT): eclairamb (Fri, 08 Dec 2017 22:22:01 GMT): thiago-moreira (Fri, 08 Dec 2017 22:28:41 GMT): kengste (Sat, 09 Dec 2017 07:42:55 GMT): ddcprg (Sat, 09 Dec 2017 16:08:14 GMT): ddcprg (Sat, 09 Dec 2017 16:08:17 GMT): Dan (Sat, 09 Dec 2017 16:37:18 GMT): ddcprg (Sat, 09 Dec 2017 16:38:17 GMT): Dan (Sat, 09 Dec 2017 16:38:22 GMT): ddcprg (Sat, 09 Dec 2017 16:38:50 GMT): Dan (Sat, 09 Dec 2017 16:39:37 GMT): Dan (Sat, 09 Dec 2017 16:40:59 GMT): ddcprg (Sat, 09 Dec 2017 16:42:11 GMT): ddcprg (Sat, 09 Dec 2017 16:42:39 GMT): dharuq (Sat, 09 Dec 2017 19:53:31 GMT): Dan (Sat, 09 Dec 2017 22:39:39 GMT): slavikdmi (Mon, 11 Dec 2017 11:13:10 GMT): slavikdmi (Mon, 11 Dec 2017 11:14:47 GMT): Johnjam (Mon, 11 Dec 2017 12:41:53 GMT): askmish (Mon, 11 Dec 2017 13:21:39 GMT): askmish (Mon, 11 Dec 2017 13:21:39 GMT): askmish (Mon, 11 Dec 2017 13:24:43 GMT): hunter32 (Mon, 11 Dec 2017 13:47:13 GMT): hunter32 (Mon, 11 Dec 2017 13:47:13 GMT): jsmitchell (Mon, 11 Dec 2017 14:17:10 GMT): Johnjam (Mon, 11 Dec 2017 14:26:02 GMT): Dan (Mon, 11 Dec 2017 14:33:58 GMT): Dan (Mon, 11 Dec 2017 14:36:00 GMT): jsmitchell (Mon, 11 Dec 2017 14:44:24 GMT): hunter32 (Mon, 11 Dec 2017 14:47:37 GMT): hunter32 (Mon, 11 Dec 2017 14:47:37 GMT): hunter32 (Mon, 11 Dec 2017 14:47:37 GMT): Dan (Mon, 11 Dec 2017 15:47:55 GMT): grkvlt (Mon, 11 Dec 2017 16:18:12 GMT): grkvlt (Mon, 11 Dec 2017 16:49:38 GMT): boydjohnson (Mon, 11 Dec 2017 17:47:55 GMT): ddcprg (Mon, 11 Dec 2017 17:56:42 GMT): GearSaW (Tue, 12 Dec 2017 12:50:18 GMT): formax (Tue, 12 Dec 2017 22:40:17 GMT): formax (Tue, 12 Dec 2017 22:43:11 GMT): boydjohnson (Tue, 12 Dec 2017 22:56:30 GMT): ddcprg (Tue, 12 Dec 2017 23:41:30 GMT): FaysalAhmed (Wed, 13 Dec 2017 11:59:41 GMT): FaysalAhmed (Wed, 13 Dec 2017 12:02:20 GMT): FaysalAhmed (Wed, 13 Dec 2017 12:02:20 GMT): grkvlt (Wed, 13 Dec 2017 14:03:21 GMT): grkvlt (Wed, 13 Dec 2017 14:06:23 GMT): grkvlt (Wed, 13 Dec 2017 14:06:23 GMT): HashmatJafferi101 (Wed, 13 Dec 2017 14:11:33 GMT): HashmatJafferi101 (Wed, 13 Dec 2017 14:28:48 GMT): HashmatJafferi101 (Wed, 13 Dec 2017 14:28:48 GMT): rbuysse (Wed, 13 Dec 2017 14:32:38 GMT): skbehera85 (Wed, 13 Dec 2017 15:26:41 GMT): skbehera85 (Wed, 13 Dec 2017 15:31:10 GMT): ddcprg (Wed, 13 Dec 2017 15:51:32 GMT): askmish (Wed, 13 Dec 2017 16:15:16 GMT): askmish (Wed, 13 Dec 2017 16:16:46 GMT): skbehera85 (Wed, 13 Dec 2017 16:40:25 GMT): skbehera85 (Wed, 13 Dec 2017 16:56:15 GMT): amundson (Wed, 13 Dec 2017 16:59:46 GMT): amundson (Wed, 13 Dec 2017 17:02:15 GMT): amundson (Wed, 13 Dec 2017 17:04:33 GMT): BDAP1729 (Wed, 13 Dec 2017 17:12:09 GMT): skbehera85 (Wed, 13 Dec 2017 17:13:08 GMT): skbehera85 (Wed, 13 Dec 2017 17:14:21 GMT): mfford (Wed, 13 Dec 2017 17:20:27 GMT): amundson (Wed, 13 Dec 2017 18:33:53 GMT): gregnotso (Wed, 13 Dec 2017 18:45:03 GMT): aquanet (Wed, 13 Dec 2017 19:20:36 GMT): shanb (Wed, 13 Dec 2017 19:50:02 GMT): shanb (Wed, 13 Dec 2017 20:21:41 GMT): boydjohnson (Wed, 13 Dec 2017 20:22:33 GMT): shanb (Wed, 13 Dec 2017 20:29:06 GMT): boydjohnson (Wed, 13 Dec 2017 20:35:24 GMT): shanb (Wed, 13 Dec 2017 20:57:35 GMT): shanb (Wed, 13 Dec 2017 20:58:25 GMT): podfrogs (Wed, 13 Dec 2017 21:02:28 GMT): zac (Wed, 13 Dec 2017 21:08:15 GMT): zac (Wed, 13 Dec 2017 21:08:37 GMT): zac (Wed, 13 Dec 2017 21:14:43 GMT): formax (Wed, 13 Dec 2017 21:20:26 GMT): podfrogs (Wed, 13 Dec 2017 21:21:02 GMT): formax (Wed, 13 Dec 2017 21:22:13 GMT): podfrogs (Wed, 13 Dec 2017 21:23:44 GMT): zac (Wed, 13 Dec 2017 21:27:29 GMT): zac (Wed, 13 Dec 2017 21:27:29 GMT): shanb (Wed, 13 Dec 2017 22:19:48 GMT): shanb (Wed, 13 Dec 2017 22:23:58 GMT): FaysalAhmed (Thu, 14 Dec 2017 06:17:37 GMT): Aarkin (Thu, 14 Dec 2017 07:46:11 GMT): Aarkin (Thu, 14 Dec 2017 07:50:06 GMT): BDAP1729 (Thu, 14 Dec 2017 09:35:30 GMT):
if we could see the rest of "Expected "cclauss
true for 987, but 988 does not have that same "expected". it just says signoff is missing entirely which is not the case.
@dan I suspect the email cclauss@bluewin.ch may not be associated with his GitHub account
@dan also notice for instance the formatting here: https://github.com/hyperledger/sawtooth-core/pull/978/commits/29f73a57b33695caff128228d7310229275ce6f9 and here: https://github.com/hyperledger/sawtooth-core/pull/988/commits I think the angle brackets around the email address are also required
Did cclauss use `git -s` to sign these commits, or hand-sign it?
@rjones unknown
It appears to fulfill the requirement though. I can't imagine asking him to reformat his commit again.
```
[--- Building sawtooth-dev-java from docker/sawtooth-dev-java ---]
Sending build context to Docker daemon 262.7kB
Step 1/7 : FROM maven:3-jdk-8
---> 07473dc7b9d6
Step 2/7 : LABEL "install-type" "mounted"
---> Using cache
---> 934dd9987f0c
Step 3/7 : EXPOSE 4004/tcp
---> Using cache
---> ea3676c0bcac
Step 4/7 : RUN mkdir -p /project/sawtooth-core/ && mkdir -p /var/log/sawtooth && mkdir -p /var/lib/sawtooth && mkdir -p /etc/sawtooth && mkdir -p /etc/sawtooth/keys
---> Running in 5e6c965dd5c2
container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"
oci runtime error: container_linux.go:265: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"
```
build_all failing for me on java. Building on native ubuntu (I gave up on vagrant)
hmm
you can do `build_all -x java` to skip that if you don't need the java components. @rbuysse ^
@dan are you asking me to force merge that commit? I can
@Dan I see the CI is still failing though
I think I can force merge. I'll look at the substantive review stuff first though.
ok
@Dan I wrote the maven xml file for Java assuming it would be in vagrant or docker. It has to be modified to find the protos directory.
thanks @boydjohnson
while we're on build topics.. seems I have to `sudo` to run builds because of the docker stuff. Is that expected behavior?
you can add yourself to the docker group
then you won't have to do that
kewl. thx.
fun fact, if you can start containers on a machine, it's like having root.
https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
:O
@JamesKempf did you get everything working?
just an FYI to everyone:
This afternoon we incremented versions on the github repo to 0.9. we also created a 0-8 branch (https://github.com/hyperledger/sawtooth-core/tree/0-8).
0-8 shouldn't be changing much going forward but any possible stability fixes will be cherry-picked over.
You should run git fetch --tags and rebase on master to avoid any possible build issues.
Let me know if you have any questions!
Has joined the channel.
Has joined the channel.
Has joined the channel.
@kelly_ no, not yet.
@JamesKempf If you have a rest api pointed at each validator, do either have blocks?
@boydjohnson Yes, the root validator has blocks. I put them in through seth.
And if I do sawtooth block list on the same VM with the running root validator, I get a list of blocks.
quick question - what are the different types of Sawtooth nodes? Or is it correct to say that Validators are the only node type in a Sawtooth network? Thanks in advance!!
As far as P2P nodes, yeah all Sawtooth validator nodes are the same. Transaction submission is from any kind of client and likewise pulling data from a Sawtooth ledger can happen by a variety of client apps.
Sawtooth Network.png
Like this
oooh I like that diagram.
yeah, that's a good diagram
:tada:
I wonder what it would look like with actors for transacting, querying, and relational DBs subscribed with delta subs or events?
different
Thanks @Dan! Follow up clarification - within each sawtooth validator node there are 3 things: blockchain, state, transaction processor? Or am I off base on this?
Thanks @Dan! Follow up clarification - within each sawtooth validator node there are 3 things: blockchain, state, transaction processor. Or am I off base on this?
@alexandra_g I've been meaning to make a nice picture of that too. A validator host has at least 3 things running
1. The main validator process
2. REST service listening for requests (could be txn posts or state queries)
3. One or more Transaction Processors
3.a. Settings Transaction Processor - manages changes to global configuration
3.b.
Is the LMDB with state a separate process?
Also, is the "blockchain" (presumably blocks, txns, etc), stored in the same DB?
High level deployment diagram
@alexandra_g this is not an entirely wrong diagram :)
Here's a similar diagram buried in the docs, but it doesn't make clear the host boundary vs. process boundary. (and yes these processes could be hosted on different machines, but in practice they are launched as I show above with REST, Validator, and Transaction processors on same host.
http://intelledger.github.io/0.8/app_developers_guide/docker.html#overview-of-sawtooth-components
@dan the inner part of that validator box needs a bit of refinement - "Transaction Handling" being not entirely accurate
@Dan the inner part of that validator box needs a bit of refinement - "Transaction Handling" being not entirely accurate
@zac to your question LMDB is embedded so part of the validator process.
I thought about writing TEP but ;)
I could drop journal and transaction handling and just have consensus and state management. Goal to roughly illustrate what the validator process does vs. what transaction processors and rest api do.
I'm not up to speed with events so I'm not sure where that plugs on either.
yeah, maybe just remove the inner lines and turn the boxes into capabilities instead of components
Block Publishing, Chain Management, Transaction Execution, State Management...
we don't use "Chain Management" in any other context but however we describe the capability the chain controller is doing
we could probably create more diagrams around those capabilities at what level of the architecture too
@boydjohnson Is state information and blockchain information in the same DB?
No separate.
Still LMDB, but not a merkle tree presumably
Yeah
cool
Clipboard - October 12, 2017 1:23 PM
Lines removed. I didn't adopt 'execution' yet as the execution is more in the TPs.
Left a line for consensus to talk about pluggable consensus and how it relates to block management. (Not further parsing out difference between block publishing and chain head management)
you have a line between block managent and consensus; consensus and state should be turned into blocks; "Handling" should be renamed to "Execution"
using "Execution" there is misleading actually
maybe use Scheduling
(of course, @Dan, I didn't read any of your explanation where you already responded to my commentary a line above where I said it)
:)
It's an adaptation I've developed. Everytime I'm going to write something a little amundson sounding voice whispers complaints in my ear. ;D
yeah, that is probably too true
anyway, Scheduling might be better than Transaction Handling
it's like an intellectual conscience
with devil horns or a halo?
yes
@zac - Thanks for sharing the sawtooth network diagram above, just wanted to ask if you are ok with us using a version of it for our course Intro to HL course (LFS171x). Let me know either way, Thanks!
Thanks @Dan - your diagram gives some clarity. From your perspective what's the difference between a "Validator Host" and "Validator node"? Just want to make sure I'm clear on terminology.
In that same vein, can a single organization run multiple hosts (or nodes) as they can in Fabric? Thank you!
I'm trying to try the XO game transaction family:
I have a validator, XO transaction family processor, and the REST API running. I have created the players but can't start the game. What does this error message mean?
root@561b51137b52:/# xo create game1
Error: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /batches (Caused by NewConnectionError('
I'm trying to try the XO game transaction family:
I have a validator, XO transaction family processor, and the REST API running. I have created the players but can't start the game. What does this error message mean?
root@561b51137b52:/# xo create game1
Error: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /batches (Caused by NewConnectionError('
I've only seen that when running the XO TP without a REST API
what is the REST API's address?
@drozd http://rest-api:8080.. I'm using default docker compose file on Sawtooth's github page which should create a rest API for me.
can you post a log of what happened when you started everything?
@drozd ```$ docker-compose -f sawtooth-default.yaml up
Creating network "desktop_default" with the default driver
Creating sawtooth-validator-default ...
Creating sawtooth-validator-default ... done
Creating sawtooth-rest-api-default ...
Creating sawtooth-intkey-tp-python-default ...
Creating sawtooth-settings-tp-default ...
Creating sawtooth-xo-tp-python-default ...
Creating sawtooth-rest-api-default
Creating sawtooth-intkey-tp-python-default
Creating sawtooth-settings-tp-default
Creating sawtooth-rest-api-default ... done
Creating sawtooth-client-default ...
Creating sawtooth-client-default ... done
Attaching to sawtooth-validator-default, sawtooth-rest-api-default, sawtooth-settings-tp-default, sawtooth-intkey-tp-python-default, sawtooth-xo-tp-python-default, sawtooth-client-default
sawtooth-validator-default | writing file: /etc/sawtooth/keys/validator.priv
sawtooth-validator-default | writing file: /etc/sawtooth/keys/validator.pub
sawtooth-validator-default | creating key directory: /root/.sawtooth/keys
sawtooth-validator-default | writing file: /root/.sawtooth/keys/my_key.priv
sawtooth-validator-default | writing file: /root/.sawtooth/keys/my_key.pub
sawtooth-validator-default | Generated config-genesis.batch
sawtooth-settings-tp-default | [2017-10-12 19:49:18 DEBUG selector_events] Using selector: ZMQSelector
sawtooth-validator-default | Processing config-genesis.batch...
sawtooth-validator-default | Generating /var/lib/sawtooth/genesis.batch
sawtooth-client-default | creating key directory: /root/.sawtooth/keys
sawtooth-client-default | writing file: /root/.sawtooth/keys/root.priv
sawtooth-client-default | writing file: /root/.sawtooth/keys/root.pub
sawtooth-validator-default | [2017-10-12 19:49:20.005 INFO path] Skipping path loading from non-existent config file: /etc/sawtooth/path.toml
sawtooth-validator-default | [2017-10-12 19:49:20.006 INFO validator] Skipping validator config loading from non-existent config file: /etc/sawtooth/validator.toml
sawtooth-validator-default | [2017-10-12 19:49:20.007 INFO keys] Loading signing key: /etc/sawtooth/keys/validator.priv
sawtooth-validator-default | [2017-10-12 19:49:20.011 INFO cli] config [path]: config_dir = "/etc/sawtooth"
sawtooth-validator-default | [2017-10-12 19:49:20.012 INFO cli] config [path]: key_dir = "/etc/sawtooth/keys"
sawtooth-validator-default | [2017-10-12 19:49:20.012 INFO cli] config [path]: data_dir = "/var/lib/sawtooth"
sawtooth-validator-default | [2017-10-12 19:49:20.013 INFO cli] config [path]: log_dir = "/var/log/sawtooth"
sawtooth-validator-default | [2017-10-12 19:49:20.013 INFO cli] config [path]: policy_dir = "/etc/sawtooth/policy"
sawtooth-validator-default | [2017-10-12 19:49:20.014 WARNING cli] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.
sawtooth-validator-default | [2017-10-12 19:49:20.014 DEBUG core] database file is /var/lib/sawtooth/merkle-00.lmdb
```
where are you running `xo create game` from?
on default client
have you tried running it from outside the container?
fyi: we just published updated docs, debs, and dockerfiles for version 0.8.9.
fyi: we just published updated docs, debs, and docker images for version 0.8.9.
@parisa @drozd Do you have to to tell `xo` that the REST API is at `http://rest-api:8080`, not `http://localhost:8080`?
(if you did it from outside the container, the default of localhost should work)
@alexandra_g Yeah, feel free to use the diagram
Also, you have an Intro to Hyperledger course?
As far as host/node goes, I don't think either of those terms are used in an official capacity. Node is typically used when discussing peer to peer networks, and host is typically used in a server/client relationship.
So a validator is a node in a P2P network of other validators.
Through a connected REST API, it is the host to HTTP clients.
Through a connected REST API, a validator is the host to HTTP clients.
@zac I don't think that's possible right now
it's in the backlog though: https://jira.hyperledger.org/browse/STL-217
O.o
Thanks @zac - this is the course I'm referring to: https://www.edx.org/course/blockchain-business-introduction-linuxfoundationx-lfs171x
In terms of host/node, I want to be really specific with the terms we use in the course. In Dan's diagram above he uses Validator host and within the host is a validator (which he previously referred to as Sawtooth validator node). If I can get some clarity on the official terminology that would be wonderful!
Well, @Dan should correct me if I am wrong, but I don't think "Validator Host" is an official term
I think, in this diagram it is an attempt to put a label on the ecosystem that is serving as host to HTTP clients: Validator, REST API, and any Transaction Processors
That's right Zac. I was using host to mean a computer. You can think of it synonymous with node. I wanted to draw a distinction between one of our processes and the computer that is running it. And @alexandra_g yes even more than fabric :) you can run multiple nodes. One of Sawtooth's main features is that we support large networks.
ah, that makes sense
I was a little confused myself
Thank you for stopping my bullshitting
So everything in the black outline is one the machine
So everything in the black outline is on one the machine
So everything in the black outline is on one machine
(although you could spin up a bunch of "Validator Hosts" on the same machine)
(not that you would except for testing purposes)
@parisa @zac it turns out it is possible to point xo at a different address, but it isn't intuitive -- you have to use `xo init --url`
```
ubuntu@ubuntu-xenial:~/.sawtooth$ docker exec -it edd8abbfe003 /bin/bash
]0;root@edd8abbfe003: /root@edd8abbfe003:/# xo init --url rest-api:8080
]0;root@edd8abbfe003: /root@edd8abbfe003:/# xo init --url rest-api:8080
set username: root
set url: rest-api:8080
]0;root@edd8abbfe003: /root@edd8abbfe003:/# xo list
xo list
sawtooth-rest-api-default | [2017-10-12 22:16:00.627 DEBUG route_handlers] Sending CLIENT_STATE_LIST_REQUEST request to validator
sawtooth-validator-default | [2017-10-12 22:16:00.628 DEBUG interconnect] ServerThread receiving CLIENT_STATE_LIST_REQUEST message: 81 bytes
sawtooth-validator-default | [2017-10-12 22:16:00.635 DEBUG interconnect] ServerThread sending CLIENT_STATE_LIST_RESPONSE to b'1c89f7438bcb45d8'
sawtooth-rest-api-default | [2017-10-12 22:16:00.637 DEBUG route_handlers] Received CLIENT_STATE_LIST_RESPONSE response from validator with status OK
sawtooth-rest-api-default | [2017-10-12 22:16:00.639 INFO helpers] GET /state?address=5b7349 HTTP/1.1: 200 status, 652 size, in 0.011955 s
GAME PLAYER 1 PLAYER 2 BOARD STATE
game 02e187 X-------- P2-NEXT
```
Anyway, the important take away, is that the validator is the official thing. Host/node is just the context you are talking about it in. It would be a little weird, but you might refer to me as a "male engineer" when you are discussing my work, and a "male gamer" when you are discussing my free time. I am not changing, just the conversation is. Same with "validator host" and "validator node".
Also, the class seems awesome. Hope you have a huge turn out.
@drozd Yes, I was looking for that. I knew there was something.
That JIRA task is to bring its API in line with the other CLIs. It would be very weird if you could _only_ use it with a REST API at localhost:8080.
@drozd I used xo init --url [address of rest api] and it worked. Thank you!
@parisa coincidentally, this morning I opened a PR to improve xo error messages: https://github.com/hyperledger/sawtooth-core/pull/998/commits/735dd7e7f3878b4362440be8ea6560f37ae5097f
hopefully that will help in the future
Ok, I'm starting to get a better picture of this. @Dan @zac -- So in that diagram (which I’m planning to adapt for the course if you are ok with that Dan), a "validator host" is just a computer (which we can say is a node) and within this computer/node there can be 1 or many validators which interact with 1 or many transaction processors.
Not quite. First, I don't think there is much of a real world reason to have more than one validator on the same computer. So typically, you would have one computer, running one validator, and on REST API, and a few Transaction Processors.
Not quite. First, I don't think there is much of a real world reason to have more than one validator on the same computer. So typically, you would have one computer, running one validator, and one REST API, and a few Transaction Processors.
However, if you _did_ have multiple validators running on the same computer, _each validator_ would be a node on the peer-to-peer validator network.
so when @Dan mentioned that an organization can run multiple sawtooth nodes this translates to an organization having multiple computers (or sawtooth nodes) each containing a validator, a REST API and few transaction processors. And to further clarify, a validator is not really a node in itself, it's a component of a sawtooth node.
I take node (in this context) to mean "thing that talks to a peer-to-peer network"
By that definition, the validator is the node. It is what contains the components that talk to other nodes (also validators).
The Transaction Processors and REST API have no role in talking to the peer-to-peer network.
A validator is a node is a host. It happens that if you look inside that you will see we have a process called 'validator' with some other helper processes (the rest service and some transaction processors).
Companies can run however many validators they like.
alexandra_g, will the class be available online and for general signup?
Yeah, she posted the link, looks like it starts 10/24, and the tuition is free.
Here it is:
https://www.edx.org/course/blockchain-business-introduction-linuxfoundationx-lfs171x
I assume all Maintainers are on the email list. But just in case: https://lists.hyperledger.org/mailman/listinfo/hyperledger-stl
@Dan thanks for clarifying!
@JamesKempf it's a MOOC on edx.org. Online and free to audit.
Quick question: is the default database for HL Sawtooth LevelDB? I know this is true for Fabric but is it the same for Sawtooth? Thanks!
Nope. Lightning. Its way faster ;)
https://en.m.wikipedia.org/wiki/Lightning_Memory-Mapped_Database?wprov=sfla1
Hi everyone. I'm trying to submit a batch which contains only one trasnaction. I've connected my own transaction family into the validator. Now I'm submitting the transaction through the Rest API, but I'm receiving the following on the validator: "received a message of type DEFAULT from 9b15f33c0eb6b0c469253918dea48689969d7d7abcb9370d53ffa088541c83b145012f278c918108771762b877fca6651d0c7a855cbb20e2be38306ef4d5dc0c but have no handler for that type"
Can anyone guide me on how to investigate this further?
I found my issue. I was sending the batch to the validator and not the RestAPI. Now I'm sending it to the Rest API and everything seems to be normal except the fact that my match remains PENDING.
@vbledar did you register you transaction processor with the validator
@vbledar by register, Kelly means did the processes handshake. Depending on how you are launching you're stuff you should see log output like this from the validator and from your transaction processor:
```sawtooth-validator-local | [2017-10-14 22:27:44.372 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 98 bytes
sawtooth-validator-local | [2017-10-14 22:27:44.372 INFO processor_handlers] registered transaction processor: connection_id=9fb3b1fe9f3704c248bb0e7fafeb5af6bea77d341ffd51142029cdcebf0b9f982f8a9e24fc622cd4f0f3fc8e2de8ba539c41d0617b1b93e559e047f292d5f983, family=xo, version=1.0, encoding=csv-utf8, namespaces=['5b7349']
sawtooth-validator-local | [2017-10-14 22:27:44.373 DEBUG interconnect] ServerThread sending TP_REGISTER_RESPONSE to b'c91ecbbee185480b'
```
sawtooth-xo-tp-python-local | [2017-10-14 22:27:44.373 INFO core] register attempt: OK
```sawtooth-validator-local | [2017-10-14 22:27:44.372 DEBUG interconnect] ServerThread receiving TP_REGISTER_REQUEST message: 98 bytes
sawtooth-validator-local | [2017-10-14 22:27:44.372 INFO processor_handlers] registered transaction processor: connection_id=9fb3b1fe9f3704c248bb0e7fafeb5af6bea77d341ffd51142029cdcebf0b9f982f8a9e24fc622cd4f0f3fc8e2de8ba539c41d0617b1b93e559e047f292d5f983, family=xo, version=1.0, encoding=csv-utf8, namespaces=['5b7349']
sawtooth-validator-local | [2017-10-14 22:27:44.373 DEBUG interconnect] ServerThread sending TP_REGISTER_RESPONSE to b'c91ecbbee185480b'
```
```sawtooth-xo-tp-python-local | [2017-10-14 22:27:44.373 INFO core] register attempt: OK
```
If I'm running the validator and friends on dockers, but want to spin up a native process for my transaction processor, is there some trick for port mapping? i.e. I'm using sawtooth-local.yaml to fire off most of the processes which are talking over a docker 'network'. I want to fire up my TP on the host os and have it reach port 4004 of the docker managed validator process.
you could `docker inspect` the validator container and see if it says the actual IP address of that container.
thanks @boydjohnson that told me what I needed
I have a question about canonical encodings for the Sawtooth state tree. As it is today, the validator uses HASH(ValueByteArray) in the state tree to form the merkle tree. I wonder if it has ever been considered to make sawtooth's hashing polymorphic -- i.e. allow a user supplied hash function, that way the user can calculate an *information-based* hash, irrespective of encoding.
right now the leaf of the state tree appears to be [K -> V] where V == hash(valueblob)
has it been explored to make the leaf representation [K -> hashvalue, blobref] (This would mean blobref is _not used_ for the merkle tree)
I have a question about canonical encodings for the Sawtooth state tree. As it is today, the validator uses HASH(ValueByteArray) in the state tree to form the merkle tree. I wonder if it has ever been considered to make sawtooth's hashing polymorphic -- i.e. allow a user supplied hash function, that way the user can calculate an *information-based* hash, irrespective of encoding.
right now the leaf of the state tree appears to be [K -> V] where V == hash(valueblob)
has it been explored to make the leaf representation [K -> hashvalue, blobref] ?? (This would mean blobref is _not used_ for the merkle tree)
I have a question about canonical encodings for the Sawtooth state tree. As it is today, the validator uses HASH(ValueByteArray) in the state tree to form the merkle tree. I wonder if it has ever been considered to make sawtooth's hashing polymorphic -- i.e. allow a user supplied hash function, that way the user can calculate an *information-based* hash, irrespective of encoding.
right now the leaf of the state tree appears to be [K -> V] where V == hash(valueblob)
has it been explored to make the leaf representation [K -> hashvalue, blobref] ?? (This would mean blobref is _not used_ for the merkle tree, but hashvalue is deterministically derived from the blob)
AFAICT no encoding system besides CBOR takes into account canonical encoding, and canonical encodings have nontrivial costs -- you have to give up things like value caching & entropy coding, etc.
I don't expect a quick answer, but it's worth pondering.
I get this error when starting a validator '''ERROR cli] Cannot have a genesis_batch_file and an existing chain''' 66423363
When trying to start a validator I get this error "Cannot have a genesis_batch_file and an existing chain" . what does this mean?
@kelly_ & @Dan Thank you both. Everything is running smoothly. Batch is committed now in the chain.
Is it possible to change the zmq from 127.0.0.1:4004 to another interface? Since I'm running my setup on an Ubuntu inside VirtualBox I would like to have it under 10.0.2.15:4004.
@parisa you may have existing files from a previous blockchain
@kelly_ how do I start a validator for the existing blockchain (I used `sudo -u sawtooth sawtooth-validator`)? or how do I remove the files from the previous blockchain
@parisa I'm using the following: sudo -u sawtooth sawtooth-validator -B 10.0.2.15:4004 -vv
@vbledar what is 10.0.2.15 address here?
* I actually ended up removing all of the existing files for now and then start the validator node .. but I'm still trying to understand what caused that error and how to fix it next time
66423363
In my case I'm running inside VirtualBox. In order to make my validator visible to my host OS i need to bind it to the virtual network interface. In any case my example is wrong. The "-B 10.0.2.15:4004" should be "--bind network:tcp://10.0.2.15:4004"
In any case, the command you gave should have worked on the existing chain! That's how it works for me.
@parisa when the validator starts up it looks in it's data directory. if it sees a file called `genesis.batch` that's a sign that you want to create a new chain. If there's already data from an old chain though we don't want to destroy that automatically. Hence the warning. Is it possible you ran the command to create the genesis batch a second time? if not then maybe the batch wasn't removed by the validator the first time.
@parisa when the validator starts up it looks in it's data directory. if it sees a file called `genesis.batch` that's a sign that you want to create a new chain. If there's already data from an old chain though we don't want to destroy that automatically. Hence the warning. Is it possible you ran the command to create the genesis batch a second time? if not then maybe the batch wasn't removed the first time.
@Dan I'm not exactly sure but It's possible that I ran '''genesis.batch''' two times and had two blockchains, and as a result the '''sawtooth-validator''' didn't know which of them is the active one. This time what I did was deleting the old blockchain files and I didn't have any problem running validator on the new blockchain... but what @vbledar mentioned is helpful if I wanted to keep both blockchains on purpose. Thanks for the answers!
@Dan I'm not exactly sure but it's possible that I ran 'genesis.batch' two times and this had created two blockchains. I removed the files from the first blockchain and I didn't face any further problem running a validator on the remaining blockchain. what @vbledar would be useful if I wanted to keep both blockchains. Thanks for the answers!
@parisa in that case, you would have two completely separate chains. The two nodes cannot peer, since they have separate genesis blocks. When starting up peer nodes, you should not run the genesis steps. If that is not clear in the documentation we should remedy that :thinking:
Has joined the channel.
Does anyone know why the sawtooth-sdk in javascript is using zmq for? I would not like to go through the code if someone already knows the answer.
zmq is how the transaction processor connects to the core validator
Would it make sense then to create a sawtooth-sdk-client module in node which contains only the client used objects (signer and encoders)? I was trying to make use of the SDK in a single app page using webpack and I was facing issues with ZMQ due to some binary file that ZMQ is introducing when loaded in the application.
There are a couple of gotchas with the sdk and webpack, but it's pretty easy to work around
If you simply require the client items directly, (like so):
```
const { signer, TransactionEncoder, BatchEncoder } = require('sawtooth-sdk/client')
```
webpack doesn't see the ZMQ dependencies at all
Alternatively, you can use webpack to ignore it, via a `resolve` entry:
```
resolve: {
alias: {
zeromq$: path.resolve(__dirname, './
@pschwarz Thanks, it worked like a charm.
:thumbsup:
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, October 19th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, October 19th
Time: 10-11am CDT
We are using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
Agenda:
1. Introductions-Mark Ford
2. Trackable Commodities with Sawtooth Supply Chain –Zac Delventhal
3. Using Open SSL Keys with Seth -Adam Ludvik
Hello team, this is Edmund and I joined the sprint planning on Monday. I am looking at the first task on the help wanted list (STL-344) which is to add a xo.toml config file. The first thing I am doing is to get the xo game running. I can xo init --username jill but when I input xo create game1, I am getting.
`Error: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /batches (Caused by NewConnectionError('
Hi @mredmundto, are you doing this from within a docker container?
@boydjohnson yes
To get xo to work, then, `xo init --url http://rest-api:8080` if rest-api is the name of the rest api container. My understanding is that folks are not happy with the xo cli and there will be changes.
Has joined the channel.
is the intended validator behavior for a transaction process response of 2="internal error" to just re-request processing of that same transaction?
That is the correct behavior. People have questioned exactly when that is the correct error. I would expect more intermittent error would describe internal error better.
Thanks. If something is borked it is an infinitely borking loop.
infinitely is a long time. It might not be infinite.
mine is :D
Has joined the channel.
Can the Transaction Processor be running in another server?
Has joined the channel.
Hello, i have a little problem trying out the "Using sawtooth on Ubuntu 16.04" tutorial when executing the command "sawtooth block list" i get the following error: "Error: (503): Service unavailable"
My validator says the following: "Unable to get chain head from block store"
somebody knows how to fix this?
hi, everyone, im beginer in sawtooth, someone can explain for me about Byzantine fault tolerance? thank you
hi, everyone, im beginer in sawtooth, someone can explain for me about `Byzantine fault tolerance` ? thank you
@benjaminverhaegen Sounds like you don't have a genesis block. Did you `sawtooth genesis` before you `sawtooth validator`ed?
@zac yes i did all the steps provided in the tutorial. Started again on a clean Ubuntu and the problem was gone. Thanks for the help!
@bamboo Other people here can explain it better than me, but the short version is it is cryptographically secure. A hostile actor won't be able to change the blockchain.
@mfford do you know where I can get a download of the technical forum from today?
or is that a question for @tkuhrt
It usually becomes available within a day. Once it does, I'll crop it and repost it
That is me...I am at a conference and have not had a chance to get it available.
ok no worries, thanks!
Has joined the channel.
Wondering if anyone had marinated on https://chat.hyperledger.org/channel/sawtooth?msg=2NFWzDwc2uvDe76pW
I think the (Key, Value) pair is stored in state by mapping the Key to a Radix Address and the value is recorded as the value. The mapping of key to address is whatever the author wants under the namespace. Often that is namespace+hash(key), but there are more sophisticated address encodings. @jsmitchell can likely correct me.
Let me walk back making a concrete proposal here. I would like the ability to store certain things on-chain, like a W3C verifiable claim (VC). VC's have a defined hash based on information not representation.
Let me walk back making a concrete proposal here. I would like the ability to store certain things on-chain, like a W3C verifiable claim (VC). VC's have a defined hash based on information content not representation.
(I can always refer to these things off chain with a pointer to them)
A Verifiable Claim is a bad example because these are signed using a secret, necessarily off-chain. A more sensible example is a transaction processor that needs to agree on output -- in terms of information content, not byte-equality.
Oh I see you aren't asking about the radix addressing, you want the hash used to compute the merkle root to be something variable that expresses whether or not the data at a node has some characteristic. That might be possible with an adaptation that extracts the value you are agreeing to from the blob and then hashes that value but I'm not sure it is necessary. Maybe you could frame the problem to expose why the bytes would need to be different but the data the same.
Anyone knows how to make the Rest API available on a client running on the browser? I mean without receiving the annoying "No 'Access-Control-Allow-Origin' header is present on the requested resource.". I found this STL-313 which is still open, but perhaps someone has a workaround of some kind.
@pschwarz may know a workaround
There is basic support for CORS in the REST API. The referenced issue is for more comprehensive support - e.g. defining which hosts the server will accept, etc
You need to add the correct headers to your requests in your browser app
This means you need to include the header `Origin`
If it's not working, there's a bug with the Rest API
@vbledar :point_up:
The recording for the Oct 10th Sawtooth Technical Forum is now available in "Meeting Recordings" here: https://drive.google.com/drive/folders/0B_NJV6eJXAA1VnFUakRzaG1raXc
The recording for the Oct 10th HL Sawtooth Technical Forum is now available in "Meeting Recordings" here: https://drive.google.com/drive/folders/0B_NJV6eJXAA1VnFUakRzaG1raXc
The agenda for that meeting included:
1. Trackable Commodities with Sawtooth Supply Chain –Zac Delventhal
2. Using Open SSL Keys with Seth -Adam Ludvik
@kelly_ :point_up_2_tone1:
huzzah! @mfford
any video?
@tkuhrt :)
^I thought the permissions thing was cleared up?
Should be a video too
there are videos in there
I don't see a 10/19 video..
i see m4a (audio) and a txt file for the chat
no mp4
@mfford : I asked the question on separating the Web, Transaction Processor and Other Sawtooth components on different servers during your Thursday call. I was able to separate the three (Web + TP running on Azure and other Sawtooth running in Amazon) and the setup is working. I am using Azure Services Fabric to run these.
@pschwarz Origin is included by default by the browser itself. When the OPTIONS preflight request occurs I receive a 405 back.
Is a replay of "Hyperledger Sawtooth Tech Forum" available?
Has joined the channel.
which `programming language` is used for transaction and transaction family in sawtooth? Someone can answer my question? thank you.
Has joined the channel.
I am currently working on HL fabric and was just going through HL Sawtooth. The introduction says that it is tailored for supply chain and IOT applications. How is writing a supply chain application in fabric different from the one that would be written in sawtooth?
@bamboo one of the cool things about sawtooth is you can a variety of languages. we have SDKs for python, javascript, java, go, rust, and c++. There are tutorials available for python, java, and javascript. https://sawtooth.hyperledger.org/docs/core/nightly/master/app_developers_guide.html
Hi @jarvis26. Sawtooth has several important features. Two quick ones are, 1) state agreement and 2) a customizable supply chain application
1: This prevents possible corruption at all nodes. Each node is explicitly agreeing to every byte/bit of information in the database. Not all blockchains enforce this which can result in nodes that believe they are in agreement but have progressive errors.
2: This Supply Chain Transaction Family (our parlance for business logic, smart contract, pick your favorite term) can be customized to your liking. It includes telemetry support so items can be tracked with various metadata like temperature and location.
https://sawtooth.hyperledger.org/docs/core/nightly/master/transaction_family_specifications/track_and_trade_transaction_family.html
This past week's tech talk happened to cover this item. I think we'll see a link to the recording of the presentation on this channel soon.
@jarvis26 see also this demo (produced on older code recently updated for the above): https://01.org/sawtooth/
Has joined the channel.
@vbledar Let me back up: how are you sending your requests?
https://www.hyperledger.org/blog/2017/10/23/sparts-project-software-parts-ledger-utilizing-the-blockchain-to-establish-trust-with-open-source-across-a-supplychain
Hi guys, any more documentation on sawtooth Identity Services that we can use as inputs into Identity WG docs. Particularly useful would be
1. Interface to legacy systems/x.5xx systems
2. Revocation
3. Anything on generic pki.
I did not want to use at here...
Has left the channel.
thank @Dan
Has joined the channel.
@pschwarz I'm using axios library to create the post request. The request is from the browser so the preflight OPTIONS is done automatically. What I saw in the rest api code is that method add_cors_headers does not include "OPTIONS" in the "Access-Control-Allow-Methods". My guess is that is why I'm getting the 405 back. I tried to add also the OPTIONS in the add_cors_headers, but it seems that building and installing the new version didn't work as expected. When I try now to start the rest api I'm getting the an error message.
File "/usr/local/bin/sawtooth-rest-api", line 9, in
Do you have the parameter `withCredentials: true` on your requests?
No, I don't. But I have to check were I should set that.
I saw were I need to set the parameter, but unfortunately I have destroyed my rest api and it won't start. Need to fix that one first before trying withCredentials. Any idea what I've done wrong with my rest api?
@pschwarz Do you know how to compensate for this error message "ImportError: No module named 'sawtooth_rest_api.protobuf'"
Are you building from the git repo, or were you modifying the installed code (via the debs)
Are you building from the git repo, or were you modifying the installed code (via the debs)?
@pschwarz Building from the git repo.
Did you use `/bin/build_all` or another method?
Did you use `./bin/build_all` or another method?
Did you use `
@pschwarz build_all didn't work for my ubuntu setup. I was the pytho3 build in the sawtooth rest api directory and after that python3 install.
If you're going that route, you'll need to run `
That may require some python packages to be installed. Generally, we build all this stuff via docker
Or the dbs
Or install the debs
@pschwarz I removed and reinstalled the debs. Now the rest api is starting. I also placed an apache2 as a proxy and can handle the cors issue accordingly.
@pschwarz Thanks for your time.
Glad it works!
Any maintainers on Delta Sub or Events reply to this? https://lists.hyperledger.org/pipermail/hyperledger-stl/2017-October/000098.html
I believe the answer may also have implications on https://lists.hyperledger.org/pipermail/hyperledger-stl/2017-October/000103.html if there are TP requirements to fulfill events/receipts.
Has joined the channel.
I have written my own TP based on the sdk/examples in python. I now want to write a cli like xo and do actions like xo init, create etc. for my custom TP. I have referenced the xo_cli.py and have written my own cli.py based on that, but am unable to get it into the docker client.
how do I get my custom cli into docker client? I had done ./bin/build_all -l python to build and then docker-compose -f docker/compose/sawtooth
as suggested in sawtooth_xo.yaml
The directory structure and implementation is similar to
@akmishra That sounds like a lot of quick progress! take a look at the client definition in this compose file: docker/compose/sawtooth-local.yaml. It is based on this image `sawtooth-dev-python`. The trick is that it will map in the directory that has the python code. ``` volumes:
- ../../:/project/sawtooth-core
```.
@pschwarz could you try and speculate why executing the same code to submit a batch using node is successful, but executing the same code from browser (chrome) fails validation? I'm even using same private key. Of course using node prints in the console a buffer object, but on the browser prints a uint8array.
@zac ^
Question from the edX forums for the Introduction to Hyperledger Technologies course that I am hoping someone can point me to some documentation to include in the answer:
```
is there any downtime/recovery time ..if a node in the network goes down..in syncing up the ledger ? is there a central repo to sync from..or what's the process.?
```
The ledger is synced from the validator's peers. When it receives a new block it will ask for predecessors of that block if it doesn't have that blocks predecessors. This can take some time if the validator was down for many blocks.
Thanks, Boyd
request timesout for repo.sawtooth.me frequently
is it just me?
I'm getting 50ms ping times for it and I just ran a build_all without issue.
Has anyone built a client application running on the browser and been able to submit a batch successfully? I'm using the javascript sdk, but so far have been unable to submit the batch. I'm receiving the following in the validator's logs:
[2017-10-25 20:31:59.956 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 2641 bytes
[2017-10-25 20:31:59.959 DEBUG signature_verifier] transaction signature invalid for txn:
[2017-10-25 20:31:59.960 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'36344e6c9f704b47'
The weird part is that using the exact same code, but running it with node everything works fine.
We built a sample application that was able to do this: https://github.com/IntelLedger/omi-summer-lab/tree/master/omi-client
Can I get some :eyes: on https://github.com/hyperledger/sawtooth-core/pull/1017 and https://github.com/hyperledger/sawtooth-core/pull/1018 before another refactoring PR comes through and causes merge evilness?
Those dots are supposed to be eyes. :eye: :eye:
@vbledar I've written a few browser clients that submit transactions at this point
Could you upload your JS so I can take a look?
I'd also be curious to see a console.log of a complete transaction if you have that
Thanks for the :eye::eye:s on the PRs. I rebased the c++ SDK pr, and jenkins is subsequently choking on unit tests. Mentioning incase others running into build failures. https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-1017/3/console
@JamesKempf we are getting ready to put out the 1.0 release of Sawtooth before the end of the year. We are going to collect quotes from companies that have been contributing to/using sawtooth for a release by the linux foundation. please DM if you have something you'd like to contribute
@kelly_, will the 1.0 release also include an updated version of Seth/Burrow as well?
Has joined the channel.
Hi everywone! I'm using hyperledger sawtooth for a project with docker. And I want to know how can I scale to support a higher level of requests. Right now I have only one validator. I read in the documentation about validator networks https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/validator_network.html . But I didn't find any examples or documentation about how to implement that. Thanks in advance!
Hi everyone! I'm using hyperledger sawtooth for a project with docker. And I want to know how can I scale to support a higher level of requests. Right now I have only one validator. I read in the documentation about validator networks https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/validator_network.html . But I didn't find any examples or documentation about how to implement that. Thanks in advance!
Has joined the channel.
@JamesKempf yes we are making it rpc compatible with ethereum and improving it's integration with existing ethereum development tools
@sgermanz This, https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_poet_smoke.yaml, docker compose file shows a 3 validator network with the default 'static' peering. Options for the validator that you might want to know about are `--scheduler parallel` which increases performance, and `--peering dynamic` where in a large network the validator controls how many peers it has.
Thanks. So, if I want to add more validators to my network dinamically... should I add rest-apis and transaction processors linked to the new validators?And bind the new validator to the existent ones?
Not bind but "seed" the peering with one of the original ones (probably the first one will be sufficient). The each need a corresponding set of transaction processors, but only need rest-api's if you plan on submitting transactions or querying state from the specific validator instance
Has joined the channel.
Has joined the channel.
Has joined the channel.
I've setup sgx and everything as per the documentation. Now, how do I enable poet consensus to be used in validators, to run example applications, when compiling from source.
Has joined the channel.
Has joined the channel.
Hi! New to this and trying to install sawtooth on Mac
I got this error message
Error response from daemon: Container 2d69a0a3fe5cfe000ebba5671f813ec44fd18a09305a3ff3d015472ba74dfaf6 is not running
Anyone who knows?
Well...it is working anyway ;-)
Has joined the channel.
Has joined the channel.
Has joined the channel.
Are there gonna be forums setup for Sawtooth ?
instead of just a mailing list ?
Has joined the channel.
Has joined the channel.
Has joined the channel.
Hi @meridian every other week there is a Sawtooth technical forum with a conference call / screen sharing. We go over new features / recent code changes in that meeting. You can email Mark Ford
yea a support forum
its not just sawtooth, but I see it all the time in the fabric channel as well
a lot of stuff is on gerrit, trying to find tickets to things that are similar to ur questions, etc
from my experience in crypto-based blockchain development, fragmentation of resources makes the barrier to entry a bit higher for new developers
That's a good idea. What kind of forums do you use in other projects? I find stackexchange/overflow seems to dominate lately. I don't think any of the sawtooth maintainers are active there though.
I think Fabric has a StackOverflow
I mostly only end up there when Google takes me there, but it would be easy enough to add a bookmark and keep an eye on it
I mostly only end up there when Google takes me, but it would be easy enough to add a bookmark and keep an eye on it
Looks like you can get tag-specific emails too: https://stackexchange.com/filters/309554/my-filter
i know ethereum has its own forums that are semi-private for internal development, but considering the nature of development of hyperledger foundation vs ethereum foundation kind of makes sense
probably a landing page with resources would be most helpful, and a forum for general discussion + pointing people to where to ask hfor help
like 90% of the questions can be answered on stack/git/gerrit/jira
or if your adventuress the mailing list :)
Can Sawtooth run without Docker?
Has joined the channel.
Absolutely. There are directions for installing on ubuntu (it's really just add the repo and then `apt-get install sawtooth`) I saw the email question about BSD.
thanks, I will try it on FreeBSD when I get a chance
Given the architecture, I think it should be possible to develop a TP for example on Windows with Python. The python sdk does not quite install out of the box. Are there any plans to support this mode of development?
Someone correct me if I'm wrong, but I believe we are targeting pip deployment for 1.0, which is fairly soon.
I don't know if anyone has used the Python SDK on Windows before, but it seems to me that the easiest thing would be to just clone the repo and add the source to your python path . . . does Windows have a python path?
You should be able to get a TP working on Windows, with the rest of Sawtooth running within a Linux VM or Docker. I often use docker-compose to spin up a sawtooth network and then connect a TP I'm running native on my Mac. TPs connect to the validator on port TCP/4004 by default. However, none of the core developers install the TPs or SDKs on Windows so there might be some rough edges getting going. However, we will accept Windows compatibility patches and feel free to ask questions as you go along.
I also tried by cloning. In both cases the pkg-config is missing on Windows and it is not so easy to install. I suspect there may be other issues. It would be good to know if someone is already working on this and an estimate of when it will be available.
is that when running build_all?
For a transaction processor on Windows, you want only the python sdk which is in sawtooth-core/sdk/python. The only build step necessary is to run ./bin/protogen. After that, you can run "python setup.py install" in sawtooth-core/sdk/python or set PYTHON_PATH to the sawtooth-core/sdk/python directory.
(python3 setup.py install)
@zac in sawtooth-supply-chain `bin/build_all` references dockers but there is no `./docker/` directory. Did that get removed on purpose?
Some of those scripts might be left over from the sawtooth-core directory, and still need to be modified to be usable in sawtooth-supply-chain
I haven't been modifying them, so I'm not sure which works exactly, but if `build_all` looks like it fundamentally wouldn't work, that might be true
I haven't been the one updating them, so I'm not sure which works exactly, but if `build_all` looks like it fundamentally wouldn't work, that might be true
as for the docker directory, yes that was removed on purpose
We are going for a more standard docker approach, so at the root level there would be a `docker-compose.yaml`, and then both the `server/` and `processor/` directories will have their own `Dockerfile`
We also have `-installed` versions of each of those, in the same directory. The installed version will be for people who just want to get it running, while the default ones will be for developers and will reflect the current code base
Not all of this is 100% in place, but that is the general idea
in any case, I suspect the real question here is, "how the heck do I run this?"
and you should _probably_ be able to just `docker-compose up` from the root directory
might be some kinks though
thanks I'll give that a whirl
might have to `./bin/protogen` . . .
Has joined the channel.
Hello everybody, I'm a noob developer in an immersive program. I'm journeying down my first experience with the block chain and Sawtooth. There's a lot of info in the docs and I'm having a hard time putting it all together. Are there any solid video tutorials out yet?
@zac looks like it's running, thanks! Now to figure out UI.
@chris sounds like you may need a mission :). What would you like to do? Here's one option... try the App Developers guide. Start with getting sawtooth up and running. If you are on a mac I recommend the docker instructions. If you happen to have an ubuntu 16.04 machine you can do the native install path instead. https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html
@chris take a look at the sawtooth section of https://www.edx.org/course/blockchain-business-introduction-linuxfoundationx-lfs171x
(you have to sign up, but it's free)
I'm on a Mac. We're building an order tracking system. The UI is very simple, just a dashboard built in React that shows receipt of order, fulfillment tracking, and shipping status. The block chain should log when the order is made, the fulfillment process, and shipping process. I took that course and reviewed the guid, but I'm unsure of file structure and even what all moving parts need to be present to make a complete application.
I think I'll go back through the EDX course paying particular attention to Sawtooth. Hopefully I can get it up and running lol.
I feel like I missed the Sawtooth portion because it's making a lot more sense. Please forgive lol.
Has joined the channel.
Btw, thanks for the resources!
@chris There are a couple of necessary and/ore useful components you might think about building with Sawtooth:
1. A "transaction processor". This will interface the Sawtooth validator (the thing actually managing the blockchain), and will parse the payloads of your transactions and modify blockchain state appropriately.
2. Then you need to think about how you get blockchain data from the validator to your client. The simplest thing is probably to just boot up the Sawtooth REST API, which will accept HTTP/JSON requests and forward those on to the validator.
2b. However, a common pattern is to write a custom application-specific REST API. This can simplify things for your client, and you can do neat tricks like keep a local copy of state for more complex queries. It will need to communicate with the validator using ZMQ/Protobuf however, which might be a little daunting at first, so maybe best for version 2.
Oh gosh, lol. Yeah, I think we'll stick with using the Sawtooth REST API.
If you are looking for a pretty minimal JavaScript application, I built one for a talk on Sawtooth development. It has an example of both a client and a transaction processor, and just uses the default REST API to communicate.
https://github.com/delventhalz/transfer-chain-js
That's so awesome!! I'll definitely fork that! I'm trying to understand "state". I understand state in React and React Native, so I get the concept. But in the tutorial, when it discusses "state" does this mean "stored on the block chain" where if I have a batch that is not committed to state, they are not on the block chain, but if I have a batch that's been committed to state, that batch is logged to the block chain?
Has joined the channel.
Yeah, when I am talking about "blockchain state", I am referring to the data that has been created by transactions and their interactions with transaction processors
I don't know if I would say it is technically "on the blockchain", since the strictly speaking the blockchain is a collection transactions, batches, and blocks. And those objects are what validators pass to each other.
But validators each store a copy of this state, and can recreate it using the transactions on the chain, and the transaction processors.
Ahh, I see. So what's most important for us to understand is that a batch is either committed to state or not and once committed, the validator will either validate or invalidate the batch?
well, I think it is worth drawing a bit of a distinction between the blockchain, and state
validators have copies of both
but the blockchain is the source of truth which is sent to peers on the validator network
And _batches_ are committed to the _blockchain_
That is where they would live once validated
Any changes to state that are called for by transactions within a batch will get written to state once the batch is committed
but they are not stored together
Ahh, I see. Much clarify, many thanks.
state = the contents of the database. The blockchain/distributed ledger is a distributed database. The datastructure that is a chain of blocks is a list of transactions. Everyone uses blockchain colloquially though to mean the distributed database.
It might be helpful to have the lifecycle of a batch, which looks something like this:
1. A client creates one or more transactions which contain commands to modify state, and signs them.
2. The client then batches these transactions together, and signs the batch.
3. The batch is submitted, likely through a REST API, and reaches a validator.
4. The validator looks at the structure of the batch, checks the signatures, and confirms the batch is "valid". It does not know anything about the commands (i.e. payload) within the transactions.
5. The validator sends the batch off to other validators in the network, which will all repeat steps 4-6 on their own.
6. The transactions are then passed off to an appropriate transaction processor, which _does_ know how to understand the commands. It can run further validation, and also send orders back to the validator about how state should be modified.
6b. If any transaction is invalid for any reason, the whole batch will be rejected and no state changes will be applied.
7. When a validator wins a block, it will take any valid but uncommitted batches it has, add them to the new block, and then modify state accordingly.
8. This new block will be sent to other validators.
@zac with the supply chain dockers running, how do I bring up a UI? I see there's a "server" container running and what IP it's mapped to. Pointing a browser at the connection info provided by `docker inspect` was not successful :).
That is great. Thanks for the explanation.
Does anyone know how to make multiple parties? like in the example with the Tuna going to the store?
@Dan server has nothing at the root route by default
You should be able to access the asset client at `localhost:3000/asset`
Or ping the api at `localhost:3000/api/info`
If neither of those work, then something is probably busted with the server
@sam what is a "party" in this context?
A seller shipping to a buyer. Where the Buyer can see if the seller has shipped the item and if the shipping is in process.
@zac thanks that worked.
Like would you add another asset and transfer to the state?
@zac Sam and I are on the same team working on the same project.
@Dan Excellent, you may have to run scripts locally in order to seed data (including the "asset" type)
@chris @sam It's going to depend a lot on your implementation. We do have a similar PoC out there that might inform your work. Though we haven't written much documentation for it yet, and there is a fair amount going on:
https://github.com/hyperledger/sawtooth-supply-chain
I'm not sure I quite understand the specific question though.
In our PoC we define "Records" which correspond to physical items in the supply chain, and "Agents" which are actors who interact with the supply chain
A Record records a time stamped history of both the "owner" and "custodian" of the physical item
So in the scenario where an item has been bought and is in transit, there would be one Record and three Agents in the system (buyer, shipper, seller).
The seller would still be the "owner", and the shipper would be the current "custodian"
Once the buyer received the item, they would become both the owner and the custodian.
This is all custom logic we wrote ourselves though. It could have been anything and Sawtooth would accommodate the design.
Does that help?
Yes this makes since, so in the Sawtooth Tuna Chain example that is present it is just not showing up in the Tuna list? Example 1 key transfer to another key?
@zac
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, November 2nd from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, November 2nd
Time: 10-11am CDT
We are using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
Agenda:
1. Introductions-Mark Ford
2. Sawtooth Events-Adam Ludvik
3. CII Best Practices Badge-Tom Barnes
4. Open Forum
@sam Sawtooth Supply Chain is a spiritual successor to the Tuna project. I believe they handled it in a similar way. One public key is an owner, and one public key is a custodian. And those properties can be changed to reflect changes in ownership or possession.
@zac are these the correct instructions
System requirements
Git
Docker
I’m on a Mac, but Ubuntu should work the same.
Steps to get supply chain blockchain setup:
1. Git clone https://github.com/hyperledger/sawtooth-supply-chain.git
2. Navigate to sawtooth-supply-chain folder
3. Run docker-compose up in root directory
4. Navigate your browser to localhost:3000/asset
yes*
awesome
i need to figure out some proxy settings for my new mac i think cause my docker compose is failing on the vpn
*you _might_ have to `./bin/protogen` before you docker-compose up, I don't remember
**I don't believe docker compose runs any of the seeding scripts yet, so you'll need to go to the `server/` directory and `npm run make-asset` before you can actually submit any new assets.
ERROR: Service 'supply-chain-tp' failed to build: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
I'm assuming that is a proxy thing
I'm going to set my proxy in the docker software and see if that works
yup that did it
does npm run make-asset seed the supply chain with assets?
or just enable you to then run a seeding script
make asset just adds the `"asset"` RecordType to the blockchain
make-asset just adds the `"asset"` RecordType to the blockchain
got it, cool
`npm run seed-sample-assets` will give you some samples
(run make-asset first)
:ok_hand:
thanks
@zac i got webserver and validator up and working
npm make asset fails
do you think that has to do with not running protogen
the error i get is when it's running core_types.json it looks like
exit status 1
failed at supply_chain_server@0.0.0 make-asset script
hrmmm
what gets logged exactly when you `npm run make-asset`?
> supply_chain_server@0.0.0 make-asset /Users/kolson/Desktop/supply/sawtooth-supply-chain/server
> DATA="../../asset_client/sample_data/core_types.json" node ./scripts/seed_core_types.js
module.js:538
throw err;
^
Error: Cannot find module 'request-promise-native'
at Function.Module._resolveFilename (module.js:536:15)
at Function.Module._load (module.js:466:25)
at Module.require (module.js:579:17)
at require (internal/module.js:11:18)
at Object.
looks like you gotta `npm install`
in the server/ directory?
yep
I'd like to get docker image up that you can exec into and run scripts, but that has been buggy, and I haven't really been able to devote much time to it
so you'll need to install the dependencies locally
great it works now
kewl
now i'm trying the seeding script
once i get this I will modify the readme.md for sawtooth-supply-chain with these simple instructions
Dan is working on this too, and his make-asset batch never got committed because his TP isn't actually running
ok got an error on the seed script
after creating agents . . .
I got error: cannot read property of 'message' of undefined
if you `curl localhost:8008/batch_status?id={the batch id you got back from make-asset}` you can check to see if it actually committed
I suspect it did not
and without the asset type in state, the seed script will fail
that error message is admittedly terrible
but I believe that is the problem
I am getting activity on my terminal, I saw that it got a get and a post request
and the interconnect sent a client batch submit request
for Dan, the TP wasn't running, so the batch is just sitting in the validator, waiting for the appropriate TP to come online
oh i got you
if you curl the batch status, it will probably say "UNKNOWN"
yea now that i look at my logs i see a 'waiting for transaction processor'
yeah
oh, you know what, I think I know what the problem is . . .
yup
the docker-compose file needs an update that never actually got turned into a PR
line 80 should have `-vv tcp://validator:4004` added to the end
I will submit a PR with this
@Dan ^
@zac does this have an impact for our AMI submission
or will ami just fetch the latest and greatest stuff from repo
No, I believe Ryan updated this in the repo he submitted to Amazon
But it never made it into GitHub
would a 'sudo -u sawtooth supply_chain_tp -vv tcp://validator4004' in the root directory connect the tp?
if not I'll probably just wait for the new docker
I don't believe it would
ok no worries
you can add that code to the end of line 80 and compose down and then compose up and it should work though
if you don't want to wait
Ok will give it a whirl
one more quick question
when i look at the validaotr
in the yaml
it says endpoint tcp://validator:8800
PR is here: https://github.com/hyperledger/sawtooth-supply-chain/pull/19
and then bind component and network are at tcp://eth0:4004
so is validator:8800 correct?
it is
I don't know what it means though
ok, i tried modifying, down and up and it doesnt look like it registers the TP
what happens if you `npm run make-asset` and then curl the batch status?
when i run npm make asset
my validator says 'waiting for transaction processor supply chain
it tells me no transaction processors registered for that type
maybe i'll try one more thing -- what is the protogen command i need to run
I just dug into the container running sawtooth supply chain tp
and i think it had module error related to protobuf
i ran ./bin/protogen in sawtooth-supply-chain directory and i got grpc.tools not found
I'm not sure if there is a new issue since changing that field, but i am getting a traceback on supply-chain-tp
'no module named supply_chain_processor.protobuf'
import error
ah yeah, that import error is because you didn't `./bin/protogen`
there may be dependency issues there
protogen should be a part of `processor/Dockerfile` probably, I am less familiar with that whole story though, and I don't really have the capacity at the moment to start poking at it
For now, I would install the missing python dependencies locally and then `./bin/protogen` before you `docker-compose up`
ok great thanks
i wonder if i have some outdated python or pip issues
i will update python, pip and grpc / grpc tools and then do protogen
Can you have multiple assets to a state?
@zac IT'S ALIVE!
yay!
@sam You can save whatever you want to state.
There is no formal concept of an "asset"
It is entirely up to the logic of your transaction processor
but it would be a very weird transaction processor that only allowed on asset in state at a time
but it would be a very weird transaction processor that only allowed one asset in state at a time
So you can have muliptle saves in a state. How would you do this?
I recommend looking at the intkey example in sawtooth-core or that transfer-chain-js example
This is a pretty good document here: https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/global_state.html
Thanks!
But the long and short is this: Blockchain state stored in a merkle tree
where each node is designated by a single byte
i.e., a tree where each node is designated by a single byte
```
00
/ | \
00 01 ...
```
For Sawtooth this goes 35 nodes deep, and you store your data in those deepest nodes
you can forget most of this, but remember that every location where you can store state data is designated by a 70-character hex string
the first six characters are a prefix that designates your transaction family
the remaining 64 are up to you to divvy up however you like
at each of these 70-character addresses, you can store literally any binary data you want
so, for transfer-chain, there were two types of data stored in state, Assets, and Transfers
the Addresses were constructed like this:
```
Asset address == 19d832 + 00 +
An Asset addresses was constructed like this:
```
19d832 + 00 +
The actual data was just an JS object that had been JSON.stringified and then converted into binary with Node.js's Buffer interface.
So each address was one object in state
And each object in state got their own address (assuming unique names and no hash collisions)
You can see this put into practice here: https://github.com/delventhalz/transfer-chain-js/blob/master/processor/handlers.js
Screen Shot 2017-11-01 at 1.53.19 PM.png
If i where to create another record with this code how would i do that. This is what im confused about
`state.get([address])` is going to return the contents of one particular 70-character address in state
it returns it as a JS object with the structure `{ address: data }`, because you may ask for more than one address at a time
hence the plural name "entries"
"entry" is the data at the actual address we want. Remember it is binary data, so when we look at "entry.length" we are checking how many bytes are there.
This transaction processor was written against an older version of Sawtooth that could not delete address keys, and so would "delete" things from state by setting them to just empty binary objects
So the code here checks to see if there is something at this _one_ address, and if that thing has more than 0 bytes. If so, then someone is trying to reuse the same name, and so the transaction is invalid.
This code is enforcing one Asset _per state address_, not one Asset total
yeah, much of that API surface is already out of date, and more will be as we transition to 1.0
This code is enforcing one Asset _per state address_, not one Asset total
@sam is that a screen shot from the online course?
yes it is!
I should really go look at that content. It's hard to have training material in sync with current development. Hopefully if there are old examples they still teach enough that the current methods will be easier to understand.
yeah, much of the API surface of the Sawtooth SDK shown here is already out of date
and more will be as we transition to 1.0
After 1.0 it will be easier to keep stuff like this up to date though
(not that this repo was ever meant to be an official example . . .)
Has joined the channel.
Hello, I am Muthu learning Sawtooth framework. I am getting the following error while running 'xo create' command for using XO Transaction Processor
root@47369194c6d1:/# xo init --username naran
set username: naran
set url: http://127.0.0.1:8080
writing file: /root/.sawtooth/keys/naran.priv
writing file: /root/.sawtooth/keys/naran.addr
root@47369194c6d1:/# xo create game1
Error: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /batches (Caused by NewConnectionError('
Hi @msg2muthu if you are following these directions, https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html, then you might try to repeat the sections where you start the sawtooth processes. It looks like something in your environment is not running.
Has joined the channel.
i followed same, but it failed. i was able to curl http://127.0.0.1:8080/batches in browser. not sure why xo create not able to connect.
@Dan i followed same, but it failed. i was able to curl http://127.0.0.1:8080/batches in browser. not sure why xo create not able to connect.
@msg2muthu could you try this: xo init --username naran --url http://rest-api:8080
Thanks @askmish , It is working now.
It has to do with how Docker does networking
On your host machine, any ports that are being forwarded will just be on `localhost`
within each container though, that won't be the case, they will be at a host named after the docker container
so in this case, `rest-api`
(unless you were _in_ the rest-api container, then it would be `localhost`)
Thanks @zac , i think that since i have run docker-compose with sawtooth-default.yaml, it is binding rest-api:8080. i will try with out running rest-api container and try to run xo create and let you know.
no, you need the rest-api
I may have been unclear
you want that container
if you are on your host machine, or in the res-api container, the URL will be `localhost:8080`
if you are in another docker container, the URL will be `rest-api:8080`
Same thing, just different URLs depending on where you are trying to access it from
hey can someone give step by step process of how to run sawtooth-supply-chain?
There are still a few kinks to work out, so let me know if you have trouble
But you should be able to just follow the setup instructions here:
https://github.com/hyperledger/sawtooth-supply-chain/blob/master/README.md
we are planning to spin a 0.8.10 release tomorrow morning
if you are uploading your project to heroku do you just need the sawtooth-default.yaml on heroku?
im just not sure if i do that how will the tcp and the http link
Has joined the channel.
I have never used docker with heroku before
Assuming it is supported, I would assume it would work more or less like it does on your local machine
Has joined the channel.
I'd like to do a fetch request to a deployed sawtooth app. Any reference materials available?
what do you mean by fetch request?
I want to grab transactions from the block chain using a React app
https://sawtooth.hyperledger.org/docs/core/releases/latest/rest_api.html
@chris might mean state updates. Which would be a little more complicated.https://github.com/hyperledger/sawtooth-supply-chain/tree/master/server This node server handles state delta subscription, if I am not wrong @zac.
that's a little more involved than just a GET request
though maybe that's not what he meant
What I'd like to do is grab the current state of the blockchain so that I can iterate over it and display certain transactions in a dashboard
what deployed sawtooth app?
I feel like I'm super confused. I was under the impression that we would build the sawtooth app and then deploy it to somewhere like Heroku. We're attempting to build a very tiny, and minimally functional order tracking system, but we're not even sure of all the moving parts. I'm a very new developer with 4 months experience in JavaScript. I've built a React JS app that I would like to use to grab transactions from the blockchain and display them in the dashboard. We've used the sawtooth tuna example to build the back end, but we're not even sure if we built a back end?
We just don't know what a fully functional block chain app looks like. We've built decoupled full-stack apps using front end frameworks with Node.js back end using Express, Knex, and PostgreSQL. Beyond that, we have very minimal knowledge of what the back end should look like for use with the block chain. Maybe this project is a bit much for us to chew (especially since we only have 5 days from inception to presentation), but we're super excited about the block chain and want to learn how to use it.
I think the best answer I can give you is that I think you want to spend some time at a broader level. You are diving into some fairly low level implementation details, which might teach you about working with Sawtooth, but won't teach you much about what a blockchain is or what it is good for.
Sawtooth is a general purpose blockchain intended for consortiums of users. This means there is no predefined set of logic about what happens on the blockchain, and there is no global blockchain network for you to just plug into and start messing around with. This is unlike Bitcoin, where the blockchain does one thing (trades bitcoin), and there is one bitcoin network that already exists out there.
With Sawtooth, it is all up to you. _You_ decide what data you want to the blockchain to track, what logic you want it to execute, and you are in charge of how the blockchain network is deployed and communicated with.
So building a front-end for a Sawtooth network is probably not the place you want to start. It is meaningless without a well-defined set of back-end logic.
Now, you could play around with the [Sawtooth Supply Chain](https://github.com/hyperledger/sawtooth-supply-chain) app linked above. It is essentially the Tuna trading demo from the video. And you could replace the existing front-end clients with something you built yourself, but I don't think you will learn much about Sawtooth or blockchains from this. You will mostly just learn about the Supply Chain app.
What might be better is to build a complete Sawtooth app on your own, meaning a Transaction Processor, and a client that communicates with the Sawtooth REST API. Look at the [IntKey](https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples/intkey_python), or [Transfer Chain](https://github.com/delventhalz/transfer-chain-js) examples for inspiration. These are simple concepts, that can show you where to get started, and are both [well](https://sawtooth.hyperledger.org/docs/core/releases/latest/transaction_family_specifications/integerkey_transaction_family.html) [documented](http://slides.com/delventhalz/blockchain-apps#/). The [Application Developer's Guide](https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html) also includes a lot of helpful information.
What might be better is to build a complete Sawtooth app on your own, meaning a Transaction Processor, and a client that communicates with the Sawtooth REST API. Look at the [IntKey](https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples/intkey_python), or [Transfer Chain](https://github.com/delventhalz/transfer-chain-js) examples for inspiration. These are simple concepts, but fully executed from end to end. They can help show you where to get started and are both [well](https://sawtooth.hyperledger.org/docs/core/releases/latest/transaction_family_specifications/integerkey_transaction_family.html) [documented](http://slides.com/delventhalz/blockchain-apps#/). The [Application Developer's Guide](https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html) also includes a lot of helpful information.
i built a qr code scanning mobile app that i side loaded onto a phone to track a package in a system in sawtooth
im literally working on that exact concept
what zac said is 100%
damn no emoji's on rocket chat, thats how u know this is serious business here folks
👊🔥
Has joined the channel.
In my defense i had been awake for almost 20 hours :O
That's where I believe I'm at. I should probably do a ton more reading.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=mbkJzQW5d3fTwHNiG) @zac
Thanks @zac, I understand it.
Has joined the channel.
Has joined the channel.
Let me know if this is too high level. I read this in the docs "Modifications to state are performed by creating and applying transactions. A client creates a transaction and submits it to the validator. The validator applies the transaction which causes a change to state." Do many validators actually verify the transaction?
All validators will verify the transaction.
As a user you'd send a transaction to one validator. That validator will broadcast it to the other validators. All of the validators will check the transaction. Each validator will only update their local state if they agree to the transaction (and they received it as part of a valid block).
@amundson I don't remember what is the difference between `sawtooth keygen` and `sawtooth admin keygen`
Thanks @Dan, and each transaction family has a set of Validators?
@Dan: the differences between the keygens is subtle:
`sawtooth keygen` generates a public/private key pair that a _user_ can use to sign transactions and/or batches
`sawtooth admin keygen` generates a public/private key pair that a _validator_ can use to sign blocks
This will be made more clear in the docs for 1.0
Has joined the channel.
Hi, i'm very new with Sawtooth. I'm trying to just build a network with two validators running in two different virtual machines. I set `--peering dynamic` but i look into */var/log/sawtooth/validator-debug.log*, the validator can't find any peer. How does validator's topology search work? Thanks in advance.
Hi, i'm very new with Sawtooth. I'm trying to just build a network with two validators running in two different virtual machines. Each runs as Docker container in its respective vm. I set `--peering dynamic` and map the port to the respective vm's ip address. I look into */var/log/sawtooth/validator-debug.log* and the validator can't find any peer. How does validator's topology search work? Is this design even possible? Thanks in advance.
@Dan https://lists.hyperledger.org/pipermail/hyperledger-stl/2017-November/000116.html
@ganbold nice work!
@ajenie there's a _seed_ setting to tell a validator where to start it's network building. `-s SEEDS`.
@Dan thanks indeed for the information. I'll take a look at that parameter.
Has joined the channel.
Has joined the channel.
Has joined the channel.
Has joined the channel.
Hey fam, just moved to new version hitting a small problem. I am running into (0.8.9-1) running ubuntu 16.04. The Validator/TP/Rest modules are working intended except I hit a debug message """ [ DEBUG permission_verifier] Chain head is not set yet. Permit all."""
Hey fam, just moved to new version hitting a small problem. I am running into (0.8.9-1) running ubuntu 16.04. The Validator/TP/Rest modules are working intended except I hit a debug message *[ DEBUG permission_verifier] Chain head is not set yet. Permit all.*
Hey fam, just moved to new version hitting a small problem. I am running into (0.8.9-1) running ubuntu 16.04. The Validator/TP/Rest modules are working intended except I hit a debug message `[ DEBUG permission_verifier] Chain head is not set yet. Permit all.`
I am generating keys and the genesis block as required
Has joined the channel.
how do you clear docker output before running tests? I keep coming up with an error that says "XXX that has to be created by this script already exists". XXX is different each time.
@Dan how Sawtooth nodes communicate/connect to each other? Are there any illustration which shows the processes related to it? I would like to run 2 nodes and test Sawtooth XO game
@BeeKay I'm not sure which script you are running but sometimes `--force` on a docker compose script will force it to overwrite things like key files.
@ganbold they 'gossip' with each other. If you want to run two nodes, you start one and then give that node's connection info as the SEED connection for the second node. There's some docker compose files in the integration directory that do this. They need to be run with a command that's something like bin/run_docker_test. (sorry I'm away from my source reference at the moment). That's all from sawtooth-core.
Otherwise if you have two machines you can start sawtooth like you would for production using linux - still using the first node's connection string as the seed connection for the second (or third, or fourth..) node.
@Dan very cool, so with multiple nodes, nodes' validator will start with other nodes' validator address via -s or --seeds tcp://hostname1:port,tcp://hostname2:port etc
Has joined the channel.
Has joined the channel.
Hi there. I'm trying to use python SDK for my project. Getting this error: `ModuleNotFoundError: No module named 'sawtooth_sdk.protobuf'` when trying to use `TransactionEncoder`. Any ideas what the hell is going on with it?
I think you should try running bin/protogen
and then try
agreed, you will need GRPC and grpc tools
Well, i just intalled sawtooth-sdk as a dependency via pip, so I can't understand what you talking about @ganbold
GRPC - $ python3 -m pip install grpcio
GRPC Tools - $ python3 -m pip install grpcio-tools
if you already have those then you can do ./bin/protogen
per https://github.com/hyperledger/sawtooth-core/blob/master/sdk/README.md
```Now that grpc is installed, the protobuf files need to be generated. The protogen script generates python classes based on the proto files found in the protos directory and writes them into sawtooth-core/sdk/python/sawtooth_sdk.protobuf and sawtooth-core/validator/sawtooth_validator/protobuf:
% cd /project/sawtooth-core
% ./bin/protogen
```
Has joined the channel.
Has joined the channel.
Has joined the channel.
Has joined the channel.
Has left the channel.
@Dan - I created a pull request for STL-802. Please can you look and ensure everything is correct. I missed the Signed-off by originally and had to amend my commit.
Great! I'm going to be unavailable for a few days, but I'm sure the other maintainers will review.
Has joined the channel.
Has joined the channel.
hi there. i'm building a sawtooth blockchain project, but have been having difficulty building some of the rust components
i want to use the smallbank workload generator for testing, but building the rust SDK gives me this error
```
```
error[E0583]: file not found for module `client_batch`
--> src/messages/mod.rs:26:9
|
26 | pub mod client_batch;
| ^^^^^^^^^^^^
|
= help: name the file either client_batch.rs or client_batch/mod.rs inside the directory "src/messages"
```
I'm using rustc 1.21.0 (3b72af97e 2017-10-09) if that helps?
I'm using rustc 1.21.0 (3b72af97e 2017-10-09) on OSX if that helps?
ok, i think i solved this - you have to run `cargo install protobuf` before `bin/build_rust`
@grkvlt cool
@grkvlt thanks for the PR!
Hello! For the validator in docker/compose/sawtooth-default.yaml, is there any reason that networking wouldn't work in a Container orchestration solution such as Kubernetes?
I had a working deployment going, but I updated the image today x.x
@zac in the supply chain demo is there a way to save the google maps api key in my environment?
Has joined the channel.
@oatmealraisin i have a deployment of sawtooth validators using Docker SDN with the overlay driver, and I expect you could also do something similar with K8s using Flannel or one of its other SDN drivers, yes. I haven't tried a K8s deployment yet, but its one of the production architectures we are looking at...
@oatmealraisin I have a multi-host deployment of sawtooth validators using Docker SDN with the overlay driver, and I expect you could also do something similar with K8s using Flannel or one of its other SDN drivers, yes. I haven't tried a K8s deployment yet, but its one of the production architectures we are looking at...
@oatmealraisin I have a multi-host deployment of Sawtooth with validators networked using Docker SDN with the overlay driver, and I expect you could also do something similar with K8s using Flannel or one of its other SDN drivers, yes. I haven't tried a K8s deployment yet, but its one of the production architectures we are looking at...
@oatmealraisin I have a multi-host deployment of Sawtooth with validators networked using Docker SDN and the overlay driver, and I expect you could also do something similar with K8s using Flannel or one of its other SDN drivers, yes. I haven't tried a K8s deployment yet, but its one of the production architectures we are looking at...
Can anyone @here help me with generating a transaction input file for the `smallbank_workload` batch submission tool? I have the Docker image for the workload generator built, but I can't see where I should be generating the input transactions. Is there an example in the `sawtooth-core` repo somewhere?
@Dan Yep. The server will look for a `MAPS_API_KEY`, first as an environment variable, then as a key in `server/config.json`
Furthermore, when you enter it via the web app, it _should_ be saving it to the config.json file, so you shouldn't have to enter it again unless you are rebuilding everything from scratch.
That parts a little hacky though, so I wouldn't be super surprised if it broke for some reason.
That part's a little hacky though, so I wouldn't be super surprised if it broke for some reason.
@oatmealraisin I haven't worked with Kubernetes myself, but I know some folks have used Sawtooth with it before. Should work fine.
Has joined the channel.
@kelly_ I have the same issue as @dniHze had yesterday. To give a bit more information...
I've installed `grpcio` and `grpcio-tools`, but the instructions that @ganbold linked do not apply if you installed the Sawtooth SDK via `pip` and you are not working inside of a Vagrant environment (unless I'm mistaken).
I don't have the `sawtooth-core` repo cloned, so I'm not able to run the `bin/protogen` script you mentioned. Surely these classes should be generated before the module is published to `pip`?
I'm new to Sawtooth and I'm revising Python after quite a break, so please bear with me if I ask stupid questions
Hi, I'm doing a master's project using Sawtooth to instantiate a private permissioned ledger between a small number of nodes, but i'm completely new to sawtooth; I saw the Sawtooth lake tutorial at https://sawtooth.hyperledger.org/docs/core/releases/0.7/tutorial.html but I couldn't find the tutorial for sawtooth-core, are they basically the same and can I follow the same steps?? Sorry for being such a noob but is completely new.
Has joined the channel.
Hi @maoxine 0.7 is legacy now, and 0.8 is stable. Checkout https://sawtooth.hyperledger.org/docs/core/releases/0.8/app_developers_guide/ubuntu.html for getting sawtooth running with Ubuntu. There was a major rearchitecture between 0.7 and 0.8 so they are incompatible.
@grkvlt i can help you with the smallbank stuff
@jsmitchell awesome, thx. what should i be looking for?
@jsmitchel awesome, thx. what should i be looking for?
@jsmitchel awesome, thx. what should i be looking for?
@jsmitchell awesome, thx. what should i be looking for?
are you able to execute the smallbank-workload command?
yes, i built it from the rust sources, but it wants an input file...
ok
there are a few steps
the first step will generate a yaml file containing the smallbank transactions
this format is not sawtooth specific. the intent was it could be used as input for any blockchain workload tools.
you will do `smallbank-workload playlist create -a 10 -n 1000 -o smallbank_playlist.yaml`
-a is the number of accounts to create
-n is the number of operation transactions to create against those accounts
you can always provide --help to this tool to get command line option help
understood. i'll try that...
once it generates that, you can look at that smallbank_playlist.yaml file -- the transactions are pretty readable
ok, so that's step 1
the next step turns that input file into sawtooth specific transactions
i get
```
i get
```
thread 'main' panicked at 'Unset payload type: create_account {customer_name: "customer_000000" initial_savings_balance: 1000000 initial_checking_balance: 1000000}', src/playlist.rs:358:16
```
running the `playlist create` command?
i get
```thread 'main' panicked at 'Unset payload type: create_account {customer_name: "customer_000000" initial_savings_balance: 1000000 initial_checking_balance: 1000000}', src/playlist.rs:358:16
```
running the `playlist create` command?
i did `./target/release/smallbank_workload playlist create -a 10 -n 1000 -o smallbank_playlist.yaml`
hmm
i can give you the backtrace as well:
```
stack backtrace:
0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
1: std::panicking::default_hook::{{closure}}
2: std::panicking::default_hook
3: std::panicking::rust_panic_with_hook
4: std::panicking::begin_panic
5: std::panicking::begin_panic_fmt
6:
i can give you the backtrace as well:
```stack backtrace:
0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
1: std::panicking::default_hook::{{closure}}
2: std::panicking::default_hook
3: std::panicking::rust_panic_with_hook
4: std::panicking::begin_panic
5: std::panicking::begin_panic_fmt
6:
@grkvlt are you on current master?
yes
this is probably related to some breaking changes that went in with some of the protobuf objects
@agunde @pschwarz ^
Ya, that Unset payload went in recently.
got it - was a missing line:
``` payload.set_payload_type(SBPayloadType::CREATE_ACCOUNT);
```
I'll make a PR
yeah, it works now. it wasn't setting the payload type for the initial create account txn before
https://github.com/hyperledger/sawtooth-core/pull/1088
so, either a protogen issue or the smallbank stuff is currently broken?
no, looks like the workload generator just wan't updated. with that PR i now have a YAML file with 1000 txn definitions in it
@jsmitchel @grkvlt is correct, there was a place where the payload was not being set. This didnt matter before the the addition of the default UNSET to the protobuf enum, because it defaulted to CREATE_ACCOUNT value .
@jsmitchell l @grkvlt is correct, there was a place where the payload was not being set. This didnt matter before the the addition of the default UNSET to the protobuf enum, because it defaulted to CREATE_ACCOUNT value .
@jsmitchell @grkvlt is correct, there was a place where the payload was not being set. This didnt matter before the the addition of the default UNSET to the protobuf enum, because it defaulted to CREATE_ACCOUNT value .
That's what I thought, just hadn't had a chance to look at the code :)
ok, next step is `smallbank-workload process`
ok, next step is `smallbank-workload playlist process`
sorry
`smallbank-workload playlist process`
`smallbank-workload playlist process -i smallbank_playlist.yaml -k keyfile.key -o smallbank.txns
`smallbank-workload playlist process -i smallbank_playlist.yaml -k keyfile.key -o smallbank.txns`
ok, thx. what is the `keyfile` i need here?
you will need to generate a key with `sawtooth keygen` to use to sign the transactions
it is the private key
ah, and i did that already during validator startup, so use the `my_key.priv` file (well, it has a different name in my setup) from that?
so, there is the validator private key and whatever 'user' private keys that you generate
you are probably fine to reuse that my_key.priv
once you have generated the signed transactions, you need to batch them up (batches are sawtooth's unit of submission/atomic change)
`smallbank-workload batch -i smallbank.txns -k keyfile.key -n 10 -o smallbank.batches`
-n is the number of transactions to include in a batch
now you will have a file of batches you can submit to sawtooth
`smallbank-workload submit -i smallbank.batches -r 1 -t http://localhost:8080`
-r is the number of batches per second to submit to the target
obviously, replace the value of -t with whatever host:port is running your sawtooth rest api
awesome! that seems to be working perfectly, thanks guys
```Input: smallbank.batches Target: http://sawtooth01:8080 Rate: 1
target: http://sawtooth01:8080 target rate: 1 count: 1 effective rate: 9.396461076639932 per sec
target: http://sawtooth01:8080 target rate: 1 count: 2 effective rate: 1.0695991950513057 per sec
target: http://sawtooth01:8080 target rate: 1 count: 3 effective rate: 0.9997318958990853 per sec
target: http://sawtooth01:8080 target rate: 1 count: 4 effective rate: 1.0002537353653038 per sec
target: http://sawtooth01:8080 target rate: 1 count: 5 effective rate: 0.996880866435177 per sec
target: http://sawtooth01:8080 target rate: 1 count: 6 effective rate: 0.9955984760625018 per sec
```
sweet!
the cool thing about this is that it's totally reproduceable
even between platforms
yep, that's what i'm interested in - i want to do some tests on various configurations of sawtooth to get a feel for the way our production deployment should be structured.
do you know if there's any sort of sizing guide for deployments in the docs anywhere? i couldn't find much about it yet...
I figured out the issue. It doesn't seem like the default transaction processors (intkey, settings, xo) retry connecting to the validator
So if the validator isn't ready when they all get spun up, they will hang
Is there any way to have them retry on interval?
@oatmealraisin they should all retry/reconnect
if they are not, then that is a bug
@grkvlt what's the use case?
@jsmitchell we're trying to build a cryptocurrency, using sawtooth for permissioned blockchain and seth for evm smart contracts
cool!
hm, those smallbank transactions don't seem to get committed... i configured `sawtooth.validator.transaction_families` to include `smallbank` but i see 100 batches pending on grafana?
hm, those smallbank transactions don't seem to get committed... i configured `sawtooth.validator.transaction_families` to include `smallbank` but i just see 100 batches pending on grafana?
did you start up a smallbank transaction processor?
if you look at the validator logs, you should either see a line about the smallbank transaction processor registering, or you should see a line about 'waiting for the transaction processor' when it tries to process the first smallbank transaction
yes, docker shows it running. i'll check the logs
```fd20d302cdae scotcoin/sawtooth-smallbank-tp-go:latest "smallbank-tp-go -..." 15 minutes ago Up 15 minutes 4004/tcp smallbanklocalnode_smallbank-tp-go_1
```
```validator | [2017-11-08 18:27:10.075 INFO processor_handlers] registered transaction processor: connection_id=fe5f1969be546d213c039450ce4552f1ebb88eece356ad236a412c7f5edf29f75a434c21ff7a64f974d4dddb3aa57734e6bfc4c101c67a2e064d933bb1b4c7cc, family=smallbank, version=1.0, encoding=application/protobuf, namespaces=['332514']
smallbank-tp | 2017/11/08 18:27:10.079338 processor.go:355: [INFO] Successfully registered handler (smallbank, 0x494190, application/protobuf, [332514])
```
this looks like what you are talking about?
yep
that's all good
what do the validator logs say once transactions start coming in?
ah, there's a bunch of POSTs to `/batches` but then there's a 504 error, looks like
```rest-api | [2017-11-08 18:40:44.356 INFO helpers] POST /batches HTTP/1.1: 202 status, 192 size, in 0.007825 s
rest-api | [2017-11-08 18:40:45.358 INFO helpers] POST /batches HTTP/1.1: 202 status, 192 size, in 0.007745 s
rest-api | [2017-11-08 18:40:46.360 INFO helpers] POST /batches HTTP/1.1: 202 status, 192 size, in 0.008734 s
rest-api | [2017-11-08 18:41:21.154 INFO helpers] GET /state?address=000000 HTTP/1.1: 200 status, 1198 size, in 0.008904 s
rest-api | [2017-11-08 18:41:28.610 INFO helpers] -: 504 status, 182 size, in 0.000260 s
```
that last line seems wrong
any validator log messages associated with batch verification and block processing?
in the debug log i see this:
```[18:40:26.422 [Thread-45] executor DEBUG] failing transaction 58fb6f470cc17d44d4b935eeb7a7d95443aa209328ce114799ce4b8f6dc5c0800a4178b386b3b3e5ac69fdf8dee8301195f181d702f7475d97b6986d7f9d4c32 of type (name=smallbank,version=1.0,encoding=) since it isn't required in the configuration
[18:40:26.423 [_PublisherThread] publisher DEBUG] Batch 87d47f6570616901c81df5d405d2cad37ee0d49782f47b2e2ddeb9be118ffa9e695b9e6634b51be43f0b5dbf5e25dbcb8122615fa56137f4419c8f9788c3ff6d invalid, not added to block.
[18:40:26.423 [_PublisherThread] publisher DEBUG] Abandoning block (2, S:, P:825416f7): no batches added
[18:40:27.315 [InterconnectThread-1] interconnect DEBUG] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 6969 bytes
[18:40:27.318 [Thread-10] interconnect DEBUG] ServerThread sending GOSSIP_MESSAGE to b'9d3d70d02ccdda86e1ada64-943486893c776fc9090e630'
[18:40:27.318 [Thread-10] interconnect DEBUG] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'48a7fa406a3641e1'
```
That looks like it is missing the encoding.
strange, i set that in the configuration
encoding was removed in a recent change
@pschwarz @agunde ^
@grkvlt you can actually leave the sawtooth.validator.transaction_families setting empty - the default behavior is to allow any transaction type unless that list is set.
good to know
is there a way of interrogating sawtooth as to the current state of the 0mq network, i.e. how many validators, txn processors etc and where they are/what they are doing?
also, do i need a _Validator Registry Transaction Family_ processor configured?
@boydjohnson thanks so much, i really appreciate it.
No problem, @maoxine
@boydjohnson although do you know about whether the docker implementation is easy to use because i don't have ubuntu, only centos and I'm not sure my ubuntu virtual machine has enough memory for sawtooth?
yeah, docker is easy to use with sawtooth.
@boydjohnson okay thanks, i shall stop bothering you
No problem. Come back if you need more pointers or have results to share.
@grkvlt you need validator registry if you are running poet
which you should be if you are running multiple validators
also I know @agunde is currently working on being able to query peering state
@jsmitchell thx, so i don't need it yet. i have got the transactions being committed from the workload generator now, too - i had to update my docker images i was using, and then everything was ok and the commands you gave me worked perfectly
nice
Has joined the channel.
Has joined the channel.
hi there. it looks like commit https://github.com/hyperledger/sawtooth-core/commit/c3c5bfeda36af7883e034c39f33f6e9260c95c41 removed some message types (`STATE_DELTA_SUBSCRIBE_REQUEST` in particular) that are required/used by the supply-chain demo app - https://github.com/hyperledger/sawtooth-supply-chain/blob/db43a730e8d7f9867d71a0daa877a1ff7702176a/server/blockchain/index.js#L53 - is there a simple replacement for these messages that i could use?
@grkvit supply chain is currently using sawtooth-core 0.8 (the 0-8 branch or published docker images)
the state delta subscription messages were replaced by the event subsystem and related messages
Hi, I am able to get response for blocks in client container (rest-api), but no responses from host machine using "curl http://localhost:8080/blocks" in my Windows system. Could you please help me to fix this issue so that i will be able to run few examples. Thanks in advance.
@msg2muthu are you running your validator in a docker or natively
maybe try curl http://rest_api:8080/blocks
yes, i just realised that. i might use this as a way for me to get up to speed on using the Sawtooth APIs then, and update the app for the latest version...!
@grkvlt if you do make progress on that, we can branch sawtooth-supply-chain and put the 0.8 version in a 0-8 branch
ok, will let you know how i get on @amundson
@adamludvik and @pschwarz are event experts
not to call them out or anything, but it's true
;) thanks, i'm only just getting started using Sawtooth so help is appreciated
@kelly_ Thanks for your response, http://rest_api:8080/blocks is working fine inside client container (root@5eb33ce27fcf:/# ) only, curl http://localhost:8080/blocks is working in VM ([vagrant@localhost ~]$), none of them is working from host machine (msg2muthu@DT-12344241 MINGW64 ~).
i did not strike the content, i think editor strike through, pls consider that statement too.
@kelly_ Thanks for your response.
@kelly_ Thanks for your response. http://rest-api:8080/blocks is working in Client Container [root@5eb33ce27fcf:/#],
http://localhost:8080/blocks is working in VM [vagrant@localhost ~],
none of them is working in host machine [msg2muthu@DT-12344241 MINGW64 ~].
#headsup @pschwarz https://jira.hyperledger.org/browse/STL-849 I'll add debug logs to that shortly.
Thanks
Is that against master/nightlies? Or 0.8?
0.8.9
:thumbsup:
updated it with logs @pschwarz
How to switch for POS\DPOS consensus? Write my own? Have anyone done that already?
can i get response for /blocks from host machine or am i understanding incorrectly from "Use curl to confirm that you can connect to the REST API from the host. Enter the following command from the terminal window for your host system": please guide me.
I'm not sure if this is related to the Websocket bug earlier, but it appears that the REST API gets hung upon from the validator frequently. Is there a known issue?
Depends on the endpoint you're calling
We have some performance issues with some of the listing endpoints, that may seem like it's hanging, depending on the size of your chain/
We have some performance issues with some of the listing endpoints, that may seem like it's hanging, depending on the size of your chain
A fix for block listing just went into master ~20min ago
If it's other endpoints, it maybe a new issue
Has left the channel.
just calling /batches
Batches falls into that listing category
@amundson do you know how to curl a rest api from the host that is operating in a vagrant VM?
do you need to somehow pipe those ports out to the host
@anton_petrashkevich we do not have pos/dpos, you would need to write your own
@msg2muthu in your vagrant file there is a way to setup port forwarding
https://www.vagrantup.com/docs/networking/forwarded_ports.html
config.vm.network "forwarded_port", guest:8880, host: 8080, host_ip: "127.0.0.1"
like that
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=KkDgq6mPvYCAXf7fd) @pschwarz interesting -- the size of the chain is brand new in this case
@kelly_ I tired same earlier as mentioned in the link as guest: 80 instead of guest:8080. Let me try with guest: 8080.
@kelly_ Thanks Kelly!!! It worked after port changed for guest to 8080.
nice!
Hmm. Does it have the same timeout issue?
Hey fam, I'm bumping into a possible bug. A brief summary of the situation: In intkey txn family I am sending two batches, the first batch contains only a single 'set' transaction to initialize a state. The second batch I submit contains two transactions, one of which, I am sure refers to a valid state, the second state referenced is the state being set in the first batch. Below is are deets ^^
*System specs: Ubuntu 16.04, Running ST 0.8.9, *
*Stack Trace:*
```
sawtooth-validator-default | [21:17:41.230 ERROR _base] exception calling callback for
note, I am submitting these batches synchronously
Has joined the channel.
Some know some video tutorial for deploy a simple application?
now i am started with Ubuntu 16.4 the version 0.81
Has joined the channel.
i had an idea that i might be able to deduce the validator/txn processor mesh network structure by querying 0MQ directly, has anyone @here done that or thinks its possible? there's a `GET_PEERS` message i could call recursively until it's mapped (using some graph traversal djikstra magic) maybe?
or is there an easier way i'm missing?
@grkvlt https://github.com/hyperledger/sawtooth-core/pull/1091
you'll need to start with knowledge of the nodes in the network
otherwise, if you want to start from one node, you'll need to iteratively visit unvisited nodes you discover via those endpoints
but, if you've deployed them, just call that endpoint on each and build the graph
Has joined the channel.
nice, i'll give that a try. in my architecture i'll always know the location of the core cluster of nodes, so i can start from there...
Hi, I am trying to run Sawtooth Education project (https://github.com/hyperledger/education/tree/master/LFS171x/sawtooth-material) mentioned in the Course. I ran Validator using yaml provided and starting processor (npm start). But Transaction Processor is not getting registered with Validator. I am getting error "no transaction processor found" when i create user in Client UI. (Environment : Windows, Docker. Vagrant) Please guide me.
The npm command and the docker-compose are both being run in Vagrant?
Has joined the channel.
@boydjohnson yes both are running in Vagrant.
@msg2muthu What output does `netstat -tp` give you?
hi. I'm new to Sawtooth. Trying to compile the java examples and java SDK but seem to be missing the sawtooth.sdk.protobuf libraries. How can I get them ?
@boydjohnson where do i need to run this command, in client container or vagrant?
Hey @brighty73 The pom.xml for the java sdk expects the there to be a directory at /project/sawtooth-core/protos with the proto files. If you are building the java sdk outside of an environment with this you can update the pom.xml.
In vagrant.
@msg2muthu ^
Let me see - was initially trying to just compile the XO_Java - but POM file could not get SDK libraries - so then tried to get the full SDK and compile it ( but it failed )
@brighty73 There should be a build script in sawtooth-core/bin that installs the sdk with maven before building the xo example. `sawtooth-core/bin/build_java_xo`.
@boydjohnson i am getting below output
[vagrant@localhost ~]$ netstat -tp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost.localdoma:ssh gateway:61929 ESTABLISHED -
tcp 0 0 localhost.localdoma:ssh gateway:61915 ESTABLISHED -
tcp 0 0 localhost.localdoma:ssh gateway:61913 ESTABLISHED -
[vagrant@localhost ~]$
I am unsure. @zac has more experience with the js sdk.
Thanks @boydjohnson . @zac could you pls check that?
thanks - will give build script a try - thanks for your help
@zac below is the npm start output
[vagrant@localhost ~]$ cd seidev/projects/sawtooth-examples/education/LFS171x/sawtooth-material/sawtooth-tuna/processor/
[vagrant@localhost ~/seidev/projects/sawtooth-examples/education/LFS171x/sawtooth-material/sawtooth-tuna/processor (master)]$ npm start
6: Pulling from node
Digest: sha256:72dd1fefd15a3313e69871559c2198be107dd67ba81d8bf2973576e903496760
Status: Image is up to date for dt-00003646.corp.seic.com:5000/node:6
> Sawtooth-tuna-chain-processor@0.0.0 start /usr/src/app
> node index.js
Initializing JSON handler for Sawtooth Tuna Chain
@zac below is the npm start output
[vagrant@localhost ~]$ cd seidev/projects/sawtooth-examples/education/LFS171x/sawtooth-material/sawtooth-tuna/processor/
[vagrant@localhost ~/seidev/projects/sawtooth-examples/education/LFS171x/sawtooth-material/sawtooth-tuna/processor (master)]$ npm start
6: Pulling from node
Digest: sha256:72dd1fefd15a3313e69871559c2198be107dd67ba81d8bf2973576e903496760
Status: Image is up to date for dt-12343646.abcxyzcom:5000/node:6
> Sawtooth-tuna-chain-processor@0.0.0 start /usr/src/app
> node index.js
Initializing JSON handler for Sawtooth Tuna Chain
I feel a number of steps behind
@brighty73 I think you need to run `sawtooth-core/bin/build_java_sdk` and then `sawtooth-core/bin/build_java_xo`.
This is a custom Transaction PRocessor written in JS?
@zac No, it is example of transfer-chain TP from Sawtooth Tuna Chain
I have no idea what this Tuna Chain thing is, but I keep getting asked about it . . .
This is from the edx course?
yes, it is in edx course, course has steps too. i tried same in my Mac, it is working fine. Issue is in Windows/Vagrant only.
thanks agunde & boydjohnson - got it compiled in Eclipse
Well, it uses a hard-coded validator url: https://github.com/hyperledger/education/blob/master/LFS171x/sawtooth-material/sawtooth-tuna/processor/index.js#L14
If it is running in a different Docker container than the Validator, I suspect this busted it
@zac i see two listener 4004 and 8800. pls see the log from docker-compose below.
sawtooth-validator-default | [2017-11-10 16:12:52.531 DEBUG core] txn receipt store file is /var/lib/sawtooth/txn_receipts-00.lmdb
sawtooth-validator-default | [2017-11-10 16:12:52.542 DEBUG core] block store file is /var/lib/sawtooth/block-00.lmdb
sawtooth-validator-default | [2017-11-10 16:12:52.548 DEBUG selector_events] Using selector: ZMQSelector
sawtooth-validator-default | [2017-11-10 16:12:52.554 INFO interconnect] Listening on tcp://eth0:4004
sawtooth-validator-default | [2017-11-10 16:12:52.554 DEBUG dispatch] Added send_message function for connection ServerThread
sawtooth-validator-default | [2017-11-10 16:12:52.791 DEBUG selector_events] Using selector: ZMQSelector
sawtooth-validator-default | [2017-11-10 16:12:52.792 INFO interconnect] Listening on tcp://eth0:8800
sawtooth-validator-default | [2017-11-10 16:12:52.792 DEBUG dispatch] Added send_message function for connection ServerThread
sawtooth-validator-default | [2017-11-10 16:12:52.792 DEBUG dispatch] Added send_last_message function for connection ServerThread
Will it be helpful?
the port isn't the problem
each Docker container has its own `localhost`
`localhost` in the TP container is not the same as in the validator container
i had similar problem earlier with 8080 which is nor forwarding to host. so i have added forward_host in Vagrant file. it worked. do i need to do same thing like this?
If they are all getting set up in the same docker-compose file, Docker will expose the containers to each other using the key the container is under
i.e. `tcp://validator:4004`, `http://rest-api:8080`
(not sure if that's what the names are in your compose file)
i have these as follows
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
what's the compose file you're using?
Has joined the channel.
hello everyone
i have a question
when I attempt to run my sawtooth-default.yaml file that you download
I keep getting this error
ERROR: Version in "./sawtooth-default.yaml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/
anyone know what this is about
im on linux ubuntu
@LEscobar-Driver What is the `docker-compose` version? It seems like your docker or docker-compose libraries are out of date.
docker-compose version 1.8.0, build unknown
docker-py version: 1.9.0
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
that is that I keep reading on forums
however, I see no updates for any of my files
i uninstalled and reinstalled as well
what does `[_PublisherThread] publisher INFO] Block publishing is suspended until new chain head arrives.` mean?
i have two vms, with a rest-api, validator and settings-tp on one and a validator,settings-tp and smallbank-tp on the other
submitting txns to the rest api on the first vm causes them to be processed by the smallbank-tp on the second, so networking and 0mq is working
but if i go to `/transactions` on the rest api at the first vm, i see nothing?
i am initialising the validator like this on the first node:
``` sawtooth admin keygen --force && \
sawtooth keygen scotcoin --force && \
sawtooth config genesis -k /etc/sawtooth/keys/validator.priv -o genesis.batch && \
sawtooth admin genesis genesis.batch && \
i am initialising the validator like this on the first node:
``` sawtooth admin keygen --force && \
sawtooth keygen scotcoin --force && \
sawtooth config genesis -k /etc/sawtooth/keys/validator.priv -o genesis.batch && \
sawtooth admin genesis genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator.sawtooth:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--peering dynamic \
--opentsdb-url http://influxdb.sawtooth:8086 \
--opentsdb-db metrics
```
and on the second like this:
``` sawtooth admin keygen --force && \
sawtooth keygen --force && \
sawtooth-validator -vv \
--endpoint tcp://${NODE}.sawtooth:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--peering dynamic \
--peers tcp://validator.sawtooth:8800 \
--seed tcp://validator.sawtooth:8800 \
--opentsdb-url http://influxdb.sawtooth:8086 \
--opentsdb-db metrics
```
should i be copying something over to the second node?
btw my docker version is this
Docker version 17.09.0-ce, build afdb6d4
i think it is out of date
perhaps
I know my docker install works though because hello-world is working
nvm fixed it
the fix is this
go into your sawtooth-default.yaml file
change the version from "2.1" to "2"
worked for me
@zac i am using this file https://github.com/hyperledger/education/blob/master/LFS171x/sawtooth-material/sawtooth-default.yaml
How are you running the transaction processor? From a separate Docker container?
Is there a docker compose file for that, or are you running it from the command line?
same container, different terminal window. yes i am running from command line.
drwxrwxrwx 1 vagrant vagrant 0 Nov 6 14:28 sawtooth-tuna
[vagrant@localhost ~/seidev/projects/sawtooth-examples/education/LFS171x/sawtooth-material (master)]$ docker-compose -f sawtooth-default.yaml up
Creating network "sawtoothmaterial_default" with the default driver
Creating sawtooth-validator-default ...
Creating sawtooth-validator-default ... done
@grkvlt both validators need to have the same transaction processors, as they both will validate the transactions.
is there any support for using vagrant to install sgx dev tools?
@msg2muthu The tuna processor is not in that compose file
docker-compose up would not start the processor with that file
I need to know how your start it to determine what the validator url should be
@agunde that's interesting, i don't think i'd realised that was the way it worked - it's not explained very explicitly in the docs how to set up multi-node blockchain infra ;(
@zac when i ran "npm start" from other terminal in ( projects/sawtooth-examples/education/LFS171x/sawtooth-material/sawtooth-tuna/processor) Mac, Tuna Processor (Family: transfer-chain) is getting registered. i see in log. It is not registered from Vagrant in Windows.
@rbuysse see @MicBowman 's question above. What is the build tooling for the poet sgx packages? Docker?
@zac i guess validator URL would be const VALIDATOR_URL = 'tcp://localhost:4004' which is in index.js
@msg2muthu Okay, I think I see now. You have the sawtooth-core components running in Docker. The tuna-processor is _not_ running in Docker, but is running in Vagrant in Windows.
Are the core-components running in Docker in Vagrant, or in Docker on your Windows machine?
@MicBowman @jsmitchell I'm not sure what the development environment looks like, I've only been working with building artifacts.
all the dependencies for building are in a common docker image right now https://github.com/hyperledger/sawtooth-core/blob/master/ci/sawtooth-build-debs
that includes the sgx stuff?
ah, i see it
```
RUN wget https://download.01.org/intel-sgx/linux-1.8/sgx_linux_ubuntu16.04.1_x64_sdk_1.8.100.37689.bin && \
chmod +x sgx_linux_ubuntu16.04.1_x64_sdk_1.8.100.37689.bin && \
echo "yes" | ./sgx_linux_ubuntu16.04.1_x64_sdk_1.8.100.37689.bin && \
. /tmp/sgxsdk/environment && \
export SGXSDKInstallPath=/tmp/sgxsdk/
```
that doesn't get installed when using vagrant and the vagrantfile in tools?
@MicBowman I don't believe so, no
so do the build tools build the enclave?
(../education/LFS171x/sawtooth-material/docker-compose ), so core components (Validators) is running in Docker in Vagrant, but npm start is running from Vagrant itself.
@zac ^
So, from within Vagrant, with the components running in Docker, what happens if you `curl localhost:8080/blocks`?
@MicBowman yes. the relevant portion of the build script starts here: https://github.com/hyperledger/sawtooth-core/blob/master/bin/build_debs#L113
@zac i am getting response for this command
}
],
"head": "18aaee7d614aaa79b365dc03b494cd346d0637d2bbbb59fda2cc4adfe72788055fcc1446342be2f2f939d582ee1fea244c8ee98e241dedf9c516066b91066c84",
"link": "http://localhost:8080/blocks?head=18aaee7d614aaa79b365dc03b494cd346d0637d2bbbb59fda2cc4adfe72788055fcc1446342be2f2f939d582ee1fea244c8ee98e241dedf9c516066b91066c84",
"paging": {
"start_index": 0,
"total_count": 1
}
well, the REST API is able to talk to your Vagrant at least
but then you `npm start` in the processor directory and the processor does not connect to your validator?
@rbuysse i'm going through the dev install docs & i'm having a bunch of errors... buildall fails immediately
(and otherwise starts properly)
@zac Exactly.
Well, I'm a bit at a loss then
@zac i see only the following in log in processor folder
[vagrant@localhost ~/seidev/projects/sawtooth-examples/education/LFS171x/sawtooth-material/sawtooth-tuna/processor (master)]$ npm start
6: Pulling from node
Digest: sha256:72dd1fefd15a3313e69871559c2198be107dd67ba81d8bf2973576e903496760
Status: Image is up to date for dt-00003646.corp.seic.com:5000/node:6
> Sawtooth-tuna-chain-processor@0.0.0 start /usr/src/app
> node index.js
Initializing JSON handler for Sawtooth Tuna Chain
When you start it on Mac you get more?
A message that it is connected?
Yes, In addition the message above, i am getting message like "Connected..", i dont have exact message now.
@MicBowman are you trying to use vagrant?
the OS thing might be a red herring, there have been a lot API updates lately, so perhaps your Docker images updated to something that won't work with tuna-chain
You could try changing all of the `latest` tags for hyperledger images in your compose file to `0.8.
i.e. `hyperledger/sawtooth-validator:latest` -> `hyperledger/sawtooth-validator:0.8`
You could try changing all of the `latest` tags for hyperledger images in your compose file to `0.8`.
i.e. `hyperledger/sawtooth-validator:latest` -> `hyperledger/sawtooth-validator:0.8`
Typically you don't get the connect messages because the validator URL is wrong though
@jsmitchell yes
And it seems very much like it is right based on what you've told me
given the errors i'm getting i think vagrant is failing with some proxy problems on the keyservers... and yes i have the vagrant proxy plugin installed and configured...
@MicBowman you will probably have a bad time with that. we've mostly moved to docker. Docs need to catch up.
:-/
what OS are you on?
anything that works
mac?
umm... i'm not dead... and i would be before i ever used a mac :-)
linux?
linux/windows
tried both
ok, should be easy from within linux
@zac Let me try and update you
linux environment is already virtualized
Thanks @zac for your help.
it's all docker containers, not vms
try installing docker compose and then doing ./bin/build_all
@rbuysse this ^ should work, right?
or @adamludvik
why is the vagrant tools directoy still there and the public docs pointing at that as the core development environment if we are not using or maintaining it?
it's a solid question
I am spinning it up
to see if it's only a proxy issue
this is the "last" error i found in the logs...
default: hkp://keyserver.ubuntu.com:80
default: --recv-keys
default: 8AA7AF1F1091A5FD
default: gpg: keyserver receive failed: Connection timed out
@MicBowman it's running through the various docker stuff in ./bin/build_all in vagrant for me
haven't run into any issues yet
(i'm not behind a proxy)
i couldn't get the vm built
oh, yeah, must be a proxy issue
@cianx ^ you've had this stuff working inside the intel network, right?
@MicBowman I was able to start up vagrant cleanly and run a full ./bin/build_all
when I tried to run ./bin/build_debs to get the sgx stuff to build, I ran out of disk space in the VM
(this is not something we do in vagrant)
@jsmitchell Not for like 6 monthes. It was to fragile and bandwidth intensive to use as a development environment.
From recent experiences, it appears that docker is just as bad. Neither Kelly or I could get docker-compose to honor proxy settings for the supply-chain docker example.
Mic has the proper proxy plugin installed and the proper environment variables set.
I regularly `build_all -x java` on ubuntu. (I skip java because that build would not work for me and it's absence did not impede me).
I think Nick regularly uses vagrant. @drozd
That is not really great message for a message for a product trying to hit release quality.
And rocket chat is awesome.
Screenshot_20171110-212508.png
Totally usable
Screenshot_20171110-213137.png
Has joined the channel.
@cianx the native OSX desktop RocketChat app works great for me...
Unfortunately that doesn't help.
On Windows I access rocket through chrome. On Android the app works fine for me.
Has joined the channel.
Has joined the channel.
Not technically a Sawtooth question but while I'm going through the edX course on Hyperledger I saw the video describing the use case of the IoT fish tracking sensors. Is anyone aware of these kind of sensors in printed label format?
Has joined the channel.
ValueError: ('Unknown connection id:
Has joined the channel.
I haven't heard of anything like that, but I don't know a ton about IoT sensors
@amundson or @rbuysse is this sawtooth-all script still being used? and if so should it remove this reference to 'sawtooth manage'?
https://github.com/hyperledger/sawtooth-core/blob/master/ci/sawtooth-all#L40
Uh, we're working on deprecating it. Lemme take a look once I get this Go stuff wrapped up.
@dan @cianx We build the java examples and SDK via the CI system regularly with no problems. The problems that you both are seeing are most likely do to proxy settings. Maven, if I recall correctly, has a different way of getting the proxy information to use when fetching the java dependencies
@Dan @cianx We build the java examples and SDK via the CI system regularly with no problems. The problems that you both are seeing are most likely do to proxy settings. Maven, if I recall correctly, has a different way of getting the proxy information to use when fetching the java dependencies
I'm not entirely sure how we can integrate these sorts of instructions into our docker process for local use: https://medium.com/@petehouston/execute-maven-behind-a-corporate-proxy-network-5e08d075f744
we'll need to lean on folks experiencing these types of proxy issues to help troubleshoot and contribute fixes/doc updates
@drozd I'm starting to look through #1101. I see it already has a couple thumbs up, but if you wouldn't mind waiting a bit to merge, I'd like to review.
@jsmitchell That does not scale. Developers need to test their builds over the vpn.
yeah, and lots of VPNs have different constraints
we've been down this path with proxy stuff many times
we can't test these configurations
I still don't understand why we are not publishing docker dev images.
I am done burying weeks of work in to untested builds.
dev images for what purpose? developing sawtooth? wouldn't you always want the latest?
Yes, I everytime there was a configuration change I would expect the docker image latest would be updated.
don't you already have that setup in your own dockerhub space?
I'd like to be able to do more w/docker-compose builds instead of build_all
yep, I did. I turned out to be a lot of over head to detect when a new image was added and figure out how to shim that under the build_all script
keeping up to date with 'git fetch upstream && git rebase upstream/master && ./bin/build_all' seems to work pretty well for me
but, if there are local proxy issues, i can understand how that would add a wrinkle
Downloading prebuilt docker images is much faster and less bandwidth than rebuilding them.
build_all is a bandwidth hog to rebuilds images that usually haven't changed. The only reason I would ever want to build them locally is if need to change one.
well, we should solve these things in context of sawtooth-supply-chain, not sawtooth-core, then take what we have learned and apply it to sawtooth-core
docker-compose down && docker-compose up --build
interested to hear solutions, wasted about 4 hours last week trying to get `docker-compose up` to work behind a proxy for supplychain.
where did it hang?
"apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8AA7AF1F1091A5FD" ?
yep, the docker build was not getting the correct proxy information.
that uses pgp port, no support at all for proxy
there is a workaround though
"apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8AA7AF1F1091A5FD"
I don't know how that interacts with the normal proxy variables. I assume about as well as apt-get.
Fwiw, I don't seem to have an issue with building java anymore.
But I've been a coward and not building behind a proxy.
I did get some questions earlier today about the 'smart contract' development model. (where smart contract basically means transaction processor).
I had to connect to a separate wifi network before docker-compose worked for supply chain
now it works fine with up and down commands
I tried setting both the docker proxy settings as well as my local proxy variables to no avail
@kelly_ that is because docker is caching
Regarding business logic development I think the flow is to install the language SDK of your choice. Develop your business logic. Test it against a dockerized version of Sawtooth. Then produce artifacts that can be installed alongside a sawtooth installation.
that's the flow I've been using
I've done both creating a docker container to run the TP and also run it native on the mac pointing to a docker environment
(recently)
Do we have guidance on where to install your TP? And does that require installing the language SDK on the target server?
docker-compose restart
oh, just noticed it is after 4pm. can only answer questions related to Rust SDK now.
:)
@Dan you mean taking a strong position on the user's development environment for the TP? I thought we were against that.
No I mean when you want to go install that TP on a production instance.
that depends on a lot of things, like what language you chose, etc.
if you are a kubernetes shop, by all means, install it there
if it's on ubuntu 16.04 AWS images, then it really depends on language
Let's say ubuntu. It looks like the built in TPs go into /usr/bin/
And lets say (for starters) language of the custom TP is python.
python - you could produce deb packages, that's what we do. users have to own their app code. they could python3 setup.py install it too, if that's how they roll. or even run it via some script in a directory checked out from their git repo.
java - I think you install the TP into a running Tomcat or Websphere instance (joking, joking)
:)
(I'm not even sure that should be a joke.)
javascript - it's node, so whatever node people do. I honestly don't think there is a credible non-docker approach to running node apps via deb package installs or the like
go - probably package into deb, though you could copy the binary to the server and setup systemd if you didn't want to deal with packaging
C++ - probably same as go; compile it and figure out deb packaging or punt on that and just copy what you need to the server
but personally, I think kubernetes is a solid option for folks that don't have packaging experience and are able to otherwise deal with docker-compose
Thanks. What about the sdk features? I'm not sure if there are runtime dependencies that are implied by the SDKs but wouldn't be satisfied by the default sawtooth install. Like this stuff out of small-bank...
"sawtooth_sdk/logging"
"sawtooth_sdk/processor"
"sawtooth_sdk/protobuf/processor_pb2"
@drozd FYI, I'm done poking at #1101. Could only find some doc nits. :)
@Dan that also depends on the language as well; if the language isn't statically compiling the SDK into the TP, then the SDK becomes a runtime dependency
thx.
Has joined the channel.
We will be spinning a 0.8.12 release soon, probably tomorrow.
if you have backports you want in that release, coordinate with @agunde
The fixes to enumerative REST endpoints etc. That's our top concern for backports, but I don't know a good list of commit SHAs to ask for. maybe Peter knows.
@amundson The fixes to enumerative REST endpoints etc. That's our top concern for backports, but I don't know a good list of commit SHAs to ask for. maybe Peter knows.
@amundson The fixes to enumerative REST endpoints. That's our top concern for backports, but I don't know a good list of commit SHAs to ask for. maybe Peter knows.
Unfortunately, those fixes involved breaking changes
We had to restructure the way we store data, which involved making use of some LMDB features so we could create traversable, lazy indexes
Thanks @pschwarz -- I will try to repro STL-849 on master
Has joined the channel.
Has joined the channel.
Just a quick question: why I'm getting this kind of error and how to get rid of it? `Invalid Transaction Tried to get unauthorized address: ['e9d9deaecd3827f0804c91fd93359ae25ea97f5960df1c0609a6befb62b29179bd71bc']`
Did you include that address in your list of inputs?
No, i didn't
thanks, @pschwarz
:thumbup:
I have a quick question: on master (as of this morning), is anyone experiencing errors when running the tests at `test_network_permissioning` ? Thanks
Has joined the channel.
^^ discard my message, I am trying something that may fix it.
@benoit.razet is the test failing consistently, we have seen some intermediate failures due to the time it takes a block to be published.
you are right! I tried to run it 2 more times: the first time, it blocked and the second time seems to process just fine
@GhadiShayban I'm not able to reproduce that error against master, though I'm also in a docker container. However, we've come across something that might be related, so I'll keep you posted.
@pschwarz Thanks for trying to repro. I will say we have a slightly custom packaging, Ubuntu 17.04 + python setup.py install. (Did you happen to try it against 0.8?)
Has joined the channel.
Has joined the channel.
Has joined the channel.
@rbuysse or whoever: Why did the packaging scripts abandon the `python setup.py install` within docker? I don't have a problem with it, I was just looking for the rationale
@benoit.razet thanks for the PR! Did you see you had some lint issues?
https://build.sawtooth.me/job/Sawtooth-Hyperledger/job/sawtooth-core/job/PR-1117/2/console
down near the bottom of the run
yeah, I just saw it. Somehow I missed them when I looked at the logs.
should I push a new commit that fix those
?
that would be great
it would be best if you can squash it into the original commits and then force push
will do
I just squashed and push. Sorry for the lint errors
no worries @benoit.razet
we are constantly covered with lint!
Has joined the channel.
Has joined the channel.
Has joined the channel.
Has joined the channel.
Has joined the channel.
hi, I noticed that Burrow EVM is integrated into Sawtooth. My question is how does Sawtooth incorporate the notion of 'gas' introduced by Ethereum? is there a default value of it, or user has to specifically set this? thx!
Has joined the channel.
You can specify any amount of gas, but the default is 90000. The price of gas is free.
Has joined the channel.
Hi, I've been trying to build a multi-validators network but i still have some questions.
Hi, I've been trying to build a multi-validators network but i still have some questions. For ease of discussion, i've come up with some drawing. Below is the logical diagram.
For ease of discussion, i've come up with some drawing. Below is the logical diagram.
logical-diagram.jpg
For genesis node, i have two compose files: one for initialization and the other one for production. Below is the initialization:
For genesis node, i have two compose files: one for initialization and the other one for production.
```
```version: "2.1"
services:
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "4004:4004"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth://root/.sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth keygen --force my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch \
\""````
For genesis node, i have two compose files: one for initialization and the other one for production.
Below is the initialization compose file:
```version: "2.1"
services:
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "4004:4004"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth://root/.sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth keygen --force my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch \
\""````
For genesis node, i have two compose files: one for initialization and the other one for production.
Below is the initialization compose file:
```version: "2.1"
services:
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "4004:4004"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth:/root/.sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth keygen --force my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch \
\""````
and below is the production one:
```xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/xo-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.160.0.3:4004:4004"
- "10.160.0.3:8800:8800"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth://root/.sawtooth
- /sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth-validator -vv \
--endpoint tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.160.0.3:8080:8080"
depends_on:
- validator
volumes:
- /sawtooth/rest-api/var/log/sawtooth:/var/log/sawtooth
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
and below is the production one:
```xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/xo-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.160.0.3:4004:4004"
- "10.160.0.3:8800:8800"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth:/root/.sawtooth
- /sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth-validator -vv \
--endpoint tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.160.0.3:8080:8080"
depends_on:
- validator
volumes:
- /sawtooth/rest-api/var/log/sawtooth:/var/log/sawtooth
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
and below is the production one:
``` xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/xo-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.160.0.3:4004:4004"
- "10.160.0.3:8800:8800"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth:/root/.sawtooth
- /sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth-validator -vv \
--endpoint tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.160.0.3:8080:8080"
depends_on:
- validator
volumes:
- /sawtooth/rest-api/var/log/sawtooth:/var/log/sawtooth
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
and below is the production one:
```version: "2.1"
services:
xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/xo-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.160.0.3:4004:4004"
- "10.160.0.3:8800:8800"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth:/root/.sawtooth
- /sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth-validator -vv \
--endpoint tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.160.0.3:8080:8080"
depends_on:
- validator
volumes:
- /sawtooth/rest-api/var/log/sawtooth:/var/log/sawtooth
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
and below is the production one:
```version: "2.1"
services:
settings-tp:
image: hyperledger/sawtooth-tp_settings:latest
container_name: sawtooth-settings-tp-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/settings-tp/var/log/sawtooth:/var/log/sawtooth
entrypoint: settings-tp -vv tcp://validator:4004
intkey-tp-python:
image: hyperledger/sawtooth-tp_intkey_python:latest
container_name: sawtooth-intkey-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/intkey-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: intkey-tp-python -vv tcp://validator:4004
xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/xo-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.160.0.3:4004:4004"
- "10.160.0.3:8800:8800"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth://root/.sawtooth
- /sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth-validator -vv \
--endpoint tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.160.0.3:8080:8080"
depends_on:
- validator
volumes:
- /sawtooth/rest-api/var/log/sawtooth:/var/log/sawtooth
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
and below is the production one:
```version: "2.1"
services:
settings-tp:
image: hyperledger/sawtooth-tp_settings:latest
container_name: sawtooth-settings-tp-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/settings-tp/var/log/sawtooth:/var/log/sawtooth
entrypoint: settings-tp -vv tcp://validator:4004
intkey-tp-python:
image: hyperledger/sawtooth-tp_intkey_python:latest
container_name: sawtooth-intkey-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/intkey-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: intkey-tp-python -vv tcp://validator:4004
xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
volumes:
- /sawtooth/xo-tp-python/var/log/sawtooth:/var/log/sawtooth
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.160.0.3:4004:4004"
- "10.160.0.3:8800:8800"
volumes:
- /sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /sawtooth/validator/root/.sawtooth:/root/.sawtooth
- /sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth-validator -vv \
--endpoint tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--scheduler parallel \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.160.0.3:8080:8080"
depends_on:
- validator
volumes:
- /sawtooth/rest-api/var/log/sawtooth:/var/log/sawtooth
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
And for other validator, i'm using the following compose file:
```version: "2.1"
services:
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.148.0.2:4004:4004"
- "10.148.0.2:8800:8800"
volumes:
- /home/andre_jenie/sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /home/andre_jenie/sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /home/andre_jenie/sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /home/andre_jenie/sawtooth/validator/root/.sawtooth://root/.sawtooth
- /home/andre_jenie/sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth-validator -vv \
--endpoint tcp://10.148.0.2:8800 \
--seeds tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.148.0.2:8080:8080"
depends_on:
- validator
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
And for other validators, i'm using the following compose file:
```version: "2.1"
services:
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.148.0.2:4004:4004"
- "10.148.0.2:8800:8800"
volumes:
- /home/andre_jenie/sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /home/andre_jenie/sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /home/andre_jenie/sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /home/andre_jenie/sawtooth/validator/root/.sawtooth://root/.sawtooth
- /home/andre_jenie/sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth-validator -vv \
--endpoint tcp://10.148.0.2:8800 \
--seeds tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.148.0.2:8080:8080"
depends_on:
- validator
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
And for other validators, i'm using the following compose file:
```version: "2.1"
services:
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "10.148.0.2:4004:4004"
- "10.148.0.2:8800:8800"
volumes:
- /home/andre_jenie/sawtooth/validator/etc/sawtooth:/etc/sawtooth
- /home/andre_jenie/sawtooth/validator/var/log/sawtooth:/var/log/sawtooth
- /home/andre_jenie/sawtooth/validator/var/lib/sawtooth:/var/lib/sawtooth
- /home/andre_jenie/sawtooth/validator/root/.sawtooth:/root/.sawtooth
- /home/andre_jenie/sawtooth/validator/home/sawtooth:/home/sawtooth
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen --force && \
sawtooth-validator -vv \
--endpoint tcp://10.148.0.2:8800 \
--seeds tcp://10.160.0.3:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
--peering dynamic \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "10.148.0.2:8080:8080"
depends_on:
- validator
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080```
From peering point of view, everything works perfectly. However, when i tried to look at the block list from `10.148.0.2` node through its REST-API server, i've got the following error:
```root@8b997265ee08:/# curl http://10.148.0.2:8080/blocks
{
"error": {
"code": 15,
"message": "The validator has no genesis block, and is not yet ready to be queried. Try your request again later.",
"title": "Validator Not Ready"
}
}```
From peering point of view, everything works perfectly. However, when i tried to look at the block list from `10.148.0.2` node through its REST-API server, i've got the following error:
```root@8b997265ee08:/# curl http://10.148.0.2:8080/blocks
{
"error": {
"code": 15,
"message": "The validator has no genesis block, and is not yet ready to be queried. Try your request again later.",
"title": "Validator Not Ready"
}
}```
I ran this from _sawtooth-client-default_ container running on the same machine.
So, I have the questions:
1. I suppose that all other validators have the same copy of block store. But so far the only block store that i have is on genesis node. Am i missing something?
2. Using `--peering dynamic` i've got some message in the debug log:
```[10:36:03.712 [ConnectionManager] gossip DEBUG] Number of peers: 2
[10:36:03.713 [ConnectionManager] gossip DEBUG] Peers are: ['tcp://10.160.0.2:8800', 'tcp://10.148.0.2:8800']
[10:36:03.713 [ConnectionManager] gossip DEBUG] Unpeered candidates are: []
[10:36:04.714 [ConnectionManager] gossip DEBUG] Below minimum peer threshold. Doing topology search.```
Where can i configure the minimum peer threshold?
3. In the beginning of Validator's log, i see:
```[10:35:49.645 [MainThread] cli WARNING] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.```
Does this have anything to do with network permnissioning using policy file (.toml)? If it does, is there any examples that can be used to impose some security standard?
Sorry for so many questions and thank you in advance.
So, I have the questions:
1. I suppose that all other validators should have the same copy of block store. But so far the only block store that i have is on genesis node. Am i missing something?
2. Using `--peering dynamic` i've got some message in the debug log:
```[10:36:03.712 [ConnectionManager] gossip DEBUG] Number of peers: 2
[10:36:03.713 [ConnectionManager] gossip DEBUG] Peers are: ['tcp://10.160.0.2:8800', 'tcp://10.148.0.2:8800']
[10:36:03.713 [ConnectionManager] gossip DEBUG] Unpeered candidates are: []
[10:36:04.714 [ConnectionManager] gossip DEBUG] Below minimum peer threshold. Doing topology search.```
Where can i configure the minimum peer threshold?
3. In the beginning of Validator's log, i see:
```[10:35:49.645 [MainThread] cli WARNING] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.```
Does this have anything to do with network permnissioning using policy file (.toml)? If it does, is there any examples that can be used to impose some security standard?
Sorry for so many questions and thank you in advance.
So, I have the questions:
1. I suppose that all other validators should have the same copy of block store. But so far the only block store that i have is on genesis node. Am i missing something?
2. Using `--peering dynamic` i've got some message in the debug log:
```[10:36:03.712 [ConnectionManager] gossip DEBUG] Number of peers: 2
[10:36:03.713 [ConnectionManager] gossip DEBUG] Peers are: ['tcp://10.160.0.2:8800', 'tcp://10.148.0.2:8800']
[10:36:03.713 [ConnectionManager] gossip DEBUG] Unpeered candidates are: []
[10:36:04.714 [ConnectionManager] gossip DEBUG] Below minimum peer threshold. Doing topology search.```
Where can i configure the minimum peer threshold?
3. In the beginning of Validator's log, i see:
```[10:35:49.645 [MainThread] cli WARNING] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.```
Does this have anything to do with network permissioning using policy file _(.toml)_? If it does, is there any examples that can be used to impose some security standard?
Sorry for so many questions and thank you in advance.
So, I have the questions:
1. I suppose that all other validators should have the same copy of block store. But so far the only block store that i have is on genesis node. Am i missing something?
2. Using `--peering dynamic` i've got some message in the debug log:
```[10:36:03.712 [ConnectionManager] gossip DEBUG] Number of peers: 2
[10:36:03.713 [ConnectionManager] gossip DEBUG] Peers are: ['tcp://10.160.0.2:8800', 'tcp://10.148.0.2:8800']
[10:36:03.713 [ConnectionManager] gossip DEBUG] Unpeered candidates are: []
[10:36:04.714 [ConnectionManager] gossip DEBUG] Below minimum peer threshold. Doing topology search.```
Where can i configure the minimum peer threshold?
3. In the beginning of Validator's log, i see:
```[10:35:49.645 [MainThread] cli WARNING] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.```
Does this have anything to do with network permissioning using policy file _(.toml)_? If it does, is there any examples that can be used to impose some standard security?
Sorry for so many questions and thank you in advance.
Has joined the channel.
Hi, I tried with the Marketplace demo earlier today. I started with "creating a participant with a new key". After clicking the Submit button, I was shown with the message "Waiting for participant to be provisioned. This will take a few minutes ..." for hours. Then I tried to click on the "Block xxx" and "Hi, My Name" on the upper right-hand corner of the web page. The provision didn't seem to be successful. I restarted the browser (Safari on MacOS 10.13.1) and open the link "https://mktplace.sawtooth.me" where I can only see the "Loading ..." message. I tried going back after rebooting but still got the "Loading ..." message. Did anyone encounter the same problem before? How can I create another participant? Thanks in advance.
[I deleted the cookie for sawtooth.me and was able to create a new participant. Nonetheless, still stuck at "Waiting for participant to be provisioned. This will take a few minutes ...". And the block being shown is *744*. ](https://chat.hyperledger.org/channel/sawtooth?msg=FuMNFMcNhbLYRDRD2)
@ajenie An important node about validators is that all validators need to have the same transaction processors so they can all valid the batches included in the block.
Currently the minimum peer threshold is hard coded in sawtooth_validator/sever/core.py. I will create a story to make sure this can be configurable.
That network key pairs is actually a reference to zMQ's i TLS [3] like certificate exchange mechanism and protocol encryption capability which is transparent to the socket implementation. Here is link to an example https://github.com/zeromq/pyzmq/blob/master/examples/security/ironhouse.py
You can generate keys using zmq.auth.create_certificates(keys_dir, "network")
And then include those keys in the validator.toml config files.
This is separate from the Network Permissioning that uses policies.
Has joined the channel.
Hi @agunde, thank you indeed for your explanation. So, if i run the same TPs in all validator nodes, then the block store will be consistent accross? I'll test it out then.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=52Bxey9ErRLizdqPg) @agunde thanks for the information. I'll take a look at that.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=TaqQrvmeumDGok3LM) @agunde It'd be wonderful if this can be configured outside the source code. By the way, what's the default number?
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=7MfsZvz7jkJY4DcHh) @agunde after i started up TPs on all my validator nodes, everything works perfectly okay now :) That's what i have missed. In the debug log i can see _chain_head_ and _block_chain_id_ now. Now i can take a look at validator's policy and protocol encryption capabilities that you mentioned. Thanks again.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=7MfsZvz7jkJY4DcHh) @agunde after i started up TPs on all my validator nodes, everything works perfectly okay now :) That's what i have missed. In the debug log i can see *chain_head* and *block_chain_id* now. Now i can take a look at validator's policy and protocol encryption capabilities that you mentioned. Thanks again.
Has joined the channel.
@jasoncys I don't have access to the Marketplace blockchain right now, but if I had to guess, I'd say it's probably gone down. I'm having the same trouble as you.
It's the weekend for us right now, so we may not be able to get it back up until tomorrow.
Hi, there is a difference between the sawtooth SDK that I get using git clone from https://github.com/hyperledger/sawtooth-core.git, and the SDK I get when downloading sawtooth on Ubuntu system with add-apt-repository "deb http://repo.sawtooth.me/ubuntu/nightly xenial universe" (or stable).
Specifically I had a problem when importing the python class StateEntry, for Ubuntu repository it is in /sawtooth_sdk/processor/context.py and for docker/vagrant (git repository) it is missing
Why is there a difference in the SDK repository and which version should be used?
@zac thanks for the update.
No problem, thanks for trying to check it out!
@yoni StateEntry is being replaced with a normal dict for version 1.0, which is fast replacing. I believe the nightly build is published very night, but still if you are pulling from master, you may have a slightly newer version.
@yoni StateEntry is being replaced with a normal dict for version 1.0, which is fast approaching. I believe the nightly build is published very night, but still if you are pulling from master, you may have a slightly newer version.
I assume that change _just_ got merged.
Hrmmm, looks like it was merged 24 days ago: https://github.com/hyperledger/sawtooth-core/pull/1024
I don't handle the deb builds much, but is it possible you are pulling an older version, or maybe 0.8 (the current stable version)?
(there is an 0.8 branch on github, if that is what you want btw: https://github.com/hyperledger/sawtooth-core/tree/0-8)
could it be that the deb build is not updated? i used: sudo apt-add-repository "deb http://repo.sawtooth.me/ubuntu/nightly xenial universe" as described in here: https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/ubuntu.html#installation
and thanks for the help :)
First i got the stable one then i updated to the nightly
np
I haven't heard anything about the debs not getting updated, but it's possible. The API is in a lot of flux right now, but will settle down once 1.0 is out. I'd recommend probably sticking with 0.8 until then.
(we have Sawtooth Supply Chain pegged to 0.8 for now for example)
Will do, waiting for 1.0... thanks @zac
:+1:
@ajenie the default peer threshold is 3 and the max is 10
Glad to here you got things working! let me know if you have any other questions!
Has joined the channel.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=S9hrNsQvMKutKhWaJ) @agunde Thanks for the information.
FYI, for those of you working off of `master`, the default REST API port has been changed from `8080` to `8008`. This should help prevent collisions in the future, but you may have to update your code.
Has joined the channel.
Has joined the channel.
We have a new repo for the private-utxo stuff thanks to LF staff. https://github.com/hyperledger/sawtooth-private-utxo <-- @cianx
thx
@cianx I'll move the utxo docs over there
and protos/
Don't strain yourself
Too late @cianx I pulled something.
I think it was a request https://github.com/hyperledger/sawtooth-private-utxo/pull/1
Hi, where is the c++ sawtooth sdk located on ubuntu? i could only find the python SDK /usr/lib/python3/dist-packages/sawtooth_sdk
Just in case, someone else stumbles on getting 'docker up' behind-the-proxy-lines: apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options http-proxy=
There's a lot you can do with --keyserver-options
There's a lot you can do with --keyserver-options! If you're running 'vagrant up' behine-proxy-lines this should work: apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options http-proxy=
*I meant 'vagrant up'
Has joined the channel.
Has joined the channel.
Hi, I am trying to setup sawtooth on Ubuntu 16.04 using the following link https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/ubuntu.html. All seems to work fine until I start the transaction processor. Running the command '*sudo -u sawtooth intkey-tp-python -v*' gives me the following error.
Traceback (most recent call last):
File "/usr/bin/intkey-tp-python", line 9, in
@benoit.razet your PR is merged. I also raised a PR to add you to COMMITTERS
I know you can't see the future, but are there any other outstanding compatibility breakages planned pre-1.0 branch?
@pschwarz ^
Thanks @jsmitchell that's awesome!
Thanks for the contribution!
@GhadiShayban All of the compatibility breakages will be in the 1.0.0rc1 that should be published today
There should not be anymore before the final 1.0 release
Has joined the channel.
Has joined the channel.
@benoit.razet you are in COMMITTERS now which means your PRs will build automatically
thanks!
Is the new sawtooth_signing Context object thread-safe?
@pschwarz ^
(in python)
Yes, I believe so
Has left the channel.
Has joined the channel.
Hi all, just read in hyperledger blog that concensus algorithm in sawtooth is pluggable. How do i do that? Thanks in advance.
Has joined the channel.
Hi, I am new to sawtooth. I am Getting-Started with it on a ubuntu box (using vagrant). I am following the documentation at https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/ubuntu.html to install it on the box. However, when i use the command "intkey create_batch", i get an "ImportError: cannot import name 'State Entry'". Can anyone help me out with this?
Hi, I am new to sawtooth. I am Getting-Started with it on a ubuntu box (using vagrant). I am following the documentation at https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/ubuntu.html to install it on the box. However, when i use the command "intkey create_batch", i get an "ImportError: cannot import name 'StateEntry'". Can anyone help me out with this?
Has joined the channel.
Has joined the channel.
hi @here - i'm not sure i understand the difference between the `sawtooth-core` and `sawtooth-seth` repositories? the Seth version seems just to be a copy? how am i meant to use it now?
also, seems incomplete? e.g. `bin/build_seth_go` is referenced, but doesn't exist...
also, why does `build_all installed` seem to create Docker images that say `LABEL "install-type" "mounted"` still - am i doing something wrong? this is on `sawtooth-core`, btw
Has joined the channel.
@grkvlt we just moved Seth to its own repo. Probably will have some rough edges for a few days.
Has joined the channel.
Has joined the channel.
@ajenie here's a gist showing changing between devmode and poet repeatedly. Note there was a bug discovered with the transaction flag --wait (to make the CLI wait for the transaction to commit). If that option has not been fixed you can just drop that flag from each command. Probably but in a few seconds of sleep in place of that. https://gist.github.com/dcmiddle/756190a1b0139faa16f9ac5150b7f2e5
Thanks indeed for the information @Dan. I'll give it a try.
Thanks indeed for the information @Dan . I'll give it a try.
@Dan no problem - if you'd like any testing done, or there's any way i can help, just message me and let me know
Has joined the channel.
Has left the channel.
Is STL-321 open? If yes, can i take it up?
@BeeKay STL-321 is actually an Epic whose component stories have already been completed
@BDAP1729 What version of sawtooth are you using?
Has joined the channel.
@BeeKay There are other stories listed under "Help Wanted" that could use attention if you wish to contribute
Hello all. I have a question about sawtooth: I am working on a project of shipping management amongst a consortium with untrusted parties using blockchain. I thought sawtooth would be a good option to study further (I am following the hyperledger course on edx). But if I want payments to be made automatically based on some conditions (e.g. a good being delivered), how would you go about that ? I could do it with ethereum, but as I am within a consortium, a permissioned blockchain like sawtooth seems more adequate. At the same I have the impression that I would need to be plugged somehow with bitcoin or ethereum if I need transfer of value and not only transfer of information. What do you think? Are there supply chain projects that use sawtooth and that also handle automatic payments? Thank you very much.
@woodyjon you could create an account concept which tracks off-chain currency transfers (denominated in real currency), and then have transactions which reconcile the real world payments with the 'owed' money on the chain
e.g. Party A owes Party B $100k on delivery of Shipment X. Accounts receivable for Party A submits a reconciliation transaction on receipt of the $100k wire transfer which results in settlement of the exchange on chain.
e.g. Party A owes Party B $100k on delivery of Shipment X. Accounts receivable for Party B submits a reconciliation transaction on receipt of the $100k wire transfer which results in settlement of the exchange on chain.
you mean an off chain reconciliation transaction?
well, the transaction would be on chain
but it would be the result of moving money off chain
ok
but the interesting thing with ethereum, for example, is that I can link transactions with automatic exchange of value
maybe possible to link the 2 blockchains then?
you can link transactions with on-chain exchange of value in ethereum because there is the perception that ether has value as a 'digital currency'
are you going to try to convince your shipping consortium to transact using a digital currency?
I am a little bit looking into the future here
I like the link between the tracking of a real world asset and the automatic payment upon delivery
you can certainly define a digital currency on sawtooth
you just need to get your consortium to agree it has value
(same with ether, same with bitcoin)
yes indeed
thank you very much for those ideas and for your answers
@jsmitchell do you know where I can find more info about making my currency on sawtooth? (doc, tuto?)
There aren't any examples specifically about currency, but you can look at the app developers guide in the documentation: https://sawtooth.hyperledger.org/docs/core/releases/0.8/app_developers_guide.html
thank you
basically it is just another asset
has anyone used Town Crier with sawtooth ?
@woodyjon Well a currency is basically just another asset. The hard part is getting people to exchange your digital currency for real world goods and services. I think that is mostly a problem that needs to be solved in the real world and not in the sofw=
@woodyjon Well a currency is basically just another asset. The hard part is getting people to exchange your digital currency for real world goods and services. I think that is mostly a problem that needs to be solved in the real world and not in the software (though the software will certainly have some requirements, which Sawtooth likely mostly satisfies out of the box).
my approach would just be to use it as a unit of account
The advantage of Eth is those real world problems are largely already solved. People are already convinced (for now at least) that it is money, and can be exchanged for things.
But with the number of ICOs, it certainly seems like there is room for innovation in the space.
or you could "peg" / "tether" it if you would like to a currency like USD
What do you mean by that @meridian?
"unit of account" that is
for book-keeping purposes
not re-demable for value, just tracks value
I get pegging, though I am not sure how you would do it. Who is willing to be on the hook to pay out $100 USD for 1 Sawtooth-Buck (or whatever)
I get pegging, though I am not sure how you would do it. Who is willing to be on the hook to pay out $100 USD for 1 Sawtooth-Buck (or whatever)?
most businesses are going to convert to fiat anyways, until the day comes the IRS accepts bitcoin for payment
there is no payout
its an internal accounting system
everything is settled in currency of choice (in this case USD)
Yes, I think that is the sort of problem we mostly see Sawtooth solving.
yea, thats been our approach to using it
There are a group of stake holders, who all operate a Sawtooth network, and agree to use whatever digital token to track whatever ineractions between them.
you have all the issues of custodial ship that come with cryptocurrency as well
But they do not have value outside of that group of stake holders.
exactly
Not that you couldn't do something broader, but it would come with it's own set of challenges. Probably worth looking into some existing cryptocurrency solutions and see how they try to make the value proposition to the general public.
I have not used Town Crier by the way.
quick question: has anyone used PoA Clique consensus
compared to paritys Aura
i know Eris uses parity doesnt it?
My idea is to have a currency on sawtooth for clearing
with a fixed exchange rate
and then settlement with bitcoin
I'm no economist, but I have trouble seeing how that would work. Who is going to be responsible for matching that exchange rate? What if the price of bitcoin skyrockets? Are they going to just swallow the costs? What if everyone tries to exchange their Sawtooth currency at once? Will whoever it is have the funds to cover it?
Also, you've only kicked the "exchange on-chain resource for off-chain resource" problem down the road. You still have to have people certify, I "gave this person Sawtooth Bucks in exchange for something not represented on the chain".
Why not just skip the in between currency and exchange whatever asset for Bitcoin/USD directly?
(This is presumably a problem Bitcoin has solved by the way, so I don't imagine it is terrible)
(This is presumably a problem Bitcoin and other cryptocurrencies have solved by the way, so I don't imagine it is terrible)
(or at least the institutions willing to take Bitcoin for USD have solved it)
@pschwarz for STL-849 I have narrowed the deadlock to
``` await asyncio.wait_for(self._futures[correlation_id], timeout=timeout)
After a websocket disconnect, we are waiting on a zmq correlation_id that never arrives.
That should have a timeout, though.
Is there no timeout value?
There is a 5 minute timeout...
I haven't been able to reproduce this issue, so I'm going to have to lean on your debugging. What happens if you turn that timeout down
I haven't been able to reproduce this issue, so I'm going to have to lean on your debugging. What happens if you turn that timeout down?
And the timeout does in fact happen. Here is some potentially useful info @pschwarz :
```
validator_1 | [2017-11-27 21:19:22.389 DEBUG interconnect] ServerThread receiving CLIENT_BLOCK_LIST_REQUEST message: 75 bytes
validator_1 | [2017-11-27 21:19:22.390 DEBUG interconnect] ServerThread sending CLIENT_BLOCK_LIST_RESPONSE to b'23ccf975d03945cb'
```
The validator does in fact send back a response to the rest API, but the rest API either never resumes its loop, or somehow never reads the message
That is strange
That log excerpt is immediately after this sequence:
1) Disconnecting a websocket
2) Then hitting a GET on the API
It seems to be related to cleanup on the websocket path.
It seems to be related to cleanup on the websocket handler path
Are you seeing any debug messages about the rest api process disconnecting from the validator?
nope
How can I confirm debug messaging is enabled?
How are you running the `sawtooth-rest-api`?
right now for debugging I'm stepping through with pdb
```PYTHONPATH=. python3 sawtooth_rest_api/rest_api.py -vv --connect tcp://validator:4004 --bind 0.0.0.0:8080```
Yeah, that has debug logging turned on: `-vv` does it
We can reproduce this with websocket-client but not with aiohttp as a websockety client
We can reproduce this with websocket-client but not with aiohttp as a websocket client
So... something is different about the teardown
More tidbits:
If I use an aiohttp-based ws client *first*, then use websocket-client subsequently, the bug never manifests.
When it does manifest itself, are you hitting a GET endpoint with a programmatic client or a browser (or both)
When it does manifest itself, are you hitting a GET endpoint with a programmatic client or a browser (or both)?
curl or requests, same
curl or python requests, same
Ok
HTTP Req -> ZMQ message -> ZMQ response -> deadlock. Future inside the `_futures` map is never resolved
I wonder if an exception is getting swallowed
Can you throw a couple of try/excepts in the message routing code? Around `sawtooth_rest_api/messaging.py` lines 74 and 79 each
yup
Exception handlers don't fire. But what does:
On the *sad path* (websocket-client lib)
we go through state_delta/_handle_unsubscribe()
On the *not sad path but probably also sad but I don't know it yet* path (aiohttp websocket client):
_handle_unsubscribe() is never invoked
Exception handlers don't fire. But what does:
On the *sad path* (websocket-client lib)
we go through state_delta/ `_handle_unsubscribe()`
On the *not sad path but probably also sad but I don't know it yet* path (aiohttp websocket client):
`_handle_unsubscribe()` is never invoked
In the case that you are going through `_handle_unsubscribe`, are you seeing the results of ` LOGGER.info('Unsubscribing for state delta events')`
yes
Does the future resolve for the unsubscribe message?
Unclear. How can I debug that clearly?
Toss a log message at the end of `_handle_unsubscribe`
looks like at the end of _handle_unsubscribe that we go into the `await self._unregister_subscriptions()` then
@pschwarz I traced through handle_unsubscribe, but it's this that never completes: `_unregister_subscriptions`
https://github.com/hyperledger/sawtooth-core/blob/f3e194029f0eb91b532edffc97b76c9fab82be10/rest_api/sawtooth_rest_api/state_delta_subscription_handler.py#L230-L233
We send the unsubscribe request to the validator, it responds, *but* the rest api never processed the Unsubscribe_Response
Hmm
Does the validator send the response?
yup
_unregister_subscriptions never returns
`_unregister_subscriptions` never returns
Has left the channel.
I also got future cancelled error after wrapping ~ L110-116
I'm still not sure why the bug is happening, but is there anyway you can put together a simple client that reproduces this? It may help me debug it
the `async for msg in ws` coroutine
Sure. Attach to JIRA or dm you?
Attach it to the JIRA
will do
Thanks
thank you for your time Peter.
Thanks for the debugging!
Added a couple basic scripts -- ping me for any clarity.
Has joined the channel.
:thumbsup:
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=HNQSm8kv9Dyg6YF8N) @zac That is what I mean. Use Bitcoin for the currency. But for knowing how much you owe, we could use our own currency on our blockchain, where the amounts owed will be triggered automatically by transactions. Then at the end of each day, for example, you know how many bitcoins you owe to that specific party.
Has joined the channel.
How necessary is it to track bitcoin balance on the Sawtooth chain?
That seems error prone to me. You have two sources of truth. The bitcoin balance sheet you are tracking on your Sawtooth asset chain, and a people's actual bitcoin balances. What's to stop a person from just refusing to pay what they owe at the end of the day?
It would seem to me to be much cleaner to do it at transaction time. So I have 20 Sawtooth Widgets, which I am tracking on the Sawtooth blockchain, and which I am willing to exchange for 1 bitcoin.
It would seem to me to be much cleaner to do it at transaction time. So say I have 20 Sawtooth Widgets, which I am tracking on the Sawtooth blockchain, and which I am willing to exchange for 1 bitcoin.
So someone says, they would like to give me 1 bitcoin for those Sawtooth Widgets. They would create two transactions, one requesting the Sawtooth Widgets on the Sawtooth blockchain, and one sending me 1 bitcoin on the Bitcoin blockchain.
So someone says, they would like to give me 1 bitcoin for those Sawtooth Widgets. They would create two transactions, one creating a request for the Sawtooth Widgets on the Sawtooth blockchain, and one sending me 1 bitcoin on the Bitcoin blockchain.
Someone says they would like to give me 1 bitcoin for those Sawtooth Widgets. They would create two transactions, one creating a request for the Sawtooth Widgets on the Sawtooth blockchain, and one sending me 1 bitcoin on the Bitcoin blockchain.
Once I see that the bitcoin transaction has gone through, I submit a transaction to the Sawtooth blockchain that accepts their request for Sawtooth Widgets.
This is analogous to exchanging cash for a good. The exchange isn't perfectly simultaneous, but they happen at around the same time. One person registers their interest in a good, and hands over cash. The other person then hands over the good.
The Sawtooth blockchain will never have a way of verifying this off-chain interaction occurred, but if you keep them in same timeframe, and rely on the proper sources of truth, at least you can minimize the window for funny business.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=2NjmbnBYMpHTMwZHn) @agunde
Hi, Thanks for your response. The version of sawtooth on my box is : sawtooth-cli (Hyperledger Sawtooth) version 0.8.12
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=PuupwgMH3TYcYCd4Q) @zac :thumbsup: Good points! I will study that option.
Thanks
Has joined the channel.
Has joined the channel.
@woodyjon @zac fyi, i am also working on a project to implement a cryptocurrency using sawtooth. what attracted me was the fact that i can use seth, and get evm solidity csmart contracts, which would make it easy to implement an erc20 spec token. i'm still at the r&d stage just now, and can't reveal too much yet, though.
i also saw this https://fullmetalhealth.com/cryptoasset-framework-intels-hyperledger-sawtooth-part-one/ which describes using sawtooth to build a cryptocurrency using similar techniques, so reading that might give you some pointers...
the question I ask myself when I see people talking about making a crypto on sawtooth is: why
what does sawtooth offer that existing blockchains dont?
why not just join an existing project? or fork and improve one? like Zcash et al
Has joined the channel.
I am not making a crypto on sawtooth. I want to use sawtooth to track assets within a consortium, and somehow I want to link exchange of goods with automatic payments.
the option I prefer at the moment, is the use of sawtooth for asset tracking and combining it with Bitcoin payments.
@woodyjon you might want to look into the conditional transfers concept for linking operations between blockchain instances
https://interledger.org/rfcs/0001-interledger-architecture/
@BDAP1729 hmm I can't seems to reproduce that error.
Has joined the channel.
As near as I can tell the main reason to implement a cryptocurrency is to have a lucrative ICO
As near as I can tell the main reason to implement a cryptocurrency is to have a lucrative ICO :wink:
Beyond that, I don't really know enough about cryptocurrencies to comment. I assume like any other space there is room to innovate though.
@grkvlt I'll be very curious to hear more as the project develops. I imagine you're using Sawtooth in some interesting ways we haven't seen before.
@zac i like the technology so far, so yes, hopefully it'll be able to do some interesting stuff
one thing i wonder if anyone @here has input on is scalability - what size of sawtooth clusters (number of validators, transaction processors, topology, hardware types, bandwidth, tps, etc...) have people tested on, and what would reasonable limits be, if any to the parameters mentioned?
Friendly reminder: please don't use `at here` for channel notifications
oh? why?
surely its better than at channel?
It notifies everyone in a noisy manner
Same thing
You can just put your message in the channel and it will be read by all interested parties
ah, is it not like slack, then - sorry!
No worries - hence the friendly part :)
(i know slack warns you with `at channel` use that you will annoy X hundred people across Y timezones, are you _sure_ you want to do that?)
FYI - we are planning to do a developer preview 1.0.0rc3 release today or tomorrow
As far as you question goes: we've been doing a lot of testing with networks of size 5 and 10
also, another 0.8.x release with some backports
A lot of it on AWS
cool. where can i keep up with the roadmap and new features? here? or is there a mailing list or something?
I've been sending release announcements to the mailing list
https://lists.hyperledger.org/pipermail/hyperledger-stl/
great, thx
re:roadmap we are very focused on stability right now ahead of the 1.0 release. there is some work going on with implementing Raft consensus. We expect a big usability push soon, refining docs and such to help with onboarding projects.
If we can get STL-849 solved prior to 1.0, it would be amazing. The rationale for us: we are trying to get our off-chain polling replaced with the statedelta push. Our team is happy to set aside some time if it would help to see our system for debugging... We sunk about 8 person-hours into it this week, but such is life.
@GhadiShayban are you connecting to the WS via your own app server?
Or in the browser?
Just thinking that it may be more reliable to connect over the ZMQ connection, though a bit of work on your part to get it working - plus you'd be able to get more types of events
Just thinking that it may be more reliable to connect over the ZMQ connection, though a bit of work on your part to get it working - but you'd be able to get more types of events
Will take a look at the bug using your scripts
python WS client direct to REST API
I'm still not able to reproduce it, even using your `socktest.py` script... :/
@pschwarz For some reason the bug is more easily reproducible in our configuration of dokchain+sawtooth, we always trigger it. Nevertheless, I am able to reproduce the bug just with Sawtooth with the latest master, but the bug is not triggered as easily, I have to iterate many times the following: open the ws, send several intkey transactions, close the websocket, open the websocket again, etc.
in this case, I have to change the script to _listen_ to the prefix of intkey: '1cf126'
That's the missing step to reproduce - send a single intkey transaction, and then I can reproduce it
:)
Here's something interesting about it - if I leave it (I went to grab a coffee) and come back the timeout must have occurred, and everything works again
on my side, if I wait the timeout, then I can send intkey transactions, they are processed by the validator, but the command the send the intkey is hanging (until the timeout)
on my side, if I wait the timeout, then I can send intkey transactions, they are processed by the validator, but the command that sent the intkey is hanging (until the timeout)
validator responses appear sent but not processed.
I haven't been able to reproduce the FutureCancelledError that I saw either, but I'll just notice it for reference as the responses are managed by a map of {id => Future}
I think I might have a fix
Going to put together a PR
awesome!
I've tested your PR @pschwarz and it clears up the bug. :whisky:
We greatly appreciate your effort.
also tested on bare sawtooth and could not reproduce the bug :thumbsup:
Great!
nice work guys!
:thumbsup:
The fix is merged into master
Has joined the channel.
Has joined the channel.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=c28qyYaE2txQNBEY6) @jsmitchell Thanks!
Yes I had a presentation from interledger. Very interesting.
I read about *Track and Trade* transaction family specification in the documentation. Anybody knows where i can pull the codes from? Thank you in advance.
Has left the channel.
Has joined the channel.
I am tryight to Configure Sawtooth to Use SGX
@ajenie https://github.com/hyperledger/sawtooth-supply-chain
anyone help me?
check this please https://pastebin.com/uuk5tc3V
@hunter32 looks like a cut & paste error
```
sawtooth@dsg2:/tmp$ sawtooth config proposal create -k /etc/sawtooth/keys/validator.priv \
>
usage: sawtooth config proposal create [-h] [-k KEY] [-o OUTPUT | --url URL]
setting [setting ...]
sawtooth config proposal create: error: the following arguments are required: setting
sawtooth@dsg2:/tmp$ sawtooth.consensus.algorithm=poet \
```
code forterminail
Here is where i took it: https://sawtooth.hyperledger.org/docs/core/releases/latest/sysadmin_guide/configure_sgx.html#configure-the-validator-to-use-sgx-poet
@jsmitchell the first comands had errors but i ficed them and now i get this: https://pastebin.com/Aav2iRuQ
@jsmitchell the first comands had errors but i fixed them and now i get this: https://pastebin.com/Aav2iRuQ
@jsmitchell the first comands had errors but i fixed them and now i get this: https://pastebin.com/Aav2iRuQ check here for more info about my problem https://jira.hyperledger.org/browse/STL-904
@Dan :point_up:
Has left the channel.
@hunter32 I think it's the CRT that you may need to use rather than the .key.
Also did you get an acknowledgement from intel that the certificate was accepted?
@hunter32 sorry, I forgot what was in the example commands. You need the private key and the self-signed certificate in the same file. You can actually just cat them together, but there's also an open-ssl command that will do that.
I'm not somewhere where I can look that command up but will try to post it later
Has joined the channel.
Ok, here you go... Those instructions how to make a self-signed certificate. They also show you how to create a PFX file. That's a password protected file with the private key and the self-signed cert. You can extract the two together into a pem file like this: `openssl pkcs12 -in new-credential.pfx -out your-very-special.pem -nodes`. Alternatively I'm pretty sure you can just cat the key file on the crt file and call it a pem, but the openssl command seems more official.
Ok, here you go... Those instructions how to make a self-signed certificate. They also show you how to create a PFX file. That's a password protected file with the private key and the self-signed cert. You can extract the two together into a pem file like this: `openssl pkcs12 -in new-credential.pfx -out your-very-special.pem -nodes`. Alternatively I'm pretty sure you can just cat the key file on the crt file and call it a pem, but the former seems more official.
I'll be curious to hear if you get it working or you encounter a problem @hunter32
Hi, I am just evaluating different projects to find the right platform for my application. I saw this article on web and wanted to know if anybody knows about this POET weakness in sawtooth which is based on Intel SGX if I am not wrong, thanks.
http://www.securityweek.com/researchers-use-intel-sgx-conceal-malware-extract-private-keys
Has joined the channel.
couldn't connect to docker saemon at http+docker:?/locallunixsocket
can someone help me to find out why i can;t run or hyperledher sawtooth.. i keep receiving errors
hi, I am having trouble running the hyperledger .. can someone help here
i keep receiving error on loading hyperledger sawtooth .. can anybody help
Has joined the channel.
@Dan i tried your openssl command and now i get that https://pastebin.com/MVKBLZmY
here is the content of my .pem file https://pastebin.com/bHB6i63r
in this command
openssl pkcs12 -in client.pfx -out sgx-certificate.pem -nodes` client.pfx is the file generated from here https://software.intel.com/en-us/articles/how-to-create-self-signed-certificates-for-use-with-intel-sgx-remote-attestation-using
@Dan i tried your openssl command and now i get that https://pastebin.com/MVKBLZmY
here is the content of my .pem file https://pastebin.com/bHB6i63r
in this command
openssl pkcs12 -in client.pfx -out sgx-certificate.pem -nodes`
the client.pfx is the file generated from here https://software.intel.com/en-us/articles/how-to-create-self-signed-certificates-for-use-with-intel-sgx-remote-attestation-using
@Dan i tried your openssl command and now i get that https://pastebin.com/MVKBLZmY
here is the content of my .pem file https://pastebin.com/bHB6i63r
in this command
openssl pkcs12 -in client.pfx -out sgx-certificate.pem -nodes`
the client.pfx is the file generated from here https://software.intel.com/en-us/articles/how-to-create-self-signed-certificates-for-use-with-intel-sgx-remote-attestation-using
Same result with cutting client.key and pasting in client.crt and then rename in.pem file here is what i created that way: https://pastebin.com/skcVGihx
@Dan i tried your openssl command and now i get that https://pastebin.com/MVKBLZmY
here is the content of my .pem file https://pastebin.com/bHB6i63r
in this command
openssl pkcs12 -in client.pfx -out sgx-certificate.pem -nodes`
the client.pfx is the file generated from here https://software.intel.com/en-us/articles/how-to-create-self-signed-certificates-for-use-with-intel-sgx-remote-attestation-using
Same result with cutting client.key and pasting in client.crt and then rename in.pem file
@hunter32 that's a little progress :) That's the error that I get when I use an unauthorized certificate. So I think you now have the formatting right but the credential itself is not recognized by IAS. Did you get some acknowledgement from them that the credential was accepted?
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oYsNJhHZRp3vaSzDv) @Dan Thank god.
I hoped in that answer.... i got an SPID with an old client.crt but then i updated it and i have applied. So i wait INTEL to update it! Thanks a lot. i will come back soon :P
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oYsNJhHZRp3vaSzDv) @Dan Thank god i hoped to get that aswer.... i got an SPID with an old client.crt but then i update it and i have applied. so i wait INTEL to update! Thanks a lot. i will come back soon :P
Cool. I hope they get back to you soon.
@Fofa What errors?
Has joined the channel.
@ajenie https://github.com/hyperledger/sawtooth-core/pull/1194 this PR will enable configuring the peer thresholds.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Qrm8WdufjcL8sPXHQ) @jsmitchell thanks for the information.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=9swYCHTMSsiu7CFTJ) @agunde nice :thumbsup: thanks.
Hi Guys,
I am new to sawtooth and have been trying to play with it. I am facing an issue while processing a block. I'm not sure what lead to this situation but these are the steps that I followed:
1. Install sawtooth on ubuntu 16.04. Followed this documentation and was able to get the network running with a standalone validator and was able to perform intkey transactions
2. Shut down the network. i.e. shut down validator, rest-api, settings-tp, intkey-tp
3. Started the network after a couple of days and the validator logs show the following:
[2017-12-01 13:16:09.067 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1525 bytes
[2017-12-01 13:16:09.070 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'5e6a6cc1817d4300'
[2017-12-01 13:16:09.173 DEBUG publisher] Loaded batch injectors: []
[2017-12-01 13:16:09.175 DEBUG executor] failing transaction bd38c1edebd35b1a435b1ff5d34d39f1e057afc6bf9564b921513c725856244226568938de5d1e30598af06adcb5880856f69d7f43d523e7cc1b7623c859c1b3 of type (name=sawtooth_settings,version=1.0,encoding=application/protobuf) since it isn't required in the configuration
[2017-12-01 13:16:09.175 DEBUG publisher] Batch aa04d5c06f3314c566230446d4f26f740cb4ccff1884a0c418227dfc6e95db0e4219bb9058bfccc10cac5ae3d8f87f8700eca82edbf7ccfa786955aa576f5668 invalid, not added to block.
[2017-12-01 13:16:09.176 DEBUG publisher] Abandoning block (2, S:, P:14387f06): no batches added
I tried addng the settings-tp family again to the config, it registers but can't seem to process the block in the above log
[2017-12-01 13:15:12.597 INFO processor_handlers] registered transaction processor: connection_id=ca4f655c7e88f2743f437bc9bdb1d87d45da150ef589c9f0d74692c291e28fcf65cd8a067146c6fe2901644a9fa6eeca84255316b90c109766ab023b777074f5, family=sawtooth_settings, version=1.0, encoding=application/protobuf, namespaces=['000000'] *
This leads me to another issue, where another transaction family that I have created is not getting registered (Not sure if these two are linked). Below is the command I'm using to register transaction families.
* sawtooth config proposal create sawtooth.validator.transaction_families='[{"family": "coin-transaction", "version": "1.0", "encoding": "application/json"}, {"family":"sawtooth_settings", "version":"1.0", "encoding":"application/protobuf"}]' *
NOTE: there are no errors. Neither in the rest-api nor the validator logs. I think I'll be able to solve this by starting the whole network from scratch i.e. new genesis block and new setup, but would like to understand why this issue crops up and how should I solve this in case it comes up again.
Hi Guys,
I am new to sawtooth and have been trying to play with it. I am facing an issue while processing a block. I'm not sure what lead to this situation but these are the steps that I followed:
1. Install sawtooth on ubuntu 16.04. Followed this documentation and was able to get the network running with a standalone validator and was able to perform intkey transactions
2. Shut down the network. i.e. shut down validator, rest-api, settings-tp, intkey-tp
3. Started the network after a couple of days and the validator logs show the following:
*
[2017-12-01 13:16:09.067 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1525 bytes
[2017-12-01 13:16:09.070 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'5e6a6cc1817d4300'
[2017-12-01 13:16:09.173 DEBUG publisher] Loaded batch injectors: []
[2017-12-01 13:16:09.175 DEBUG executor] failing transaction bd38c1edebd35b1a435b1ff5d34d39f1e057afc6bf9564b921513c725856244226568938de5d1e30598af06adcb5880856f69d7f43d523e7cc1b7623c859c1b3 of type (name=sawtooth_settings,version=1.0,encoding=application/protobuf) since it isn't required in the configuration
[2017-12-01 13:16:09.175 DEBUG publisher] Batch aa04d5c06f3314c566230446d4f26f740cb4ccff1884a0c418227dfc6e95db0e4219bb9058bfccc10cac5ae3d8f87f8700eca82edbf7ccfa786955aa576f5668 invalid, not added to block.
[2017-12-01 13:16:09.176 DEBUG publisher] Abandoning block (2, S:, P:14387f06): no batches added
*
I tried addng the settings-tp family again to the config, it registers but can't seem to process the block in the above log
*[2017-12-01 13:15:12.597 INFO processor_handlers] registered transaction processor: connection_id=ca4f655c7e88f2743f437bc9bdb1d87d45da150ef589c9f0d74692c291e28fcf65cd8a067146c6fe2901644a9fa6eeca84255316b90c109766ab023b777074f5, family=sawtooth_settings, version=1.0, encoding=application/protobuf, namespaces=['000000'] *
This leads me to another issue, where another transaction family that I have created is not getting registered (Not sure if these two are linked). Below is the command I'm using to register transaction families.
* sawtooth config proposal create sawtooth.validator.transaction_families='[{"family": "coin-transaction", "version": "1.0", "encoding": "application/json"}, {"family":"sawtooth_settings", "version":"1.0", "encoding":"application/protobuf"}]' *
NOTE: there are no errors. Neither in the rest-api nor the validator logs. I think I'll be able to solve this by starting the whole network from scratch i.e. new genesis block and new setup, but would like to understand why this issue crops up and how should I solve this in case it comes up again.
Hi Guys,
I am new to sawtooth and have been trying to play with it. I am facing an issue while processing a block. I'm not sure what lead to this situation but these are the steps that I followed:
1. Install sawtooth on ubuntu 16.04. Followed this documentation and was able to get the network running with a standalone validator and was able to perform intkey transactions
2. Shut down the network. i.e. shut down validator, rest-api, settings-tp, intkey-tp
3. Started the network after a couple of days and the validator logs show the following:
*[2017-12-01 13:16:09.067 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1525 bytes
[2017-12-01 13:16:09.070 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'5e6a6cc1817d4300'
[2017-12-01 13:16:09.173 DEBUG publisher] Loaded batch injectors: []
[2017-12-01 13:16:09.175 DEBUG executor] failing transaction bd38c1edebd35b1a435b1ff5d34d39f1e057afc6bf9564b921513c725856244226568938de5d1e30598af06adcb5880856f69d7f43d523e7cc1b7623c859c1b3 of type (name=sawtooth_settings,version=1.0,encoding=application/protobuf) since it isn't required in the configuration
[2017-12-01 13:16:09.175 DEBUG publisher] Batch aa04d5c06f3314c566230446d4f26f740cb4ccff1884a0c418227dfc6e95db0e4219bb9058bfccc10cac5ae3d8f87f8700eca82edbf7ccfa786955aa576f5668 invalid, not added to block.
[2017-12-01 13:16:09.176 DEBUG publisher] Abandoning block (2, S:, P:14387f06): no batches added*
I tried addng the settings-tp family again to the config, it registers but can't seem to process the block in the above log
*[2017-12-01 13:15:12.597 INFO processor_handlers] registered transaction processor: connection_id=ca4f655c7e88f2743f437bc9bdb1d87d45da150ef589c9f0d74692c291e28fcf65cd8a067146c6fe2901644a9fa6eeca84255316b90c109766ab023b777074f5, family=sawtooth_settings, version=1.0, encoding=application/protobuf, namespaces=['000000'] *
This leads me to another issue, where another transaction family that I have created is not getting registered (Not sure if these two are linked). Below is the command I'm using to register transaction families.
* sawtooth config proposal create sawtooth.validator.transaction_families='[{"family": "coin-transaction", "version": "1.0", "encoding": "application/json"}, {"family":"sawtooth_settings", "version":"1.0", "encoding":"application/protobuf"}]' *
NOTE: there are no errors. Neither in the rest-api nor the validator logs. I think I'll be able to solve this by starting the whole network from scratch i.e. new genesis block and new setup, but would like to understand why this issue crops up and how should I solve this in case it comes up again.
Hi Guys,
I am new to sawtooth and have been trying to play with it. I am facing an issue while processing a block. I'm not sure what lead to this situation but these are the steps that I followed:
1. Install sawtooth version 0.8.12 on ubuntu 16.04. Followed this documentation and was able to get the network running with a standalone validator and was able to perform intkey transactions
2. Shut down the network. i.e. shut down validator, rest-api, settings-tp, intkey-tp
3. Started the network after a couple of days and the validator logs show the following:
*[2017-12-01 13:16:09.067 DEBUG interconnect] ServerThread receiving CLIENT_BATCH_SUBMIT_REQUEST message: 1525 bytes
[2017-12-01 13:16:09.070 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'5e6a6cc1817d4300'
[2017-12-01 13:16:09.173 DEBUG publisher] Loaded batch injectors: []
[2017-12-01 13:16:09.175 DEBUG executor] failing transaction bd38c1edebd35b1a435b1ff5d34d39f1e057afc6bf9564b921513c725856244226568938de5d1e30598af06adcb5880856f69d7f43d523e7cc1b7623c859c1b3 of type (name=sawtooth_settings,version=1.0,encoding=application/protobuf) since it isn't required in the configuration
[2017-12-01 13:16:09.175 DEBUG publisher] Batch aa04d5c06f3314c566230446d4f26f740cb4ccff1884a0c418227dfc6e95db0e4219bb9058bfccc10cac5ae3d8f87f8700eca82edbf7ccfa786955aa576f5668 invalid, not added to block.
[2017-12-01 13:16:09.176 DEBUG publisher] Abandoning block (2, S:, P:14387f06): no batches added*
I tried addng the settings-tp family again to the config, it registers but can't seem to process the block in the above log
*[2017-12-01 13:15:12.597 INFO processor_handlers] registered transaction processor: connection_id=ca4f655c7e88f2743f437bc9bdb1d87d45da150ef589c9f0d74692c291e28fcf65cd8a067146c6fe2901644a9fa6eeca84255316b90c109766ab023b777074f5, family=sawtooth_settings, version=1.0, encoding=application/protobuf, namespaces=['000000'] *
This leads me to another issue, where another transaction family that I have created is not getting registered (Not sure if these two are linked). Below is the command I'm using to register transaction families.
* sawtooth config proposal create sawtooth.validator.transaction_families='[{"family": "coin-transaction", "version": "1.0", "encoding": "application/json"}, {"family":"sawtooth_settings", "version":"1.0", "encoding":"application/protobuf"}]' *
NOTE: there are no errors. Neither in the rest-api nor the validator logs. I think I'll be able to solve this by starting the whole network from scratch i.e. new genesis block and new setup, but would like to understand why this issue crops up and how should I solve this in case it comes up again.
I was facing the same issue with docker installation since the data directory was the same. Also I noticed that the validator logs said I was not authorized to change the config settings, since I was executing the commands from sawtooth-client-shell. Cleaned the data directory and restarted docker, and now submitted the sawtooth config proposal from validator shell. Now everything works fine. I'm still keen to know if anyone has faced the issue I reported earlier in the chat above
Hi, Can anyone help me with decoding the payload in a intkey family transaction? I am trying to use nodejs. When i use cbor.decodeFirst(payload, ....), the callback is not returning any value.
Has joined the channel.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=CKMqoNDqtXyJmuDyH) @zac couldn't connect to docker daemon at http+docker:?/locallunixsocket
i cannot connet the docker
and the rest-api
error : curl(6) could not resolve host
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=NPPQBjCD3wv8uhvMm) @Fofa can you show us your docker compose file?
Hello everyone. I'm new to hyperledger and I particularly consider sawtooth very attractive. I'm documenting myself and I was wondering whether there is some doc where I can get some comparison between transaction processors and solidity contracts. Which would be more convenient in which cases, etc
@ddcprg I don't think a doc like that exists, but maybe you can be the first to write one :) . Here is the documentation on creating transaction families: https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc3/app_developers_guide.html. One difference with Transaction Families is that you can write them in almost any language you want.
Thanks for the prompt reply @Dan I guess I have homework to do :)
Has joined the channel.
Has joined the channel.
Has joined the channel.
Has joined the channel.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oSNqRtk9R9ye3PjnF) @ajenie
version: "2.1"
services:
settings-tp:
image: hyperledger/sawtooth-tp_settings:latest
container_name: sawtooth-settings-tp-default
expose:
- 4004
depends_on:
- validator
entrypoint: settings-tp -vv tcp://validator:4004
intkey-tp-python:
image: hyperledger/sawtooth-tp_intkey_python:latest
container_name: sawtooth-intkey-tp-python-default
expose:
- 4004
depends_on:
- validator
entrypoint: intkey-tp-python -vv tcp://validator:4004
xo-tp-python:
image: hyperledger/sawtooth-tp_xo_python:latest
container_name: sawtooth-xo-tp-python-default
expose:
- 4004
depends_on:
- validator
entrypoint: xo-tp-python -vv tcp://validator:4004
validator:
image: hyperledger/sawtooth-validator:latest
container_name: sawtooth-validator-default
expose:
- 4004
ports:
- "4004:4004"
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawtooth admin keygen && \
sawtooth keygen my_key && \
sawtooth config genesis -k /root/.sawtooth/keys/my_key.priv && \
sawtooth admin genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800 \
\""
rest-api:
image: hyperledger/sawtooth-rest_api:latest
container_name: sawtooth-rest-api-default
expose:
- 4004
- 8080
ports:
- "8080:8080"
depends_on:
- validator
entrypoint: sawtooth-rest-api --connect tcp://validator:4004 --bind rest-api:8080
client:
image: hyperledger/sawtooth-all:latest
container_name: sawtooth-client-default
expose:
- 8080
- 4004
depends_on:
- rest-api
entrypoint: "bash -c \"\
sawtooth keygen && \
tail -f /dev/null \
\""
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oSNqRtk9R9ye3PjnF) @ajenie
error for validator cannot start service validator : driver failed programming external connectivity
i keep receiving this error : sawtooth_validator.exception.localconfigurationError: can't bind to tcp://127.0.0.1:4004: address already in use...
Do you already have a validator instance running? Do a `docker ps`
@fofa Someone else might be using the port 4004 already. Please post output of: `netstat -tulpn | grep LISTEN`
Hi! I am new to sawtooth. I just started off with Application developer's guide (https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc3/app_developers_guide/docker.html) .
1)Installed docker on Mac
2) Saved the docker-compose.yaml file
3) Ran this command in terminal : % docker-compose -f sawtooth-default.yaml up
Message received:-bash: fg: %: no such job
I am missing something? Am I to install anything else?
Has joined the channel.
figured it... worked on removing "%"
Has joined the channel.
Hi, I am trying to get two sawtooth validator instances to talk to each other so they end up with the same blockchain state. I set up two AWS instances using the sawtooth image from the amazon market place, and then edited /etc/default/sawtooth-validator to pass the `--seeds` argument so that it discovers the validator on the other instance. I see the two instances talking to each other in the validator logs, but no blockchain state seems to be shared. Is there any guide to getting two validator instances to talk to each other?
@alexspeller have you submitted a transaction to one?
@kelly_ yes, submitted to one successfully
it shows up in the rest api connected to that validator
@alexspeller do both validators have an instance of the transaction processor you are using?
yes, both validators have a transaction processor successfully attached
I can sucessfully submit transactions to each validator and they show up in their respective REST apis, they are just not shared between validators
@agunde maybe two different genesis blocks?
Has joined the channel.
@kelly_ that sounds possible - do I need to copy the genisis block from one instance to the other?
Possibly, only one validator should be running the genesis command. You do not need to copy the genesis block as the genesis node should send the genesis block over after they have peered.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Wx2n9turo4452Avdr) @askmish
the port is used by 2422/python 3
Has joined the channel.
@rjones can you double check the DCO configuration on https://github.com/hyperledger/sawtooth-hyper-directory/? I may have broken it. :-o
Has joined the channel.
@agunde that makes sense. It seems like the AWS image automatically runs the genisis command - should I try deleting the stuff that the command creates to start from scratch on the second node?
@alexspeller You can do sudo `systemctl disable sawtooth-setup.service` to disable the service that runs the genesis commands. then clean out `/var/lib/sawtooth` and you should be good to go.
@alexspeller You can do 1sudo systemctl disable sawtooth-setup.service` to disable the service that runs the genesis commands. then clean out `/var/lib/sawtooth` and you should be good to go.
@alexspeller You can do `sudo systemctl disable sawtooth-setup.service` to disable the service that runs the genesis commands. then clean out `/var/lib/sawtooth` and you should be good to go.
@rbuysse awesome, thanks!
Has joined the channel.
Has joined the channel.
@Fofa Only one process on your machine can use any given port at a time. You either need to kill that python process (old validator?), or if it's something you want to keep running, change the port the validator uses.
Just had discussion with #indy crew. Hypothesizing how to deploy indy use cases on other ledgers. I think the most unique requirement is that querying the DLT will respond with an aggregated signature of all the validators which have validated the transaction for that state root hash. I'm not sure how we would do something like that with Sawtooth.
In Indy those signatures are collected alongside the rBFT protocol rounds.
We could maybe maintain a separate ledger where validators would send in attestations to a certain state root. Seems like maybe other ways.
with raft it seems reasonable to have the consensus messages be authenticated
and then the leader could use the batch injector to put those into a block
and a smart contract could enforce that all teh signatures are in place before accepting the block
@Dan I re-enabled DCO enforcement. How did you disable it?
I turned off the check on master for forced pushes in order to get the first commit in. That automatically disabled DCO and I couldn't see how to re-enable it. Sorry about that and thanks for fixing.
no worries.
@Fofa You could also change the port no. 4004 to another one say 4005, in the docker compose file
Has joined the channel.
Has joined the channel.
Hi guys, I ran into problem running XO transaction processor
I already run npm install. Then nodejs index.js, then I got this error
```
Error: Cannot find module './protobuf_bundle.json'
```
Has left the channel.
@tristanperalta Gotta generate the protobufs. XO JS references the JS SDK locally. So if you `cd sdk/javascript/`, and then `npm install`, and `npm run compile_protobuf`, you should be good.
How can we create our own transaction family? Thanks in advance.
Should probably start here: https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html
20171206_160714.jpg
nice stickers!
it looks freezing
Just a little chilly. The second level of the bus was warm.
Has joined the channel.
hi
cam anyone help me out from this erroe
error
error.PNG
@maddyhopper are you behind a proxy? maybe docker proxy issues?
is there any workaround!
Has joined the channel.
https://docs.docker.com/engine/admin/systemd/#runtime-directory-and-storage-driver
^ information on configuring proxy there
actually if you are failing to even get the docker images it's probably a proxy issue on your machine, not with the docker daemon
hi
I'm kind of new to the sawtooth and had this confusion. the solidity contracts can be deployed to the sawtooth's system!? I mean u can consider the whole sawtooth as an EVM? and the second question is, if u can do such thing, what does gas price mean in this situation? there is no ether behind this smart contract! I'd appreciate any explanations, THANK Y'ALL :)
hey @nima7r
Sawtooth has a transaction processing engine
hey @kelly_
which means you can hook up various transaction interpreters
the EVM is one of those, it will interperet solidity/evm byte code
there is no ether in the EVM we use
the evm we use is the burrow evm, you can set a 'max gas' amount for operations
but there isnt a real cost
oh! i see. the gas price here is used only to determine the priority of transactions handling, right?!
and to avoid the halting problem
yeah and that!
I don't think there is a gas price notion
I think gas price is fixed say at 1wei/gas for example
what should i do with my erroe problem
*error
@maddyhopper hey! have u tried using a proxy!? seems like u cant connect to server!
yes
i think so
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"
what does it mean for example.com
proxy.example.com:80 does not seem to be a real proxy server!
ok then
i m writing the same
try this
export HTTP_PROXY="http://111.111.111.111:11"
and use your real proxy server
instead of http://111.111.111.111:11"
Has joined the channel.
Might need an https proxy setting too.
Has joined the channel.
Has joined the channel.
I quite like the recent improvements to the signing APIs across the SDKs. Could I interpret them as a set of moves that might lead away from secp256k1 and possibly towards a pluggable scheme? Our infosec officer has no issues with the particular curve, but has told us that it makes adoption harder with more finicky enterprises, who have a list (FIPS/NIST.)
Has joined the channel.
Hi everyone ! I have a little problem to parse a response from the validator with the event handlers.
I have this sample to encode my message :
regRequest := &events_pb2.EventSubscription{
EventType: "sawtooth/block-commit",
}
subscriptions := []*events_pb2.EventSubscription{regRequest}
regClientRequest := &client_event_pb2.ClientEventsSubscribeRequest{
Subscriptions: subscriptions,
}
regRequestData, err := proto.Marshal(regClientRequest)
if err != nil {
return err
}
corrId, err := self.validator.SendNewMsg(
validator_pb2.Message_CLIENT_EVENTS_SUBSCRIBE_REQUEST,
regRequestData,
)
if err != nil {
return err
}
Then, the validator answer me with a 501 (CLIENT_EVENTS_SUBSCRIBE_RESPONSE) message type but with an empty content (status : 0 / message : "") and I'm not added to the subscribers list..
Any ideas ? Thanks
@GhadiShayban I don't know of any immediate plans, but the point of changing the signing API was to allow for switching the signing algorithm in the future if needed, yes.
Thanks @zac
Has joined the channel.
Has joined the channel.
Hi guys, where do I find the source code of sawtooth marketplace transaction family?
I tried running `./bin/sawtooth-validator` from source code, and getting this error
```
ImportError: No module named 'sawtooth_validator.protobuf'
```
how to I fix this?
Has joined the channel.
Has joined the channel.
@tristanperalta The sawtooth marketplace is located here: https://github.com/hyperledger/sawtooth-marketplace
@tristanperalta Where are you running the ./bin/sawtooth-validator
seems like protobuf files have not been generated yet. How did you build your code.
thanks you @askmish, how to I build the code, I just cloned it, then run `./bin/sawtooth-validator`
validator works on ubuntu installed sawtooth via apt, however I want to test the code, and to know how to setup from ground up.
@tristanperalta There is a protogen script which generates protobufs: `bin/protogen`. Might be better to run `bin/build_all`. That will build anything you might need, though it will take a long time to run (~30 minutes), and is sometimes a little unreliable.
Also, it depends on which marketplace you are talking about. If you are talking about the web app that ran on `0.6` and was put up as a demo, you can find it on`hyperledger/sawtooth-core` under the `0-6` branch. It is worth noting this demo is not compatible with modern Sawtooth, and has not been ported. The `hyperledger/sawtooth-marketplace` repo is a new marketplace built from the ground up against the current Sawtooth. It will share some similarities with the old demo, but is not a direct port.
@GhadiShayban yes, that was part of the motivation of reworking the signing API. Some of us are interested in adding ed25519 but there are no immediate plans. Also longer term interest in adding quantum resistant algorithms, but that is a little too paranoid for today. :)
Sawtooth 1.0 API.pdf
SETH (Sawtooth Ethereum).pdf
The above are my slides from the Lisbon Hackfest this past week for reference
is validator<->validator gossip encrypted at all? I seem to remember it was curveZMQ, but that's not true from grepping (quickly) through the codebase
@GhadiShayban If the curveZMQ key par is set as network_public_key and network_private_key are set in the validator.toml file it will be encrypted, otherwise it is not. https://sawtooth.hyperledger.org/docs/core/nightly/master/sysadmin_guide/configuring_sawtooth/validator_configuration_file.html
@GhadiShayban If the curveZMQ key pair is set as network_public_key and network_private_key are set in the validator.toml file it will be encrypted, otherwise it is not. https://sawtooth.hyperledger.org/docs/core/nightly/master/sysadmin_guide/configuring_sawtooth/validator_configuration_file.html
Thanks @agunde, i missed it!
Has joined the channel.
Has joined the channel.
Has joined the channel.
I have a couple of questions: 1) Is there a way to restrict nodes from adding their own transaction processors (TP) and validators (TV) to the network? 2) What happens if a percentage of the network nodes are running TP+TV and the rest of the network are not? Would this cause forks on the chain? 3) How can I restrict configuration proposals so only few selected nodes can submit these?
thank you
Yes @ddcprg you can restrict allowed TPs and allowed Validators. Both of these are stored in the blockchain. Allowed transaction processors are set with the Settings transaction family and stored in global state and likewise permissioning is set with the Identity transaction family which controls changes to access controls listed in global state.
thanks @Dan are there any examples that I can look at?
If a node violates any of the policies or otherwise tries to run with a different configuration than the other validators have agreed to it will effectively fork, and no other validators will accept anything it says.
this is great!
Please take a look at the Settings and Identity transaction families here: https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc4/transaction_family_specifications.html (for the latest release candidate version. if you are working with stable 0.8 please switch to that version of docs)
For _unofficial_ :) example of how to change global settings across the blockchain you can see this script for changing consensus https://gist.github.com/dcmiddle/756190a1b0139faa16f9ac5150b7f2e5
I've gone though the docs a couple of times but I still have not figured it out, I need to write some example to understand how all the pieces fit together
cool, I'll take a look
Has joined the channel.
The gist I linked uses the command line tools. There's way to do those same transactions programmatically in the various languages we support. Let us know if you worked it out or not. We want to make sure Sawtooth is easy to develop for.
Has joined the channel.
Hello. could you write a directory name where consensus files is situated ? i'd like to read them and understand)
Hello, I have a weird behavior with my TP Handler written with the go SDK. When my Apply function returns an InvalidTransactionError, everything is fine, but when it returns an InternalError, I got an infinite loop where the validator sends back a TP_PROCESS_REQUEST infinitly.
@slavidmi
@slavikdmi Are you looking for the source code of PoET consensus implementation?
@Johnjam Could you provide logs and a minimal, complete, verifiable sample of your implementation.
Hello i have problems running Sawtooth with the SGX Implementation of PoET. Please check thel log here: https://pastebin.com/zTsEHiLy
@Dan Hello, today Intel updated my cert file and now i have problems running Sawtooth with the SGX Implementation of PoET. Please check thel log here: https://pastebin.com/zTsEHiLy
@Johnjam that is expected behavior. InternalError is intended to be a transient error encountered by the transaction processsor. It should never result in a transaction being declared invalid.
Thank you @jsmitchell , I was just asking that because, for example, in smallbank handler, it returns a InternalError if the payload is incorrectly unpacked (Unmarshal failed in unpackPayload function)
Yeah that kinda sounds like it small bank should call that an invalid transaction.
@hunter32 congratulations! I have not seen that error before. :D
From the IAS API it looks like it may be a credential issue. We use "Linkable" EPID signatures with PoET. That means the device will always present a consistent identity within this service. By default I think IAS registers for unlinkable signatures (participating devices will always present a pseudo-random identity). Can you check which type you requested?
@Johnjam indeed, that is a bug in smallbank if that's what it's doing
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=6mkutxpywDDc5iTxj) @Dan Ow... i didn't know that you use Linkable. and i submitted for unlinkable. Ok 1 week delay again waiting for a result from intel!. Can in send the same cert file for linkable or i must create a new one?
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=qjpT5akJLuzAum9uK) @Dan Ow... i didn't know that you use Linkable. and i submitted for unlinkable. Ok 1 week delay again waiting for a result from intel!. Can i send the same cert file for linkable or i must create a new one?i
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=qjpT5akJLuzAum9uK) @Dan Ow... i didn't know that you use Linkable. and i submitted for unlinkable. Ok 1 week delay again waiting for a result from intel!. Can in send the same cert file for linkable or i must create a new one?
@hunter32 I think they can just update your authorization without a new key, but I don't really know their internal process.
current `sawtooth-seth` code refers to old `sawtooth-cpre` go SDK and won't build - see https://github.com/hyperledger/sawtooth-seth/blob/master/families/seth/src/sawtooth_seth/common/evm_address.go#L25
oh, i see this is sort of fixed in a commit last week; nm
@ddcprg I don't know if you got your question fully answered about on-chain configuration of validators in the network. Check out these docs: https://sawtooth.hyperledger.org/docs/core/releases/latest/sysadmin_guide/permissioning.html#validator-key-permissioning. Also this integration test is a little hard to read, but is a test example of denying a validator from various validator permissions: https://github.com/hyperledger/sawtooth-core/blob/v1.0.0rc4/integration/sawtooth_integration/tests/test_network_permissioning.py.
Thanks @boydjohnson the code example will be worth reading
Has joined the channel.
Has joined the channel.
Hi everybody, I'm pretty much sure this question has been posed tons on times, but where do I find the doc for rebuilding `sawtooth-core` project?
Hi @formax Are you asking about working with a development environment using the sawtooth-core repo. If so, `./bin/build_all -l
Hi there, is there any stats about transaction performance/throughput on sawtooth core? How many transactions per second it can handle and is there any identified areas of improvement?
Has joined the channel.
Hi @here I am using Mac and I try to run this https://github.com/hyperledger/sawtooth-supply-chain
But after run this line `docker-compose up` I have found this problem
*E: Failed to fetch http://repo.sawtooth.me/ubuntu/0.8/stable/pool/universe/l/lmdb/python3-lmdb_0.92-1_amd64.deb Hash Sum mismatch
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?*
Anything I missed?
Hi @here I am using Mac and I trying to run this https://github.com/hyperledger/sawtooth-supply-chain
But after run this line `docker-compose up` I have found this problem
*E: Failed to fetch http://repo.sawtooth.me/ubuntu/0.8/stable/pool/universe/l/lmdb/python3-lmdb_0.92-1_amd64.deb Hash Sum mismatch
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?*
Anything I missed?
@ddcprg you can use the tools in `sawtooth-core/perf` to run e.g. `smallbank-workload` which creates and submits batches of transactions; i use grafana to monitor the performance when running these tests
@formax btw, if you want to use the docker images standalone then you may find it better to build your own, as the ones generated by `build_all installed` are pretty big (multi GiB) - the `build_all mounted` images need you to mount the `sawtooth-core` repo with the built binaries on each container...
@formax btw, if you want to use the docker images standalone then you may find it better to build your own, as the ones generated by `build_all installed` are pretty big (multi GiB) and the `build_all mounted` images need you to mount the `sawtooth-core` repo with the built binaries on each container...
Has joined the channel.
Hi guys. i am trying to install sawtooth on docker. however when i run the $ docker-compose -f sawtooth-default.yaml up, i get an error message saying error, version in ./sawtooth-default.yaml is unsupported. you might be seeing this error because you are using the wrong compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the services key or omit the version key and place your service definitions at the root of the file to use version 1.
@askmish i have installed docker on ubuntu (virtual machine). Followed the advice on Docker website https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/. I have also run $ docker --version && docker --version (Versions are confirmed). Also i receive a response from Docker when i run $ docker run hello-world. I followed your advice and changed the version to 2 but when i am able to run the file.
@FaysalAhmed Can you try running `docker-compose down` and then `docker-compose up` again? It might have just been some internet weirdness. it just ran fine for me.
Has joined the channel.
Hi guys, i am trying to run build_debs & build_ext_debs packages and i am getting errors (ubuntu) . Its not executing python3 setup.py --command-packages=stdeb.command bdest_deb . Any suggestions please.
cheers @grkvlt
@skbehera85 what do you mean by its not executing?
@HashmatJafferi101 How did you install docker? Meanwhile, edit the yaml file and change the version to 2
Thanks @HashmatJafferi101 for you reply.
I was trying to build the docker file (sawtooth-int-smallbank-tp-go) and getting the following error - COPY failed: no source files were specified -->COPY sawtooth-smallbank-tp-go*.deb /debs/ . Then i tried to run build_ext_debs package and was expecting the deb files to get generated. and in that too its not executing python3 setup.py --command-packages=stdeb.command bdest_deb
out of curiousity, why are you building the debs instead of using them from the repos?
build_ext_debs builds the debian files which are dependencies - external - and not sawtooth debs. it is run infrequently
Jenkinsfile is a good reference for the overall order of operations
Hi, I am trying to unpack a transaction and decode data. The documentation (here : https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_TP_tutorial_js.html#data) says that i need to use TransactionHeader.decode(transaction.header)
Can someone please tell me how to define the TransactionHeader here?
@amundson
I can only find this file in the repo --> https://github.com/hyperledger/sawtooth-core/blob/master/families/smallbank/smallbank_go/packaging/systemd/etc/default/sawtooth-smallbank-tp-go .
Please correct me if i am wrong. If you are referring to some thing else then please attach the url.
@amundson how do i Install the .debs so that the copy execution will pass -- COPY sawtooth-smallbank-tp-go*.deb /debs/
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, December 14th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, December 14th
Time: 10-11am CDT
Agenda:
1. Introductions-Mark Ford
2. 1.0 API Stabilizations-Adam Ludvik
3. Open Forum
We are using the HL Sawtooth Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/655382678
Or iPhone one-tap (US Toll): +14086380968,655382678# or +16465588656,655382678#
Or Telephone:
Dial: +1 408 638 0968 (US Toll) or
+1 646 558 8656 (US Toll)
+1 855 880 1246 (US Toll Free)
+1 877 369 0926 (US Toll Free)
Meeting ID: 655 382 678
International numbers available: https://zoom.us/zoomconference?m=-mBV2DUxwFn03UZk5NgZntMmGRj8zSdi
@skbehera85 if your goal is to get a smallbank tp in a docker image, that work is in-progress and we can start publishing one up to dockerhub to make it easier to consume. being worked on here - https://github.com/hyperledger/sawtooth-core/pull/1226
Has left the channel.
Has joined the channel.
Has joined the channel.
Hi, I want to use sawtooth hyper ledger java SDK but I don't see it is registered to maven repository yet. I tried to use by generating from git project but facing lot of issues. Is there any help available on this.
Hi @shanb What OS are you building it on?
macOS
The `./bin/build_java_sdk` script in sawtooth-core should use maven to build protobuf files and package and install locally a jar. What errors are you getting?
I am getting java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at TransactionHeader.newBuilder()
.setInputs(0, address)
same for .setOutputs(0, address)
@BDAP1729 Essentially, you need to Parse you response body (JSON.Parse) , create a buffer from the base64 data string and feed that buffer to the cbor.decode function. That will get you the object which you saved to the block chain.
I think @BDAP1729 was asking about a TransactionHeader, which would be encoded as Protobuf, not CBOR.
CBOR might be used for some Transaction payloads, but that is Transaction Family specific.
@BDAP1729 Looks like the documentation you are referencing is for writing a Transaction Processor in JavaScript. The process of using a TransactionHeader changed somewhat between `0.8` and `1.0`. That documentation references `0.8` and would require you to import the TransactionHeader class. Something like this should do it:
```
const { TransactionHeader } = require('sawtooth-sdk/protobuf')
```
However, if you are using `1.0` (which is not yet officially released), that header should already be decoded, so you could call `header.signerPublicKey` without any extra steps.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jGi9fqdz8LBNbMRN7) @boydjohnson Thanks for your answer, I'm gonna try right now.
@zac yes.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=h6s24aFvHt9KChHiN) @grkvlt thanks, really useful info!
@BDAP1729 You may still need to use TransactionHeader.encode function. But, if you are using the API library, there is no need to call TransactionHeader decode - if I understood correctly.
Depends on the version, but yes in the newest 1.0 release candidate, you do not need it.
Depends on the version, but yes in the newest 1.0 release candidate, yes the SDK takes care of it for you.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=PMmtgMnLMn6bu5hvN) @boydjohnson I build jar with ./bin/build_java_sdk but have dependencies on com.google.protobuf and org.bitcoinj
@boydjohnson The approach I am taking to add data in blockchain, is creating payload using java sdk and making call to sawtooth rest api. Can you tell me if that seems correct.
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=3aKACmbidsMkomEEu) @rbuysse Thanks for response. The problem arises because of some of the configuration mismatch. Now the issue is solved.
Has joined the channel.
Hey team - just trying to get clarification on a couple items. Besides the ether needed to execute a transaction, is there any storage cost associated when a transaction is confirmed on Hyperledger?
Additionally, does anyone have metrics on the volume/speed/latency the blockchain can handle?
Thanks @podfrogs and @zac .
I have run into another problem.
I have created a transaction using the intkey-family on my chain. I would like to decode the payload in the transaction and look at what data is stored in the transaction. Can you tell me how I can decode this?
While submitting the batches, this was encoded using the TransactionEncoder using the encoder from sawtooth-sdk. I also have the private-key that was used to encode this.
I also want to find out the value that is stored in the state. I looked up for the value at http://localhost:18008/state/
BDAP1729 (Thu, 14 Dec 2017 09:35:30 GMT):
Thanks @podfrogs and @zac .
I have run into another problem.
I have created a transaction using the intkey-family on my chain. I would like to decode the payload in the transaction and look at what data is stored in the transaction. Can you tell me how I can decode this?
While submitting the batches, this was encoded using the TransactionEncoder using the encoder from sawtooth-sdk. I also have the private-key that was used to encode this.
I also want to find out the value that is stored in the state. I looked up for the value at http://localhost:18008/state/
skbehera85 (Thu, 14 Dec 2017 09:58:49 GMT):
@amundson Thanks for your reply. Do you have an Idea when the docker image and/or git push will be available? Cheers
iswariyar (Thu, 14 Dec 2017 11:06:30 GMT):
Has joined the channel.
boydjohnson (Thu, 14 Dec 2017 15:34:20 GMT):
@shanb Unfortunately the Java SDK doesn't have client support. I would suggest using another language to send the transaction.
zac (Thu, 14 Dec 2017 16:13:28 GMT):
@BDAP1729 The encoding of both the payload and state data are entirely dependent on the Transaction Family. For this reason, there is no standard way to decode them. You have to know the conventions used by the Transaction Family, and typically you are defining your own family, so you are also defining your own encoding. I am re-emphasizing this point, because I think it is very important. There is no universal "right" answer for decoding.
zac (Thu, 14 Dec 2017 16:13:54 GMT):
Speaking specifically to IntKey, I would read the family specification here: https://sawtooth.hyperledger.org/docs/core/releases/latest/transaction_family_specifications/integerkey_transaction_family.html
zac (Thu, 14 Dec 2017 16:16:09 GMT):
According to the documentation, both the payloads and state data are CBOR encoded dicts. So I would start there.
amundson (Thu, 14 Dec 2017 16:17:09 GMT):
@skbehera85 that's probably a better question for @rbuysse , but my guess is today or tomorrow
lovesh (Thu, 14 Dec 2017 16:50:43 GMT):
Has joined the channel.
GKumar (Thu, 14 Dec 2017 17:26:34 GMT):
Has joined the channel.
GKumar (Thu, 14 Dec 2017 17:27:25 GMT):
Right now it seems all blocks are replicated to all the peer. So data in the block is redundant too much. Is it possible to specify minimum or maximum number of peer need to replicate or give consensus (like which are the region/country it need to replicate).
amundson (Thu, 14 Dec 2017 18:01:47 GMT):
@GKumar all validator nodes execute all transactions and verify the resulting state hash to verify state agreement across nodes. there are some optimizations potentially happening to reduce the duplication of batches sent along with the block (nodes commonly already have most batches).
amundson (Thu, 14 Dec 2017 18:02:40 GMT):
if the desire is different state on different nodes, then multiple sawtooth networks could be used
GKumar (Thu, 14 Dec 2017 18:06:17 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=QRk3zdwQLPu87u2tq) @amundson My doubt was mainly on volume of storage requirement if we replicate data across all the peers. What i mean is a block with 1KB data replicated to million peers then, am i not miss using available storage hardware. Initially i thought BlockChain helps enterprise to reduce the information duplication and better transference. Ultimately gonna reduce cost of operation. But now it seems eventually i will be eating up all storage resource. Or my understanding is something wrong?!!!!
amundson (Thu, 14 Dec 2017 18:08:57 GMT):
@GKumar generally speaking, blockchain distributes both CPU and storage requirements to all nodes and is thus extremely inefficient compared to traditional databases
amundson (Thu, 14 Dec 2017 18:10:30 GMT):
by "distributes" I mean duplicates
GKumar (Thu, 14 Dec 2017 18:11:23 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=XB92ehEwz2Fee5LLK) @amundson , Yes you are right, Thank you.
alberto_souza (Thu, 14 Dec 2017 19:12:45 GMT):
Has joined the channel.
shanb (Thu, 14 Dec 2017 19:17:32 GMT):
@boydjohnson Thanks for replying back. I am kind of confused with "no client support for java sdk". Do you mean I cannot use use java sdk to make remote hyper ledger calls. I am thinking of preparing payload using java sdk and making remote call using sawtooth restful APIs to add transactions to blockchain.
alberto_souza (Thu, 14 Dec 2017 19:37:14 GMT):
Hi @shanb, what @boydjohnson tried to say is that there is nothing ready to go in the java sdk. In order to make the call, you will need to create the TransactionEncoder, Headers and everything manually.
shanb (Thu, 14 Dec 2017 19:39:17 GMT):
@alberto_souza Hi, I created payload using Java SDK but currently facing 400 error for /batches API call.
shanb (Thu, 14 Dec 2017 19:41:13 GMT):
The batch list payload looks like this.
shanb (Thu, 14 Dec 2017 19:41:46 GMT):
batches {
header: "\n*JFCVURKDJ5FFQR2NGJCECUK2KVEU2NCUINGVEV2JJU\022\200\001a0db41668f2b69e5bce96c33daa7dff6d06345ca40824598e8403f84ccbaaae31c6b28e56f2bcc089e9999cc781cfc7c41088849d49ea7318fbc0798868cab94"
header_signature: "91f4e8b6d086cf27606debed18e6173911714d0bc41122dea57e32ea425946076ddd8dc3a878dbcaa73a50a3c204b07c23ceac17de5e67873b79969337c60eca"
transactions {
header: "\nB03df6582edfb87e978f1724a136ab5ade588971dc859b0735df452dbe5ae0f1273\032\vgdpr-ledger\"\0031.0*F12f15e7f5d945ce5fe7f3b861b77222bdb23df2e6bfde00c81e08e3893988258b0985b:F12f15e7f5d945ce5fe7f3b861b77222bdb23df2e6bfde00c81e08e3893988258b0985bJ\200\00178f1ac401809cec4ef28f0905a49d4b7fffacd961c3637232e5050c60997a08220fcbb7d73a6996625371ec01f6dbfeeaad1121495ba97b6c764a89bb86864fbRB03df6582edfb87e978f1724a136ab5ade588971dc859b0735df452dbe5ae0f1273"
header_signature: "a0db41668f2b69e5bce96c33daa7dff6d06345ca40824598e8403f84ccbaaae31c6b28e56f2bcc089e9999cc781cfc7c41088849d49ea7318fbc0798868cab94"
payload: "x\20078f1ac401809cec4ef28f0905a49d4b7fffacd961c3637232e5050c60997a08220fcbb7d73a6996625371ec01f6dbfeeaad1121495ba97b6c764a89bb86864fb"
}
}
alberto_souza (Thu, 14 Dec 2017 19:42:36 GMT):
ouch, I need to improve my skills to have a opinion about this payload :(. usually 400 is about invalid data... maybe your call is missing something.
alberto_souza (Thu, 14 Dec 2017 19:42:52 GMT):
I am trying to use the java sdk to register my processor... I already have a client using the javascript sdk.. my problem is that my java processor is never notified... The only thing that I perceived is that the java processor does not register any encode type. When I run the javascript processor, the encode was registered.
shanb (Thu, 14 Dec 2017 19:46:52 GMT):
yeah.. sorry for posting whole payload, just trying to know from others if missing anything.
amundson (Thu, 14 Dec 2017 20:32:26 GMT):
@shanb do you mean, that you are submitting JSON as above, or that the above is a JSON version of what is in the BatchList protobuf?
shanb (Thu, 14 Dec 2017 20:33:42 GMT):
@amundson I am sending BatchList protobuf content type -application/octet-stream
amundson (Thu, 14 Dec 2017 20:36:16 GMT):
there may be an logging statement in the validator log that might help. a likely cause is either missing fields, invalid signature (header_signature not matching the header data and public_key within the header), etc.
amundson (Thu, 14 Dec 2017 20:40:06 GMT):
I'm not familiar with the signing code in the Java SDK. I see it doesn't have any tests, so we might want to make sure it's doing the right thing if it's not something else obvious.
amundson (Thu, 14 Dec 2017 20:40:59 GMT):
(it does have tests ... been a while since I looked at a Maven project)
amundson (Thu, 14 Dec 2017 20:42:51 GMT):
Still, it doesn't do the same tests as we have with, say, the Rust SDK - https://github.com/hyperledger/sawtooth-core/blob/master/sdk/rust/src/signing/secp256k1.rs
amundson (Thu, 14 Dec 2017 20:44:15 GMT):
we should have something like that, where we test that KEY1_PRIV_HEX + MSG1 == MSG1_KEY1_SIG
RafalB 1 (Thu, 14 Dec 2017 20:52:02 GMT):
Has joined the channel.
amundson (Thu, 14 Dec 2017 21:50:34 GMT):
If anyone is looking for a small enhancement to make to sawtooh, fix this to give more specific reasons: "Exception creating context: Address or namespace xxxx listed in inputs is not valid". for example, "wrong length", "invalid character", ... etc. comes out of the executor.
amundson (Thu, 14 Dec 2017 21:51:38 GMT):
(that's a log message)
formax (Thu, 14 Dec 2017 23:32:53 GMT):
Hi all, has anybody found this problem installing the debian version?
```Installing new version of config file /etc/default/sawtooth-validator ...
chmod: cannot access '/etc/sawtooth/*.toml*': No such file or directory```
formax (Thu, 14 Dec 2017 23:35:06 GMT):
`/etc/sawtooth` indeed doesn't have any `toml` file
amundson (Fri, 15 Dec 2017 01:58:28 GMT):
@formax there were some new filesystem permissioning commits that went in relatively recently, that's likely the cause. anything we need to know to reproduce this?
rberg2 (Fri, 15 Dec 2017 02:43:24 GMT):
Has joined the channel.
rberg2 (Fri, 15 Dec 2017 02:49:56 GMT):
@formax Hello, I am able to replicate this on upgrade where the files don't exist already. As a work around you can run "sudo touch /etc/sawtooth/doh.toml.example; sudo apt-get -f install; sudo rm /etc/sawtooth/doh.toml.example" I will fix the package ASAP, and thanks for reporting this!
amundson (Fri, 15 Dec 2017 03:38:12 GMT):
1.0.0rc5 release notes - https://lists.hyperledger.org/pipermail/hyperledger-stl/2017-December/000136.html
BeeKay (Fri, 15 Dec 2017 05:27:44 GMT):
@zac : can I look at the Event Broadcaster issue you created? (#945)
skbehera85 (Fri, 15 Dec 2017 10:16:28 GMT):
@amundson Image is available now ... Thanks :)
MichaelVandycke (Fri, 15 Dec 2017 12:34:48 GMT):
Has joined the channel.
MichaelVandycke (Fri, 15 Dec 2017 12:35:10 GMT):
Hey anyone familiar with iptables?
MichaelVandycke (Fri, 15 Dec 2017 12:36:02 GMT):
Once my iptables is running i can't get curl working correctly on my host :(
skbehera85 (Fri, 15 Dec 2017 12:52:06 GMT):
@amundson Hi, I am able to build the image. But from the client container (sawtooth-shell-default), i am not able to execute "smallbank-workload playlist create --accounts 1000 -n 100000 -o smallbank.playlist" . It says "smallbank-workload: command not found". Am I missing something ?
Is there any explanation on how to use smallbank?
jeanmick (Fri, 15 Dec 2017 13:42:41 GMT):
Has joined the channel.
zac (Fri, 15 Dec 2017 16:02:59 GMT):
@shanb Typically the REST API sends back a JSON body with an `error` property that has more information than just the 400. Anything useful in there?
zac (Fri, 15 Dec 2017 16:03:40 GMT):
@BeeKay Go for it!
shanb (Fri, 15 Dec 2017 16:49:37 GMT):
@zac only detail message in response is detail message is 400 Bad Request
shanb (Fri, 15 Dec 2017 16:49:37 GMT):
@zac only detail message in response is 400 Bad Request
zac (Fri, 15 Dec 2017 16:52:19 GMT):
There was no JSON body sent in the response from the Sawtooth REST API?
zac (Fri, 15 Dec 2017 16:52:24 GMT):
That is highly unusual
zac (Fri, 15 Dec 2017 16:53:12 GMT):
How could I reproduce that behavior?
amundson (Fri, 15 Dec 2017 17:14:48 GMT):
@skbehera85 only the transaction processor has been packaged in docker thus far. you can run the CLI from the host pointing at the validator running in docker. or you could add a local docker image with rust installed to run it from within a container. you could probably even install rust within sawtooth-shell and then cd to the mounted directory (/project/sawtooth-core/) and run it from there (./bin/smallbank-workload).
pschwarz (Fri, 15 Dec 2017 18:22:05 GMT):
@sharb could you provide some of the code you're using to produce the transaction?
pschwarz (Fri, 15 Dec 2017 18:22:05 GMT):
@shanb could you provide some of the code you're using to produce the transaction?
kelly_ (Fri, 15 Dec 2017 18:22:15 GMT):
@shanb ^^^
shanb (Fri, 15 Dec 2017 18:32:13 GMT):
@pschwarz I am trying some more things so ll send it over if it works.
formax (Fri, 15 Dec 2017 19:41:55 GMT):
@amundson @rberg2 thank you guys for the quick answer! I'm going to try the quick fix right now.
formax (Fri, 15 Dec 2017 20:26:00 GMT):
@rberg2 please LMK when if you want me to test the new package when ready
formax (Fri, 15 Dec 2017 23:50:33 GMT):
I don't know who's the documentation owner, so I post this as a generic message:
I think the *Running Sawtooth as a Service* page (https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc5/sysadmin_guide/systemd.html) is missing the service restart command `sudo systemctl enable sawtooth-COMPONENT`.
Without it the services won't restart at next reboot.
formax (Fri, 15 Dec 2017 23:54:48 GMT):
I cannot find any documentation about:
```sawtooth-validator[1346]: [2017-12-15 23:39:07.226 WARNING cli] Network key pair is not configured, Network communications between validators will not be authenticated or encrypted.```
Where do I have to configure the keys?
amundson (Sat, 16 Dec 2017 02:27:05 GMT):
validator.toml
BrianHerman (Sat, 16 Dec 2017 04:41:18 GMT):
Has joined the channel.
BrianHerman (Sat, 16 Dec 2017 04:48:08 GMT):
is the sawtooth-sdk pip package published by you guys
BrianHerman (Sat, 16 Dec 2017 04:48:35 GMT):
i didn't check maybe thats why i am having issues
BrianHerman (Sat, 16 Dec 2017 04:48:36 GMT):
https://pypi.python.org/pypi/sawtooth-sdk/1.0.0rc5
gen_el (Sat, 16 Dec 2017 09:59:08 GMT):
In sawtooth, can private channels exist within the network. How does one ensure privacy of data between some organizations on the network?
abakhiet (Sat, 16 Dec 2017 13:55:11 GMT):
Has joined the channel.
abakhiet (Sat, 16 Dec 2017 13:57:14 GMT):
Hello all, please accept my simple question as I’m trying to be in spot with Sawtooth, but I think I’m missing a point of how to get benefits of this business as a small business company ?
pschwarz (Sat, 16 Dec 2017 21:54:39 GMT):
@BrianHerman the pip package is published by the sawtooth team
pschwarz (Sat, 16 Dec 2017 21:54:50 GMT):
What are the issues are you having?
b9lab-damien (Sat, 16 Dec 2017 22:46:32 GMT):
Has joined the channel.
Dan (Sun, 17 Dec 2017 00:12:48 GMT):
@formax if you want put up a pull request to update that sys admin doc that would be welcome. Also you can always submit bugs and feature requests on https://jira.hyperledger.org/projects/STL/summary.
Dan (Sun, 17 Dec 2017 00:14:22 GMT):
Those are both good ways to contribute to our growing community. And of course we're always happy to just learn of the issues on this chat.
formax (Sun, 17 Dec 2017 00:22:56 GMT):
@Dan thanks for the info, it's a little bit late here but I'll do tomorrow. And I'm really happy to contribute to this project!
Aires.Marques (Sun, 17 Dec 2017 18:21:58 GMT):
Has joined the channel.
ReedCao (Mon, 18 Dec 2017 06:27:36 GMT):
the downloading of the box will fail every time in about 25%.
ReedCao (Mon, 18 Dec 2017 06:28:15 GMT):
I am trying to download it directly.
ReedCao (Mon, 18 Dec 2017 06:35:17 GMT):
OK. it can resume, this time, it is 40 percent.
sayan-chatterjee (Mon, 18 Dec 2017 07:08:17 GMT):
Has joined the channel.
anton_petrashkevich (Mon, 18 Dec 2017 11:54:20 GMT):
`from sawtooth_signing.secp256k1_signer import generate_privkey`
results in
```
Traceback (most recent call last):
File "", line 1, in
IvanTzompov (Mon, 18 Dec 2017 14:25:23 GMT):
Has joined the channel.
kelly_ (Mon, 18 Dec 2017 16:55:18 GMT):
@dan ^
kelly_ (Mon, 18 Dec 2017 16:55:29 GMT):
@Dan
jmugambi (Mon, 18 Dec 2017 20:35:38 GMT):
Has joined the channel.
pschwarz (Mon, 18 Dec 2017 20:41:05 GMT):
If you're looking at the master branch, there was a refactor in the way that private keys are generated: https://sawtooth.hyperledger.org/docs/core/nightly/master/_autogen/sdk_submit_tutorial_python.html#creating-a-private-key-and-signer
pschwarz (Mon, 18 Dec 2017 20:41:16 GMT):
@anton_petrashkevich :point_up:
pschwarz (Mon, 18 Dec 2017 20:42:07 GMT):
That latest docs is based on the current 0.8.x release
pschwarz (Mon, 18 Dec 2017 20:42:24 GMT):
How did you install the python library
pschwarz (Mon, 18 Dec 2017 20:42:24 GMT):
How did you install the python library?
BrianHerman (Tue, 19 Dec 2017 03:29:28 GMT):
@pschwartz the pip package is missing the protobuf library python source code files
BrianHerman (Tue, 19 Dec 2017 03:30:02 GMT):
@pschwarz like batch_pb2.py
hanumankumar (Tue, 19 Dec 2017 06:14:36 GMT):
Has joined the channel.
hanumankumar (Tue, 19 Dec 2017 06:15:37 GMT):
hi how to create hyperledger sawtooth lake instance in aws?
anton_petrashkevich (Tue, 19 Dec 2017 12:26:23 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=quLYSzc3Zcm4DDobJ) @pschwarz I installed nightly build. Thanks for your help
Dan (Tue, 19 Dec 2017 14:01:19 GMT):
https://aws.amazon.com/marketplace/pp/B075TKQCC2
muasif80 (Tue, 19 Dec 2017 14:43:19 GMT):
Has joined the channel.
muasif80 (Tue, 19 Dec 2017 14:43:36 GMT):
Is sawtooth alternative of ethereum
muasif80 (Tue, 19 Dec 2017 14:43:50 GMT):
what is difference between sawtooth and fabric
Vincent_Bonnet (Tue, 19 Dec 2017 14:57:14 GMT):
Has joined the channel.
Dan (Tue, 19 Dec 2017 15:08:36 GMT):
@muasif80 sawtooth includes and EVM so you can run your solidity contracts. Sawtooth provides a variety of other features though especially enterprise features including permissioning and [un]pluggable consensus (change consensus on the fly).
Dan (Tue, 19 Dec 2017 15:09:49 GMT):
Sawtooth is also very different than fabric. Sawtooth has strict state replication that ensures cryptographically identical databases at each node. Sawtooth has many other differences too including support for writing business logic (smart contracts) in a variety of languages.
Vincent_Bonnet (Tue, 19 Dec 2017 15:31:37 GMT):
Hi everybody, Trying and deploying
pschwarz (Tue, 19 Dec 2017 15:37:06 GMT):
@BrianHerman thanks, I'll let the right folks know about that issue
Vincent_Bonnet (Tue, 19 Dec 2017 15:42:14 GMT):
Hi everybody, Trying and deploying Sawtooth RC5…
but on several nodes ( through iptables, firewalls, and interfaces) : my understanding is that one node is dealing with Genesis block generation while other node, via peering, could connect and get this Genesis without to have to generate it locally on each node…. Is it correct ?
If so, then, what about configuration on peering ? 8800 port seems the one used for it, but “seeds” introduce a 8801 port not bound on interfaces (netstat ) …. in the validator.toml sample… ( sample not very complete as for me)
can anybody just illustrate 8800/8801 discovery and topology ?
Dan (Tue, 19 Dec 2017 19:45:39 GMT):
Imagine the network as a group of homogenous nodes. One of them will have created a genesis block but otherwise it's not special. You can launch a validator on each host and specify whichever port you like. Then for other nodes to reach that one they need to know the connection string which will be the IP and port.
Each node needs to know of at least one peer. In starting a network its probably convenient all nodes know the peer with the genesis block (this is just to get started though, there's nothing special about that node).
aadedeji (Tue, 19 Dec 2017 19:53:53 GMT):
Hi, every now and then when I submit (post) a batch to the rest api server, an error gets raised ("TypeError: getresponse() got an unexpected keyword argument 'buffering'). Does anyone know why this happens? Does this mean that rest api server is backed up and overloaded with requests? Thanks.
aadedeji (Tue, 19 Dec 2017 19:54:12 GMT):
Screen Shot 2017-12-19 at 11.34.05 AM.png
PabloBascunana (Wed, 20 Dec 2017 08:49:06 GMT):
Has joined the channel.
anton_petrashkevich (Wed, 20 Dec 2017 10:19:03 GMT):
may I somehow access previous transaction (having it's id) from within Handler's apply method?
Vincent_Bonnet (Wed, 20 Dec 2017 10:23:01 GMT):
Thx Alan, seems my peering so is not working properly, while all my requested port are up/telnetable.... but peers in log staying empty [] with ""Validator Not Ready"" msg by Validator on the no-genesis nodes , while network_public_key/private_key is consistent. That was my indirect question on port... with Seeds and Peers.
paltamadura (Wed, 20 Dec 2017 10:46:23 GMT):
Has joined the channel.
sagarvilas (Wed, 20 Dec 2017 11:37:18 GMT):
Has joined the channel.
sagarvilas (Wed, 20 Dec 2017 11:37:51 GMT):
Hi not sure if this is the correct place to report errors in sawtooth documentation https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/ubuntu.html#verifying-that-the-rest-api-is-running "Run the following command in the terminal window in which you started the REST API" i do not think it is possible to run any command in a terminal in which rest-api is running
hanumankumarn (Wed, 20 Dec 2017 13:14:26 GMT):
Has joined the channel.
hanumankumarn (Wed, 20 Dec 2017 13:15:48 GMT):
How to set up marketplace example and run in java sdk ?
tkuhrt (Wed, 20 Dec 2017 16:44:41 GMT):
@sagarvilas : The #sawtooth channel is the right place to report documentation issues on Hyperledger Sawtooth: https://chat.hyperledger.org/channel/general?msg=SAksy3C9RsWomvEFD
tkuhrt (Wed, 20 Dec 2017 16:44:52 GMT):
Moved over from #general
hunter32 (Wed, 20 Dec 2017 16:49:15 GMT):
@Dan hello finally i got the SPID and Intel verified my cert file. so now i am in the step where i must configure these:
endpoint = "tcp://[external interface]:[port]"
and
seeds = ["tcp://[seed address 1]:[port]",
"tcp://[seed address 2]:[port]"]
Any idea what exactly i have to do in my machine?
hunter32 (Wed, 20 Dec 2017 16:49:15 GMT):
@Dan hello finally i got the SPID and Intel verified my cert file. so now i am in the step where i must configure these: 'endpoint = "tcp://[external interface]:[port]" and seeds = ["tcp://[seed address 1]:[port]",
"tcp://[seed address 2]:[port]"] '
Any idea what exactly i have to do in my machine?
hunter32 (Wed, 20 Dec 2017 16:49:15 GMT):
@Dan hello finally i got the SPID and Intel verified my cert file. so now i am in the step where i must configure these: endpoint = "tcp://[external interface]:[port]" and seeds = ["tcp://[seed address 1]:[port]",
"tcp://[seed address 2]:[port]"]
Any idea what exactly i have to do in my machine?
grkvlt (Wed, 20 Dec 2017 19:13:57 GMT):
I'm thinking of doing some work to get the Docker images in better shape. Over 1 GiB for an image makes for slow startup! I've also got a Dockerfile to build an image for the `smallbank-workload`, which would be useful for people doing perf testing:
- https://gist.github.com/grkvlt/24f5428c06d541ed1d3e7389585ae8c9
I'll add images for the other workload tools and put it alongside the other files in `docker/` but it's also pretty big when built, so I'm guilty of this too, but I plan to use the same techniques to slim down _all_ the images in a single PR...
sagarvilas (Wed, 20 Dec 2017 23:38:44 GMT):
@tkuhrt thank you. i will report errors in documentation as and when i find them
tkuhrt (Wed, 20 Dec 2017 23:57:32 GMT):
@sagarvilas : You can always report issues in https://jira.hyperledger.org, including documentation issues. Also, if you want to have a go at fixing the issue, the Sawtooth community would be happy to review your pull requests.
sagarvilas (Wed, 20 Dec 2017 23:59:36 GMT):
@tkuhrt sure ill log issue in jira and fix the ones i can.
accuarion (Thu, 21 Dec 2017 01:57:33 GMT):
Has joined the channel.
accuarion (Thu, 21 Dec 2017 03:27:32 GMT):
HI sawtooth community. I am looking to see if an idea I have could be worth doing and some direction as to where I should start. What I am looking for is a platform that will be helpful to both Individuals and Businesses where Businesses can share information about Bills, such as the Utility Bills, Loans, and additionally transactional data as to what is occurring. I am thinking that the Project Sawtooth is one that would work but wanted to get your input first.
My goal is that once we have a platform built or configured, that Banks, Utilities, and pretty much any entity that sends "bills" to customers can put their data out on the platform which can then be pulled and help users have a complete financial picture where their debts/bills are and proof of payment for both the businesses and individuals.
Let me know what you think and where I can start. Any help would be appreciated
anrodon (Thu, 21 Dec 2017 11:32:25 GMT):
Hey guys
anrodon (Thu, 21 Dec 2017 11:32:41 GMT):
I just launched an AWS AMI for Sawtooth Supply Chain
anrodon (Thu, 21 Dec 2017 11:32:55 GMT):
I already have my Public DNS address and so on
anrodon (Thu, 21 Dec 2017 11:32:58 GMT):
but I cannot connect
anrodon (Thu, 21 Dec 2017 11:33:06 GMT):
I don't know a lot about this yes
anrodon (Thu, 21 Dec 2017 11:33:16 GMT):
could anyone help me to get on board? :D
anrodon (Thu, 21 Dec 2017 11:33:21 GMT):
thanks in advance
karentani (Thu, 21 Dec 2017 12:38:37 GMT):
Has joined the channel.
grkvlt (Thu, 21 Dec 2017 14:54:04 GMT):
hi. anyone know what has gone wrong here:
```[14:19:55.424 [ConnectionManager] gossip DEBUG] Number of peers: 5
[14:19:55.424 [ConnectionManager] gossip DEBUG] Peers are: ['tcp://validator:8800', 'tcp://test-000:8800', 'tcp://test-001:8800', 'tcp://test-003:8800', 'tcp://test-000:8800']
[14:19:55.424 [ConnectionManager] gossip DEBUG] Unpeered candidates are: []
```
as you can see, `test-000` is represented *twice* in the peers list ... ?! interestingly this validator seems to be failing to accept transactions for execution, too...
jsmitchell (Thu, 21 Dec 2017 15:58:47 GMT):
huh @grkvlt haven't seen anything like that in a while. @agunde ^
agunde (Thu, 21 Dec 2017 16:01:02 GMT):
I will add looking into this to my todo list.
jsmitchell (Thu, 21 Dec 2017 16:03:26 GMT):
@grkvlt thanks for the contributions, by the way!
jsmitchell (Thu, 21 Dec 2017 16:48:43 GMT):
I just pushed a PR to add you to the committers whitelist
numical (Thu, 21 Dec 2017 17:19:39 GMT):
Has joined the channel.
jsmitchell (Thu, 21 Dec 2017 18:25:17 GMT):
@grkvlt if you rebase your PRs on master, the tests should kick off automatically from now on
sagarvilas (Fri, 22 Dec 2017 00:44:43 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=rGz8bsA83fcFCwoTP) @anrodon what is the error that you are getting
sagarvilas (Fri, 22 Dec 2017 01:14:47 GMT):
Hi all for some reason XO client does not work unless there is a settings-tp running
girumtibebu (Fri, 22 Dec 2017 08:58:50 GMT):
Has joined the channel.
grkvlt (Fri, 22 Dec 2017 12:38:03 GMT):
Brilliant, thanks for that @jsmitchell - I'll get the PRs rebased
DhavalShah (Fri, 22 Dec 2017 12:40:42 GMT):
Has joined the channel.
DhavalShah (Fri, 22 Dec 2017 12:42:12 GMT):
Guys, I am trying to develop using Java SDK. To compile the SDK there is a reference to the package sawtooth.sdk.protobuf.* but it is unresolved in the project I got from GIT. Any pointers will be highly appreciated
jsmitchell (Fri, 22 Dec 2017 15:52:32 GMT):
@sagarvilas there are probably settings transactions in the genesis block that need to be processes - thus the need for the settings tp to proceed
MicBowman (Fri, 22 Dec 2017 18:12:32 GMT):
ping @jsmitchell
jsmitchell (Fri, 22 Dec 2017 18:13:57 GMT):
yo @MicBowman
MicBowman (Fri, 22 Dec 2017 18:14:38 GMT):
hey... i need some git help... i want to create a repo that i can use to restructure the sgx enclave;
MicBowman (Fri, 22 Dec 2017 18:15:26 GMT):
whats the best way to clone the hl sawtooth-core repo into a separate internal repo (for now)
jsmitchell (Fri, 22 Dec 2017 18:15:57 GMT):
internal github or something else?
MicBowman (Fri, 22 Dec 2017 18:16:05 GMT):
i want some freedom to do local PRs but at some point push back. i could just fork into public git hub
MicBowman (Fri, 22 Dec 2017 18:16:06 GMT):
yes
MicBowman (Fri, 22 Dec 2017 18:16:25 GMT):
can i just set upstream in a new repo & pull?
MicBowman (Fri, 22 Dec 2017 18:16:48 GMT):
this shouldn't be hard...
MicBowman (Fri, 22 Dec 2017 18:16:55 GMT):
i'm sure i'm missing something completely obvious
jsmitchell (Fri, 22 Dec 2017 18:17:20 GMT):
@amundson has done this a bunch more than me (setting up an internal tracking repo)
jsmitchell (Fri, 22 Dec 2017 18:17:27 GMT):
you could probably clone down
jsmitchell (Fri, 22 Dec 2017 18:17:37 GMT):
add a new remote for your internal target
jsmitchell (Fri, 22 Dec 2017 18:17:40 GMT):
and push to that
MicBowman (Fri, 22 Dec 2017 18:18:49 GMT):
let me try that...
MicBowman (Fri, 22 Dec 2017 18:20:46 GMT):
that was it... thanks!
jsmitchell (Fri, 22 Dec 2017 18:20:54 GMT):
:thumbsup:
MicBowman (Fri, 22 Dec 2017 18:21:27 GMT):
basically... i'm splitting the sgx enclave code into three pieces... one for setting up the enclave, one for signup info, and one for the poet semantics
MicBowman (Fri, 22 Dec 2017 18:21:44 GMT):
i want to reuse the base enclave and signup code for some other projects
MicBowman (Fri, 22 Dec 2017 18:22:18 GMT):
i think i have a clean version of that noew
MicBowman (Fri, 22 Dec 2017 18:22:19 GMT):
now
jsmitchell (Fri, 22 Dec 2017 18:22:20 GMT):
cool, you know you could just do all of that in a public github fork and then submit PRs back against the main hl repo, right?
MicBowman (Fri, 22 Dec 2017 18:22:41 GMT):
i can if you want the restructuring...
MicBowman (Fri, 22 Dec 2017 18:22:47 GMT):
now functionality changes
jsmitchell (Fri, 22 Dec 2017 18:23:25 GMT):
if you think it's beneficial stuff, it would be good to have it in the main repo
jsmitchell (Fri, 22 Dec 2017 18:24:02 GMT):
if it's only germane to the other projects, then probably not?
MicBowman (Fri, 22 Dec 2017 18:24:57 GMT):
its mostly about re-use of the signup code
MicBowman (Fri, 22 Dec 2017 18:25:18 GMT):
modularizes the actual poet code
MicBowman (Fri, 22 Dec 2017 18:25:26 GMT):
but no other particular value
jsmitchell (Fri, 22 Dec 2017 18:27:16 GMT):
I'll leave it up to you, but if you want to do that, the workflow would be to fork the repo in the github ui and then you clone your forked version. You create branches locally and push them up to your forked version. If you want to submit a PR, you fetch upstream and rebase off master and then push your branch to your fork. Then open a PR in the core repo referencing your fork
jsmitchell (Fri, 22 Dec 2017 18:27:27 GMT):
Screen Shot 2017-12-22 at 12.25.39 PM.png
jsmitchell (Fri, 22 Dec 2017 18:27:34 GMT):
The fork button is up there on the right
MicBowman (Fri, 22 Dec 2017 18:29:40 GMT):
thanks!
skbehera85 (Fri, 22 Dec 2017 18:42:37 GMT):
hi all, how do i get the timestamp of each transaction.
jsmitchell (Fri, 22 Dec 2017 18:42:50 GMT):
timestamps and blockchains don't mix
jsmitchell (Fri, 22 Dec 2017 18:43:00 GMT):
what are you trying to determine?
jsmitchell (Fri, 22 Dec 2017 18:46:05 GMT):
if you set the trace field in the batch header, validators will log the batch as it goes through the processing pipeline
jsmitchell (Fri, 22 Dec 2017 18:46:11 GMT):
the logs are timestamped
jsmitchell (Fri, 22 Dec 2017 18:46:48 GMT):
eg:
jsmitchell (Fri, 22 Dec 2017 18:46:50 GMT):
[12:24:25.759 [Thread-28] chain DEBUG] TRACE f8865cab45973727f6a3671d47cc77e956cba01fda89109d3088391780ae76b670f082aacde596a03a49103cde5498073287a17f60a523bcc4921c4872ade318: ChainController
jsmitchell (Fri, 22 Dec 2017 18:47:13 GMT):
that "ChainController" step means the batch was processed in a block written to the blockchain
DJ1008 (Sat, 23 Dec 2017 13:25:58 GMT):
Has joined the channel.
DJ1008 (Sat, 23 Dec 2017 13:31:26 GMT):
I wanna learn to code on Hyperledger sawtooth.. please forward some useful links to learn. I have prior python expertise.
wheeze (Sat, 23 Dec 2017 14:56:42 GMT):
Has joined the channel.
eliezemmour (Sat, 23 Dec 2017 17:08:07 GMT):
Has joined the channel.
hacknightly (Sat, 23 Dec 2017 18:38:52 GMT):
Has joined the channel.
moinqidw (Sun, 24 Dec 2017 04:09:47 GMT):
Has joined the channel.
moinqidw (Sun, 24 Dec 2017 04:10:45 GMT):
Hi all, could not find details on this in the documentation. Does anyone know if private channels are supported in Sawtooth similar to fabric?
rammohanmishra (Sun, 24 Dec 2017 20:45:57 GMT):
Has joined the channel.
rammohanmishra (Sun, 24 Dec 2017 20:47:11 GMT):
whenever i tried to publish a new batch i see in console "Invalid Transaction Tried to get unauthorized address:
rammohanmishra (Sun, 24 Dec 2017 20:47:38 GMT):
appreciate any type of help
rammohanmishra (Sun, 24 Dec 2017 21:21:48 GMT):
i saw previous post and someone suggested to add address into inputs
rammohanmishra (Sun, 24 Dec 2017 21:22:17 GMT):
Is it inputs of transaction header or somewhere else?
PallabPaul (Mon, 25 Dec 2017 09:01:34 GMT):
Has joined the channel.
PallabPaul (Mon, 25 Dec 2017 09:02:09 GMT):
Hello I hope i am in the right channel. So I am testing out the XO game tutorial found here: https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/intro_xo_transaction_family.html#xo-transaction-family-specification and I am running into an issue when I try to create game1. when i do the command 'xo list' game1 does not appear and these are the issues that appear on my validator:
PallabPaul (Mon, 25 Dec 2017 09:02:30 GMT):
Clipboard - December 25, 2017 4:02 AM
PallabPaul (Mon, 25 Dec 2017 09:02:35 GMT):
i think there may be an issue with the ports i am using because after setting up my validator i have to kill port 8080 for my REST API to run properly. please let me know if anyone can help. thanks
BeeKay (Mon, 25 Dec 2017 18:26:10 GMT):
is there a way to implement payload security? I may want to wall-off certain payload contents from my counter parties. Better still, i may want to have a different wall for different counter-parties that i share the same payload with. I guess this may be a priority for permissioned implementations.Thoughts?
PallabPaul (Mon, 25 Dec 2017 20:30:07 GMT):
also, can someone tell me the command to delete an existing chain. i am not sure how to get to var/lib/sawtooth like mentioned in this note:
PallabPaul (Mon, 25 Dec 2017 20:30:13 GMT):
Clipboard - December 25, 2017 3:30 PM
rohanagarwal (Mon, 25 Dec 2017 21:32:32 GMT):
Has joined the channel.
tkuhrt (Tue, 26 Dec 2017 16:12:45 GMT):
@DJ1008 : Are you looking to develop as an application or core developer? The Hyperledger Sawtooth documentation has information for either -- https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html or https://sawtooth.hyperledger.org/docs/core/releases/latest/core_developers_guide.html. Also, if the former and you are just getting started, you might check out the following EdX course: https://www.edx.org/course/blockchain-business-introduction-linuxfoundationx-lfs171x
tkuhrt (Tue, 26 Dec 2017 16:16:06 GMT):
@moinqidw : Hyperledger Sawtooth does not support private channels in the same way as Hyperledger Fabric. You will be interested in this previous answer from October 9th to someone asking a similar question: https://chat.hyperledger.org/channel/sawtooth?msg=znXoC4ZQNw5j7wmos. Only use this link for the Private UTXO example: https://sawtooth.hyperledger.org/docs/core/releases/latest/examples/private_utxo/overview.html.
tkuhrt (Tue, 26 Dec 2017 16:18:14 GMT):
Expanding the October 9th link here: [ ](https://chat.hyperledger.org/channel/sawtooth?msg=znXoC4ZQNw5j7wmos)
rahulr92 (Tue, 26 Dec 2017 18:16:58 GMT):
@tkuhrt The documentation URL shared in the Oct9th post by Dan seems to have changed now. This works - https://sawtooth.hyperledger.org/docs/core/releases/latest/examples/private_utxo/overview.html
tkuhrt (Tue, 26 Dec 2017 18:17:30 GMT):
Yep
tkuhrt (Tue, 26 Dec 2017 18:18:44 GMT):
Thanks for calling that out...that link seems lost in my above message with the way rocket.chat formats.
Mythul (Tue, 26 Dec 2017 23:13:31 GMT):
Has joined the channel.
Mythul (Tue, 26 Dec 2017 23:14:03 GMT):
Hi
Mythul (Tue, 26 Dec 2017 23:14:47 GMT):
can somebody help me debug a Batch submit functionality written in java for 'intkey' ?
Mythul (Tue, 26 Dec 2017 23:21:17 GMT):
https://pastebin.com/2mSkDpcS
Mythul (Tue, 26 Dec 2017 23:21:41 GMT):
I'm getting batch invalid, not added to block error
yipcma (Wed, 27 Dec 2017 07:41:30 GMT):
hi guys, wonder if there's any specific tutorial/course for sawtooth along the line of IBM's blockchain course. Thanks a lot in advnace. (ps: i'm following the edx hyperledger course)
yipcma (Wed, 27 Dec 2017 07:41:30 GMT):
hi guys, wonder if there's any specific tutorial/course for sawtooth along the line of IBM's blockchain course. Thanks a lot in advance. (ps: i'm following the edx hyperledger course)
yipcma (Wed, 27 Dec 2017 07:41:30 GMT):
hi guys, wonder if there's any specific tutorial/course for sawtooth similar to IBM's blockchain course. Thanks a lot in advance. (ps: i'm following the edx hyperledger course)
rammohanmishra (Wed, 27 Dec 2017 16:43:16 GMT):
I am getting this error "Invalid Transaction Tried to get unauthorized address: ['3400deqtcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9']" when i have tried to add extra message in Supply-Chain example
otherwise, supply-chain example works very fine. but if i add any extra message field. it keeps throwing unauthorized address error
pschwarz (Wed, 27 Dec 2017 16:49:42 GMT):
That indicates that your transaction is reading from an address that wasn't included in the transaction header's `inputs` field
rammohanmishra (Wed, 27 Dec 2017 17:57:17 GMT):
@pschwarz return new TransactionEncoder(privateKey, {
familyName: 'supply_chain',
familyVersion: '1.0',
payloadEncoding: 'application/protobuf',
inputs: ['3400de'],
outputs: ['3400de'],
batcherPubkey
})
rammohanmishra (Wed, 27 Dec 2017 17:59:00 GMT):
@pschwarz above snippet .. work with initial setup very well.. but when i add a new message type in transactionfamily then it throws unauthorized address error
rammohanmishra (Wed, 27 Dec 2017 17:59:28 GMT):
@pschwarz do i need to make any changes in validator?
pschwarz (Wed, 27 Dec 2017 18:44:55 GMT):
Hmm
pschwarz (Wed, 27 Dec 2017 18:45:04 GMT):
That does look right
pschwarz (Wed, 27 Dec 2017 18:46:05 GMT):
I'd have to know a bit more about what you've changed, then
rammohanmishra (Wed, 27 Dec 2017 18:55:42 GMT):
AGENT = 'ae'
PROPERTY = 'ea'
PROPOSAL = 'aa'
RECORD = 'ec'
RECORD_TYPE = 'ee'
QUESTION_TYPE = 'qt'
rammohanmishra (Wed, 27 Dec 2017 18:56:09 GMT):
i have added last line to handle additional address type
rammohanmishra (Wed, 27 Dec 2017 18:57:24 GMT):
but it seems that it is not being allowed and treat it as unauthorized
rammohanmishra (Wed, 27 Dec 2017 18:57:56 GMT):
now, i have changed to AGENT = 'ae'
PROPERTY = 'ea'
PROPOSAL = 'aa'
RECORD = 'ec'
RECORD_TYPE = 'ee'
QUESTION_TYPE = 'ab'
rammohanmishra (Wed, 27 Dec 2017 18:58:52 GMT):
QUESTION_TYPE value from 'qt' to 'ab'
rammohanmishra (Wed, 27 Dec 2017 18:59:00 GMT):
and it starts working
rammohanmishra (Wed, 27 Dec 2017 19:05:36 GMT):
@pschwarz any idea why address with 'qt' does not work .. but work with 'ab'.. do i need to define address range?
pschwarz (Wed, 27 Dec 2017 19:06:55 GMT):
Ah, now I see the problem - addresses may only be valid hex characters. `qt` is not
pschwarz (Wed, 27 Dec 2017 19:07:33 GMT):
The bug is in the error messages - it should indicated as to why that is unauthorized
rammohanmishra (Wed, 27 Dec 2017 19:11:02 GMT):
@pschwarz you are genius.. thank you for pointing it out
pschwarz (Wed, 27 Dec 2017 19:14:04 GMT):
:thumbsup:
Meai2 (Wed, 27 Dec 2017 21:21:16 GMT):
Has joined the channel.
Meai2 (Wed, 27 Dec 2017 21:21:44 GMT):
How come sawtooth is supposedly scalable yet this simple demo app crawls at a snail's pace?
Meai2 (Wed, 27 Dec 2017 21:22:25 GMT):
I'm talking about the seafood marketplace etc
pschwarz (Wed, 27 Dec 2017 22:32:22 GMT):
The demo app is slow due to the way we (naively) implemented synchronizing block chain state into a reporting database, which allows for richer queryability. This synchronization aspect wasn't a built-in feature of the 0.7 release, which those demos are currently based on, so it is essentially recreating a table with all of the state every block.
In the forthcoming 1.0 release, we've added an event system, one of which sends state deltas to a client, as well as come up with some more clever ways of storing data in an external reporting DB that require minimal inserts/updates per block. You can see this type of work in the sawtooth-supply-chain repo (https://github.com/hyperledger/sawtooth-supply-chain) or in the in-progress sawtooth-marketplace repo (https://github.com/hyperledger/sawtooth-marketplace).
Hopefully, we'll be deploying these two examples to replace the current ones in the near future.
rahulr92 (Thu, 28 Dec 2017 05:40:42 GMT):
Hi, I've gone through the edX course and also setup and played around with the sawtooth supply-chain demo. I'm interested in testing it out with multiple validators to try various validator permissioning settings.
What's the best resource on getting multiple validators to talk in sawtooth (peering)?
rahulr92 (Thu, 28 Dec 2017 08:11:31 GMT):
I was able to get the validators to attempt to peer with the each other ("attempting to peer with tcp://
RTLagot (Thu, 28 Dec 2017 14:50:09 GMT):
Has joined the channel.
sagarvilas (Fri, 29 Dec 2017 00:12:07 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=7TYCJuv9zcEqoCnju) @jsmitchell hmm interesting, let me check that. thank you
MaxWiz (Fri, 29 Dec 2017 01:06:34 GMT):
Has joined the channel.
SangramSawant (Fri, 29 Dec 2017 07:18:37 GMT):
Has joined the channel.
SangramSawant (Fri, 29 Dec 2017 07:19:14 GMT):
Version in "./sawtooth-default.yaml" is unsupported, getting this error for installing sawtooth
SangramSawant (Fri, 29 Dec 2017 07:19:36 GMT):
any solution or recommendation?
Johnjam (Fri, 29 Dec 2017 09:43:25 GMT):
Hi everyone, sometimes I got this errors when I send more than 1 batch with more than 1 txn each : https://ibb.co/di34pw & https://ibb.co/fKg2bb . I'm in parallel schedule configuration (because sometimes with the serial schedule configuration, the block validation process stops for some validators and they start to fork without resolving afterwards). Maybe I'm missing smthg ?
sascha (Fri, 29 Dec 2017 10:55:12 GMT):
Has joined the channel.
moinqidw (Fri, 29 Dec 2017 11:01:53 GMT):
@tkuhrt : Thanks for your response. So it seems in Sawtooth privacy is a property of transactions rather than the network (as is the case with fabric). Thanks that makes making a choice between the two much simpler.
Iliadis (Fri, 29 Dec 2017 20:14:57 GMT):
Has joined the channel.
rberg2 (Fri, 29 Dec 2017 20:35:20 GMT):
@SangramSawant Hello, what version of docker and docker-compose are you running?
rberg2 (Fri, 29 Dec 2017 20:38:59 GMT):
@SangramSawant I have "Docker version 17.09.1-ce" and "docker-compose version 1.17.1" installed and do not get that error here.
marc0o (Sat, 30 Dec 2017 14:42:32 GMT):
Has joined the channel.
marc0o (Sat, 30 Dec 2017 14:43:40 GMT):
Hello, can somebody help me with the hyperledger training material for sawtooth? I am running on windows and can't get the application built with npm
marc0o (Sat, 30 Dec 2017 14:43:41 GMT):
https://github.com/hyperledger/education/tree/master/LFS171x/sawtooth-material/sawtooth-tuna/client
marc0o (Sat, 30 Dec 2017 14:44:12 GMT):
can this be a problem with the module secp256k1?
marc0o (Sat, 30 Dec 2017 14:44:46 GMT):
Clipboard - 30. Dezember 2017 15:44
marc0o (Sat, 30 Dec 2017 14:47:25 GMT):
12 info lifecycle Sawtooth-tuna-chain-client@0.0.0~build: Failed to exec build script
13 verbose stack Error: Sawtooth-tuna-chain-client@0.0.0 build: `./node_modules/webpack/bin/webpack.js`
13 verbose stack Exit status 1
13 verbose stack at EventEmitter.
marc0o (Sat, 30 Dec 2017 14:51:10 GMT):
I know that the instruction say I need to use VirtualBox. but I wouldn't have expected that a frontend application built with javascript cannot run under windows
AndreyPospelov (Sat, 30 Dec 2017 15:30:30 GMT):
Has joined the channel.
DhavalShah (Sat, 30 Dec 2017 15:34:28 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=xmNTvXkXyqKbcXZ9R) @Mythul I am getting the same error. Someone please help?
AndreyPospelov (Sat, 30 Dec 2017 15:34:29 GMT):
@marc0o Look inside ./node_modules/webpack/bin/webpack.js which is run for build script. It'll not work in windows this way
AndreyPospelov (Sat, 30 Dec 2017 15:35:01 GMT):
try 'node.exe node_modules/webpack/bin/webpack.js' or similar
AndreyPospelov (Sat, 30 Dec 2017 15:42:44 GMT):
tuna app doesn't work with the current images on ubuntu. I'm getting:
/// sawtooth-validator-default | [2017-12-30 15:29:18.644 DEBUG interconnect] ServerThread sending CLIENT_BATCH_SUBMIT_RESPONSE to b'8bcdaa32b0c9409f'
/// sawtooth-rest-api-default | [2017-12-30 15:29:33.642 WARNING route_handlers] Timed out while waiting for validator response
when trying to create a record. I have no idea what to do with this. I'm just following this course https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS171x+3T2017/courseware/9faeeb6df17c4d25a205c965473925e5/016a2cd813884e32a0c3056c472d39b1/?child=first
AndreyPospelov (Sat, 30 Dec 2017 15:47:05 GMT):
@SangramSawant Install the latest docker compose 1.18.0 and sawtooth-default.yaml will start to work
DhavalShah (Sat, 30 Dec 2017 15:53:48 GMT):
Hellow folks, this is pretty interesting issue I am facing. I am posting a batch with only one transaction to sawtooth. It processes the transaction and calls my handler and the handler exits sending an ok response. Yet, the sawtooth responds with status 202, INVALID transaction. Attached is the screenshot of the debug log on server, and help is highly appreciated. Thanks!
DhavalShah (Sat, 30 Dec 2017 15:54:38 GMT):
Capture.PNG
marc0o (Sat, 30 Dec 2017 16:53:47 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=QAwwuSkbetHAYMAJE) @AndreyPospelov thanks! ... omg this is really stupid xD .. shame on me. but I am wondering why this command is included in the package.json at all
marc0o (Sat, 30 Dec 2017 16:54:13 GMT):
npm noob :-D
marc0o (Sat, 30 Dec 2017 17:43:07 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=mev9emDGHqwYhFRLx) @DhavalShah I am facing the same problem I think
marc0o (Sat, 30 Dec 2017 17:49:36 GMT):
ok it seems to work now
marc0o (Sat, 30 Dec 2017 17:50:25 GMT):
don't know what it was
marc0o (Sat, 30 Dec 2017 17:50:56 GMT):
processor registered asset and this worked fine. also got the expected error message when registering asset twice
marc0o (Sat, 30 Dec 2017 17:51:53 GMT):
at first the validator always said it is inavlid and didn't add it to the block
marc0o (Sat, 30 Dec 2017 17:52:56 GMT):
now I followed these steps:
1. stopped docker-compose
2. stopped processor
3. started docker-compose
4. started processor
marc0o (Sat, 30 Dec 2017 17:53:00 GMT):
and then it worked
DhavalShah (Sat, 30 Dec 2017 17:54:43 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=XPYL8vmmpSrRxM3HE) @marc0o Wow! Can you please tell me how did you register asset with processor?
marc0o (Sat, 30 Dec 2017 17:55:21 GMT):
but it still seems to behave a bit strange
marc0o (Sat, 30 Dec 2017 17:55:30 GMT):
Clipboard - 30. Dezember 2017 18:55
marc0o (Sat, 30 Dec 2017 17:57:25 GMT):
ahh ok no, all right! these 2 were correctly invalidated
marc0o (Sat, 30 Dec 2017 17:57:36 GMT):
typed 3 times hyperledger
marc0o (Sat, 30 Dec 2017 17:58:27 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=o5E3bako9GYAHzfxL) @DhavalShah what exactly is your problem?
marc0o (Sat, 30 Dec 2017 17:59:16 GMT):
it should all be done automatically
DhavalShah (Sat, 30 Dec 2017 18:00:13 GMT):
I cannot seem to get it to work :(
marc0o (Sat, 30 Dec 2017 18:00:48 GMT):
you should at first start your docker setup
marc0o (Sat, 30 Dec 2017 18:00:53 GMT):
make sure it is all running and up
marc0o (Sat, 30 Dec 2017 18:01:12 GMT):
docker-compose -f sawtooth-default.yaml ps
marc0o (Sat, 30 Dec 2017 18:01:47 GMT):
when here is all fine you can start your processor
marc0o (Sat, 30 Dec 2017 18:02:05 GMT):
that should automatically be registered then
DhavalShah (Sat, 30 Dec 2017 18:02:10 GMT):
ok
nathanaw (Sat, 30 Dec 2017 18:02:13 GMT):
Has joined the channel.
DhavalShah (Sat, 30 Dec 2017 18:02:18 GMT):
I think it does get registered
DhavalShah (Sat, 30 Dec 2017 18:02:22 GMT):
wait
AndreyPospelov (Sat, 30 Dec 2017 18:02:32 GMT):
Where do you get this "processor", is it intkey-tp-python service?
DhavalShah (Sat, 30 Dec 2017 18:02:47 GMT):
no I wrote one in java
nathanaw (Sat, 30 Dec 2017 18:03:00 GMT):
hi all! I am trying to run the sawtooth samples (e.g., bond settlement) locally on my machine -- is this something possible?
AndreyPospelov (Sat, 30 Dec 2017 18:04:40 GMT):
@nathanaw Who knows. You should try. Tuna tracking example doesn't work for me at the moment.
DhavalShah (Sat, 30 Dec 2017 18:05:14 GMT):
Capture2.PNG
AndreyPospelov (Sat, 30 Dec 2017 18:06:54 GMT):
Is it ok if I have
/// sawtooth-validator-default | [2017-12-30 17:52:25.652 DEBUG executor] no transaction processors registered for proc
in my logs for sawtooth-validator-default service from sawtooth-default.yaml ?
DhavalShah (Sat, 30 Dec 2017 18:07:15 GMT):
Capture3.PNG
DhavalShah (Sat, 30 Dec 2017 18:07:47 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=2pgT7y5fWycXZ8wxG) @AndreyPospelov It means your TP is not running
AndreyPospelov (Sat, 30 Dec 2017 18:10:49 GMT):
I'm using such compose file https://raw.githubusercontent.com/hyperledger/education/master/LFS171x/sawtooth-material/sawtooth-default.yaml is transaction processor is in it?
AndreyPospelov (Sat, 30 Dec 2017 18:10:49 GMT):
I'm using such compose file https://raw.githubusercontent.com/hyperledger/education/master/LFS171x/sawtooth-material/sawtooth-default.yaml is transaction processor in it?
DhavalShah (Sat, 30 Dec 2017 18:21:57 GMT):
yes
DhavalShah (Sat, 30 Dec 2017 18:22:32 GMT):
no sorry
DhavalShah (Sat, 30 Dec 2017 18:24:03 GMT):
Sorry I think yes it is from sawtooth-default.yaml
DhavalShah (Sat, 30 Dec 2017 18:24:28 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=aHHtMvxoiCYyfaotP) @AndreyPospelov Yes it is from sawtooth-default.yaml
rambsuthar (Mon, 01 Jan 2018 06:23:49 GMT):
Has joined the channel.
tatsuya.iskw (Mon, 01 Jan 2018 09:04:36 GMT):
Has joined the channel.
BeeKay (Mon, 01 Jan 2018 14:10:09 GMT):
where can i find CLIENT_EVENTS_SUBSCRIBE_REQUEST? I am attempting to register to validator events, and am trying to use the snippet:
BeeKay (Mon, 01 Jan 2018 14:10:41 GMT):
msg = Message(
correlation_id=correlation_id,
message_type=CLIENT_EVENTS_SUBSCRIBE_REQUEST,
content=request)
BeeKay (Mon, 01 Jan 2018 21:50:08 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=4Kpjoht8GCLhpQ6p9) Never mind...
elias_p (Tue, 02 Jan 2018 10:44:16 GMT):
Has joined the channel.
skbehera85 (Tue, 02 Jan 2018 12:24:38 GMT):
Hi Team,
skbehera85 (Tue, 02 Jan 2018 12:38:30 GMT):
Transction & type.png
skbehera85 (Tue, 02 Jan 2018 12:38:52 GMT):
Hi Team,
I submitted the transactions with sawtooth batch submit & I can see the same in the logs. I verified the logs and i found that for the same transaction id & for the same type, its written twice. Can you please check the logs attached in the above thread and verify if that is correct. If yes, then can some explain me why it is so. (Its happening for all types)
Thanks.
skbehera85 (Tue, 02 Jan 2018 12:38:52 GMT):
Hi Team,
I submitted the transactions with sawtooth batch submit & I can see the same in the logs. I verified the logs and i found that for the same transaction id & for the same type, its written twice. Can you please check the logs attached in the below thread and verify if that is correct. If yes, then can some explain me why it is so. (Its happening for all types)
Thanks.
skbehera85 (Tue, 02 Jan 2018 12:38:52 GMT):
Hi Team,
I submitted the transactions with sawtooth batch submit & I can see the same in the logs. I verified the logs and i found that for the same transaction id & for the same type, its logging twice. Can you please check the logs attached in the below thread and verify if that is correct. If yes, then can some explain me why it is so. (Its happening for all types)
Thanks.
skbehera85 (Tue, 02 Jan 2018 12:40:02 GMT):
transaction & type.png
amundson (Tue, 02 Jan 2018 14:09:17 GMT):
@skbehera85 this is expected. one is from the block publisher (the local validator's attempt to put together and publish a new block) and one is from the chain controller (which receives blocks over the network or from the local publisher and updates the chain)
matrisis (Tue, 02 Jan 2018 15:34:14 GMT):
Has joined the channel.
Mythul (Tue, 02 Jan 2018 15:37:12 GMT):
@DhavalShah hey, did you manage to get a transaction working with Java? can you share an example if yes?
Mythul (Tue, 02 Jan 2018 15:38:43 GMT):
does anybody have a working client example written in Java? to post a simple batch transaction? Many thanks in advance.
DhavalShah (Tue, 02 Jan 2018 17:30:21 GMT):
@Mythul No, I am still facing the problem, I wonder if it is an issue with the java SDK? Wish someone from Sawtooth would see this and help us out.
skbehera85 (Tue, 02 Jan 2018 17:31:43 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=A4ZAmPk5WxQk2XGvB) @amundson
skbehera85 (Tue, 02 Jan 2018 17:36:25 GMT):
@amundson , many thanks for your reply.
So as per that the first one logged is from the block publisher and the second one is from the chain controller.
skbehera85 (Tue, 02 Jan 2018 17:36:25 GMT):
@amundson , many thanks for your reply.
So as per that the first one logged is from the block publisher and the second one is from the chain controller.
skbehera85 (Tue, 02 Jan 2018 17:40:56 GMT):
@amundson , many thanks for your reply.
So as per that the first one logged is from the block publisher and the second one is from the chain controller.
Is there a way to add/enable timestamp to the transactions inside each blocks or it can only be checked in logs. (as per the attachment added in the previous post)
jsmitchell (Tue, 02 Jan 2018 18:38:12 GMT):
@skbehera85 you are looking at the handler log lines - if you set the trace header in the batches submitted, you will see log lines from the validator which show timestamped progress through the system
boydjohnson (Tue, 02 Jan 2018 20:33:34 GMT):
Hi @DhavalShah I understand that you wrote a custom transaction family with the Java sdk. From the logs you posted, the transaction processor does a GET and a SET, but the transaction that you expect to be valid is invalid. I notice there is "encoding" mentioned in the logs. I think on the latest versions of the sawtooth-validator "encoding" has been removed. I wouldn't expect that to be the problem, but maybe you could say more about your setup?
BeeKay (Wed, 03 Jan 2018 05:21:50 GMT):
In order to register for validator events, what should the URL be? I am attempting to register, the relevant code snippet is:
ctx = zmq.Context()
socket = ctx.socket(zmq.DEALER)
socket.connect(
nilx (Wed, 03 Jan 2018 08:33:57 GMT):
Has joined the channel.
nilx (Wed, 03 Jan 2018 08:35:08 GMT):
Good day to you all, I have a fairly simple quesion: I am trying to get the Sawtooth Java SDK running, but the Java package sawtooth.sdk.protobuf is missing on GitHub so I cannot build it. Where can I find this package?
nilx (Wed, 03 Jan 2018 09:51:07 GMT):
Alright, I figured it out (what tipped me off was the GitHub lists ProtocolBuffers as separate language). However, I think documentation could be improved to make Java SDK easier to use...
matrisis (Wed, 03 Jan 2018 10:11:01 GMT):
Hi, is there a way i can download the https://provenance.sawtooth.me/ demo ? Thx.
DhavalShah (Wed, 03 Jan 2018 11:23:41 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=WLYsJS3ppMguPNXQ3) @boydjohnson Thank you for responding. This is PoC I am doing to prove that Sawtooth can be used with JAVA. My setup is end to end JAVA, which means my client is JAVA, and my TP is also in JAVA. I am using the TP on top of the JAVA SDK. I run it in debug mode and I can see the transaction passes through my TP and exits without any problem. Once the control goes back to the server, the server fails the transaction. Also it does not say why it is invalidating the transaction which has been considered valid by TP.
skbehera85 (Wed, 03 Jan 2018 11:56:29 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=tkwXEPvbWuuexTkBr) @jsmitchell
Thanks for your reply. Can you please tell me how do i set the trace header in the batches submitted, can you please give me an example. Thanks.
Johnjam (Wed, 03 Jan 2018 12:02:04 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=MfLth2ZZxTnTjLiwY) @BeeKay it's the validator tcp url (tcp://validator:4004 for example if you run your code inside a docker container or tcp://localhost:4004 if you only expose the 4004 port from your validator container)
DhavalShah (Wed, 03 Jan 2018 12:26:09 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Tz6DC2NfWXekYvYnL) @nilx Hi! Are you able to run the JAVA SDK based Transaction Processor
Dan (Wed, 03 Jan 2018 14:18:58 GMT):
@matrisis there's a newer version of that provenance capability here: https://github.com/hyperledger/sawtooth-supply-chain
nilx (Wed, 03 Jan 2018 15:14:28 GMT):
@DhavalShah I am working on it, but for now I am implementing a Java Client that can actually create Transactions
matrisis (Wed, 03 Jan 2018 15:20:17 GMT):
@Dan Thank you.
boydjohnson (Wed, 03 Jan 2018 15:23:17 GMT):
@DhavalShah Can I see some logs of the TP along with the Validator logs?
shanb (Wed, 03 Jan 2018 15:43:48 GMT):
Hi
shanb (Wed, 03 Jan 2018 15:43:52 GMT):
I am now trying to register my TF but validator is regecting it.
sudo sawset proposal create -url http://localhost:8080 --key /etc/sawtooth/keys/mykey.priv sawtooth.validator.transaction_families='[{"family": "-my-ledger", "version": "1.0"}]'
I created key using command sawadm keygen mykey.priv
shanb (Wed, 03 Jan 2018 15:46:45 GMT):
validator log
shanb (Wed, 03 Jan 2018 15:46:48 GMT):
[05:00:35.817 [InterconnectThread-1] interconnect DEBUG] message round trip: TP_PROCESS_RESPONSE 0.005511283874511719
[05:00:35.910 [_PublisherThread] publisher DEBUG] Batch a97838d0ace31c1e5d50fb8484e589484aed67ba6e1d7042f6276d4ff7d5b24e5bdcf0d695fdbfbe2c1e884858d5671266e9ed8c7ff07f9b36d20063974c775e invalid, not added to block.
pschwarz (Wed, 03 Jan 2018 15:48:46 GMT):
What environment is that on?
shanb (Wed, 03 Jan 2018 15:52:32 GMT):
Ubuntu 16.04
boydjohnson (Wed, 03 Jan 2018 15:53:59 GMT):
@shanb In setting sawtooth.validator.transaction_families do you mean to set the family as "-my-ledger" and not "my-ledger". Is the extra hyphen intentional?
shanb (Wed, 03 Jan 2018 15:55:38 GMT):
sorry its my-ledger
jsmitchell (Wed, 03 Jan 2018 15:56:07 GMT):
@skbehera85 take a look at sawtooth-core/perf/sawtooth_perf/src/batch_submit.rs
jsmitchell (Wed, 03 Jan 2018 15:57:09 GMT):
that is compiled into the smallbank-workload command
jsmitchell (Wed, 03 Jan 2018 15:57:36 GMT):
this section sets the trace flag on a batch every five seconds or so:
jsmitchell (Wed, 03 Jan 2018 15:57:40 GMT):
```
loop {
match receiver.lock().unwrap().recv().unwrap() {
Some(mut batch_list) => {
// Set the trace flag on a batch about once every 5 seconds
if (time::Instant::now() - last_trace_time).as_secs() > 5 {
batch_list.mut_batches()[0].trace = true;
last_trace_time = time::Instant::now();
}
```
jsmitchell (Wed, 03 Jan 2018 15:57:56 GMT):
so, you should already be seeing lines with TRACE in them in the logs
jsmitchell (Wed, 03 Jan 2018 15:58:12 GMT):
if you want to increase the frequency of the tracing, you can modify this section of code
pschwarz (Wed, 03 Jan 2018 16:52:03 GMT):
@shanb how was the genesis block configured?
ibansalankit (Wed, 03 Jan 2018 17:01:36 GMT):
Has joined the channel.
ibansalankit (Wed, 03 Jan 2018 17:20:02 GMT):
Hi everyone,
I was going through the sawtooth core developer guide from the following link https://sawtooth.hyperledger.org/docs/core/releases/latest/core_developers_guide/environment_setup.html#overview
I realized after cloning that there is no tools folder in the repo. Any leads?
ibansalankit (Wed, 03 Jan 2018 17:20:02 GMT):
Hi everyone,
I was going through the sawtooth core developer guide from the following link https://sawtooth.hyperledger.org/docs/core/releases/latest/core_developers_guide/environment_setup.html#overview
I realized after cloning that there is no tools folder in the repo. Any leads?
shanb (Wed, 03 Jan 2018 17:20:53 GMT):
$ sawset genesis -k /etc/sawtooth/keys/mykey.priv
$ sawadm genesis config-genesis.batch
shanb (Wed, 03 Jan 2018 17:21:15 GMT):
I configured with above commands
tkuhrt (Wed, 03 Jan 2018 18:25:49 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Tz6DC2NfWXekYvYnL) Hi, @nilx - The Sawtooth community would be happy to receive a pull request with any improvements you have to the documentation.
Dan (Wed, 03 Jan 2018 20:47:16 GMT):
@ibansalankit we dropped vagrant for core dev use recently. The updated docs should also drop that reference. (It's a bit confusing but the "latest release" will be different than master at any given point). If you are looking to build apps on top of sawtooth I recommend the App developer guide. If you are interested in working on the core internals then I recommend installing docker. All the build scripts encapsulate what the dev environment use to do.
amundson (Wed, 03 Jan 2018 21:05:19 GMT):
A 1.0.0rc6 release is coming soon
RahulBansal (Thu, 04 Jan 2018 07:36:09 GMT):
Has joined the channel.
rahulr92 (Thu, 04 Jan 2018 08:36:49 GMT):
Hi everyone,
I am posting my question again since I have not had much luck over the last week. I have two validators in two separate ec2 instances. They are failing to talk to each other:
[10:17:29.043 [ConnectionManager] gossip DEBUG] Endpoint has not completed authorization in 3600 seconds: tcp://ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8800
How can I debug and fix this?
If 'telnet ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com 8800', I get "Unable to connect to remote host: Connection refused".
yoni (Thu, 04 Jan 2018 12:29:06 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=QPozqCQPrKRZhJxBs) @rahulr92 did you check the inbound rules for the AWS instances?
Dan (Thu, 04 Jan 2018 13:49:01 GMT):
@rahulr92 you could also check that you can reach the rest service from the node itself. If it is locally reachable then its possible the amazon network rules are an issue as @yoni suggests.
denis1990 (Thu, 04 Jan 2018 14:01:54 GMT):
Has joined the channel.
denis1990 (Thu, 04 Jan 2018 14:12:21 GMT):
Hi all, can anyone help ?
I run sawtooth in docker on my local PC, all went good, and I won myself several times in XO game from tutorial. Then I made another node, also running in docker. How to make transaction go to another, new validator ?
ibansalankit (Thu, 04 Jan 2018 15:32:46 GMT):
@Dan I will install docker. Thank you for the information.
bassrehab (Thu, 04 Jan 2018 19:28:38 GMT):
Has joined the channel.
amundson (Thu, 04 Jan 2018 19:55:35 GMT):
Sawtooth 1.0.0rc6 release notes - https://lists.hyperledger.org/pipermail/hyperledger-stl/2018-January/000149.html
rahulr92 (Thu, 04 Jan 2018 20:41:52 GMT):
@Dan @yoni Thanks. I am able to reach the rest endpoints from each of the ec2 instances (e.g.this works - 'sawtooth state list --url http://localhost:8080').
I have added a custom inbound security rule for the ec2 instances to accept any requests for 8800 in TCP protocol.
My validator.toml has the following:
# Advertised network endpoint URL.
endpoint = "tcp://127.0.0.1:8800".
Do I need to expose any other port or protocol in the inbound rules?
Asettouf (Thu, 04 Jan 2018 20:43:12 GMT):
Has joined the channel.
rahulr92 (Thu, 04 Jan 2018 20:45:38 GMT):
I also see that a process is listening to the port.
$ sudo netstat -tulpn | grep :8800
tcp 0 0 127.0.0.1:8800 0.0.0.0:* LISTEN 991/python3
Asettouf (Thu, 04 Jan 2018 20:46:46 GMT):
Hello, possibly a silly question: I am trying to make a little app with sawtooth, and I noticed there is a `go` sdk. I could not find any documentation regarding the installation of the sdk so I guessed that if I wanted to use some processor I'd have to run ` go get -v github.com/hyperledger/sawtooth-core/sdk/go/src/sawtooth_sdk/processor`. Now I get
```
rahulr92 (Thu, 04 Jan 2018 20:47:09 GMT):
The process is the validator:
$ cat /proc/991/cmdline | xargs -0 echo
/usr/bin/python3 /usr/bin/sawtooth-validator
Asettouf (Thu, 04 Jan 2018 20:49:09 GMT):
Hello, I figured I would try the go sdk of sawtooth, having found no documentation I guessed that I would have to run the following if I want to use processors:
`go get -v github.com/hyperledger/sawtooth-core/sdk/go/src/sawtooth_sdk/processor`. I simply get:
```
package sawtooth_sdk/protobuf/validator_pb2: unrecognized import path "sawtooth_sdk/protobuf/validator_pb2" (import path does not begin with hostname)
....
```
When looking at the source code, indeed there is this import mentioned, however no trace of it in the src folder. Does anyone have an idea on this?
Thank you
Hello, I figured I would try the go sdk of sawtooth, having found no documentation I guessed that I would have to run the following if I want to use processors:
`go get -v github.com/hyperledger/sawtooth-core/sdk/go/src/sawtooth_sdk/processor`. I simply get:
```
package sawtooth_sdk/protobuf/validator_pb2: unrecognized import path "sawtooth_sdk/protobuf/validator_pb2" (import path does not begin with hostname)
....
```
When looking at the source code, indeed there is this import mentioned, however no trace of it in the src folder. Does anyone have an idea on this?
Thank you
Asettouf (Thu, 04 Jan 2018 20:49:27 GMT):
Hello, I figured I would try the go sdk of sawtooth, having found no documentation I guessed that I would have to run the following if I want to use processors:
`go get -v github.com/hyperledger/sawtooth-core/sdk/go/src/sawtooth_sdk/processor`. I simply get:
```
package sawtooth_sdk/protobuf/validator_pb2: unrecognized import path "sawtooth_sdk/protobuf/validator_pb2" (import path does not begin with hostname)
....
```
When looking at the source code, indeed there is this import mentioned, however no trace of it in the src folder. Does anyone have an idea on this?
Thank you
Asettouf (Thu, 04 Jan 2018 21:37:37 GMT):
@rahulr92 Maybe you could try to fully disable the firewall first?
rahulr92 (Thu, 04 Jan 2018 21:38:29 GMT):
@Asettouf Thanks. Yes, I tried enabling all TCP ports in the inbound rules. I'm still getting the same issue.
Asettouf (Thu, 04 Jan 2018 21:45:48 GMT):
@rahulr92 What about the outbound rules?
rahulr92 (Thu, 04 Jan 2018 21:49:52 GMT):
As per https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html, "By default, security groups allow all outbound traffic."
Asettouf (Thu, 04 Jan 2018 22:07:23 GMT):
@rahulr92 Fair point, I was talking about the servers themselves (not knowing so much about amazon instances, I was wondering if the iptables are not set to some default)
pschwarz (Thu, 04 Jan 2018 22:08:52 GMT):
@Asettouf Those are generated from the proto files
Asettouf (Thu, 04 Jan 2018 22:11:46 GMT):
@pschwarz Oh I see, so I have to setup a vagrant VM to be able to use them right?
pschwarz (Thu, 04 Jan 2018 22:13:15 GMT):
Those are not provided in the core repo, but we will be deploying those to the proper location soon
pschwarz (Thu, 04 Jan 2018 22:13:24 GMT):
(need to create a story in JIRA for the task)
pschwarz (Thu, 04 Jan 2018 22:13:51 GMT):
You can build them using one of the provided docker images in the source repo
Asettouf (Thu, 04 Jan 2018 22:14:18 GMT):
@pschwarz Got it. Thanks a lot
pschwarz (Thu, 04 Jan 2018 22:14:35 GMT):
if you have it checked out, `./bin/build_all -l go`
rahulr92 (Thu, 04 Jan 2018 23:22:37 GMT):
@Asettouf I will double check the iptables to see if there is anything wrong. Thanks.
rahulr92 (Fri, 05 Jan 2018 00:07:10 GMT):
In validator.toml, I see the following documentation:
# The type of peering approach the validator should take. Choices are 'static'
# which only attempts to peer with candidates provided with the peers option,
# and 'dynamic' which will do topology buildouts. If 'dynamic' is provided,
# any static peers will be processed first, prior to the topology buildout
# starting.
peering = "static"
# Uri(s) to connect to in order to initially connect to the validator network,
# in the format tcp://hostname:port. This is not needed in static peering mode
# and defaults to None.
seeds = []
I am confused by the statement above seeds - "This is not needed in static peering mode". In the static mode, how will the validator know about the validator networkif not through the seeds config?
Johnjam (Fri, 05 Jan 2018 08:14:49 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=JPbSrLEFGNahPtY3B) @rahulr92 In static mode you can use the "peers" parameter to define your peer list. For instance, if you have 2 validators (validator1 and validator2) and you define : peers = ["tcp://validator2:8800"] in your validator1 config, then both of your validators will know each other.
larohndale (Fri, 05 Jan 2018 08:59:49 GMT):
Has joined the channel.
AnilOner (Fri, 05 Jan 2018 12:05:32 GMT):
Has joined the channel.
rahulr92 (Sat, 06 Jan 2018 04:13:00 GMT):
@Johnjam Thanks. Got it. I've made the seeds list empty.
Is there any working validator.toml file for validators that are statically peered that I can refer to?
akuma921 (Sat, 06 Jan 2018 12:06:28 GMT):
Has joined the channel.
akuma921 (Sat, 06 Jan 2018 12:07:30 GMT):
Hi any document to make a quick multi machine sawtooth network
akuma921 (Sat, 06 Jan 2018 12:07:38 GMT):
I need it to show a quick POC
akuma921 (Sat, 06 Jan 2018 13:12:28 GMT):
Also can somebody share any document ..which can help me adding a new validator on an existing running sawtooth network
akuma921 (Sat, 06 Jan 2018 13:12:42 GMT):
I am able to setup one validator using docker...
Rishabh-Sharma (Sun, 07 Jan 2018 06:03:06 GMT):
Has joined the channel.
VarshaRao (Sun, 07 Jan 2018 14:02:17 GMT):
Has joined the channel.
yoni (Sun, 07 Jan 2018 14:55:13 GMT):
Hi, roughly what is the amount of data that is recommended to store on one address? i never know when to split data between multiple addresses with different suffix or to store all the data in one address.
in the track and trade example i see that data is split after an array of 256 entries is full, not sure if this should be used as guideline
zac (Sun, 07 Jan 2018 23:08:58 GMT):
There are a couple of things to consider when deciding how to store your data
zac (Sun, 07 Jan 2018 23:09:32 GMT):
The main upside to putting everything at one address is that it simplifies look up
zac (Sun, 07 Jan 2018 23:09:37 GMT):
But there are some downsides
zac (Sun, 07 Jan 2018 23:10:00 GMT):
One is you now need to read/write a lot of data anytime you want to make a modification
zac (Sun, 07 Jan 2018 23:10:23 GMT):
Say you've got an array with 100 items, and you want to add one
zac (Sun, 07 Jan 2018 23:11:01 GMT):
If it's at one address, you have to read the whole array, make it an array of 101 items, and then write the whole thing back to the address
zac (Sun, 07 Jan 2018 23:11:33 GMT):
If the array is split into multiple addresses, you can ignore most of it
zac (Sun, 07 Jan 2018 23:11:45 GMT):
The other consideration is parallelism
zac (Sun, 07 Jan 2018 23:11:45 GMT):
The other downside is parallelism
zac (Sun, 07 Jan 2018 23:13:23 GMT):
If multiple transactions are trying to write to the same address, they cannot be executed in parallel, they must be done sequentially
zac (Sun, 07 Jan 2018 23:15:06 GMT):
If you have data that is going to change frequently, you could see a substantial performance increase by ensuring it is stored in separate addresses without collisions
zac (Sun, 07 Jan 2018 23:18:03 GMT):
Anyway, I don't think there is definitively correct answer to that question yet. In Track and Trade (now called Sawtooth Supply Chain), the Records are highly split up. In Sawtooth Marketplace there wasn't as much opportunity to do that, and it's just one resource per address.
nishantbhatnagar (Mon, 08 Jan 2018 04:58:08 GMT):
Has joined the channel.
nishantbhatnagar (Mon, 08 Jan 2018 04:59:47 GMT):
Hello Gents. I am brand new to Hyperledger and Blockchain in general. I am facing some difficulties in the installing the sawtooth framework on my system. Is this the right thread to post for such a query?
akuma921 (Mon, 08 Jan 2018 05:40:50 GMT):
guys need help in connecting multiple peers on different machine on a sawtooth network
yoni (Mon, 08 Jan 2018 06:43:28 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=DmWN4s2YhSKtx8XHk) @zac thanks
Johnjam (Mon, 08 Jan 2018 07:09:49 GMT):
Hi everyone, I'm following the "Using sawtooth with the SGX Implementation of PoET" and when I attempt to create a poet_genesis.batch, I got this error :
File "/usr/lib/python3/dist-packages/sawtooth_poet_sgx/poet_enclave_sgx/poet_enclave.py", line 567, in _check_verification_report
public_key.verify(
AttributeError: '_RSAPublicKey' object has no attribute 'verify'
I already have an Intel SPID with a certificate generated with their tutorial (https://software.intel.com/en-us/articles/how-to-create-self-signed-certificates-for-use-with-intel-sgx-remote-attestation-using) but, their last openssl call (verify precisely) give me an error. I think this verify function is related to my prob, no ?
I tried to run all their openssl cmd on a windows OS, same errors...
Johnjam (Mon, 08 Jan 2018 07:09:49 GMT):
Hi everyone, I'm following the "Using sawtooth with the SGX Implementation of PoET" and when I attempt to create a poet_genesis.batch, I got this error :
File "/usr/lib/python3/dist-packages/sawtooth_poet_sgx/poet_enclave_sgx/poet_enclave.py", line 567, in _check_verification_report
public_key.verify(
AttributeError: '_RSAPublicKey' object has no attribute 'verify'
I already have an Intel SPID with a certificate generated with their tutorial (https://software.intel.com/en-us/articles/how-to-create-self-signed-certificates-for-use-with-intel-sgx-remote-attestation-using) and I'm in Linked licence.
Johnjam (Mon, 08 Jan 2018 07:09:49 GMT):
Hi everyone, I'm following the "Using sawtooth with the SGX Implementation of PoET" and when I attempt to create a poet_genesis.batch, I got this error :
File "/usr/lib/python3/dist-packages/sawtooth_poet_sgx/poet_enclave_sgx/poet_enclave.py", line 567, in _check_verification_report
public_key.verify(
AttributeError: '_RSAPublicKey' object has no attribute 'verify'
I already have an Intel SPID with a certificate generated with their tutorial (https://software.intel.com/en-us/articles/how-to-create-self-signed-certificates-for-use-with-intel-sgx-remote-attestation-using) and I'm in Linkable licence.
shahdhruv 2 (Mon, 08 Jan 2018 10:42:57 GMT):
@akuma921 I also want to know same if any documentation or link is available to set cluster on multiple physical machines
denis1990 (Mon, 08 Jan 2018 15:11:46 GMT):
Hi all, can someone help with that error Endpoint has not completed authorization in 40 seconds ?
zac (Mon, 08 Jan 2018 17:32:22 GMT):
This is a fine place to post setup questions @nishantbhatnagar. What is it you are having trouble with?
Asettouf (Mon, 08 Jan 2018 17:53:47 GMT):
Hello, I would be interested in doing https://jira.hyperledger.org/browse/STL-238 and @adamludvik doesn't appear to be active on this one... Is it an issue if I start on it?
pschwarz (Mon, 08 Jan 2018 20:00:04 GMT):
That task is probably out-of-date, in terms of it's description. It should depend on https://jira.hyperledger.org/browse/STL-974
milapbhojak (Mon, 08 Jan 2018 20:31:08 GMT):
Has joined the channel.
Dan (Mon, 08 Jan 2018 21:35:35 GMT):
@rahulr92 you made reference to 127.0.0.1 that is your loopback address. i.e. it is not a public IP address. In your config file you will want to advertise your publicly routable IP address. Also check your port specifications and make sure they are consistent.
Dan (Mon, 08 Jan 2018 21:55:00 GMT):
@akuma921 @shahdhruv 2 Short version: create a genesis block on one validator and then update 2 lines in the other validators config files {1. endpoint: advertise the IP:Port of that machine and 2. seeds: URL of node with the genesis block.
You can look at the docker compose scripts that we use for integration testing. This script spins up a few validator nodes, each with its own configuration. https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_poet_liveness.yaml
That compose file is meant to be launched by a test tool (bin/run_docker_test) that sets environment variables. Don't try to run docker-compose on it directly.
The scripts use these config files.
https://github.com/hyperledger/sawtooth-core/tree/master/integration/sawtooth_integration/tests/poet_liveness_data
If you compare those config files you'll see the only things that are the two settings I mentioned above.
```$ diff validator-0.toml validator-1.toml
41c41
< endpoint = "tcp://validator-0:8800"
---
> endpoint = "tcp://validator-1:8800"
46c46
< seeds = []
---
> seeds = ["tcp://validator-0:8800"]
```
Dan (Mon, 08 Jan 2018 22:00:10 GMT):
Note you must advertise a routable hostname or IP. If you have a LAN that all the machines are directly connected to that's pretty easy (e.g. 10.0.0.1, 10.0.0.2 or however you've set up your lan.) If you are on amazon or some other environment you need to make sure you have routable IP addresses between those machines. If you are connecting between multiple companies you need to make sure the firewalls allow the IP and Ports you have selected. If you are running multiple docker containers on a single machine follow the patterns in the compose file above.
Dan (Mon, 08 Jan 2018 22:06:52 GMT):
@yoni @zac good conversation on data design. you could just about paste that into a HL blog post with no additional writing and probably provide some good guidance to people of the future :robot: . :)
zac (Mon, 08 Jan 2018 22:07:33 GMT):
Not a bad idea
zac (Mon, 08 Jan 2018 22:07:45 GMT):
How does one paste a thing into an HL blog post?
zac (Mon, 08 Jan 2018 22:07:53 GMT):
I didn't even know there was a Hyperledger blog
drozd (Mon, 08 Jan 2018 23:42:06 GMT):
*Proposal for new `/status` REST API endpoint*
_Proposal_
Add a new `/status` endpoint to the Sawtooth REST API. This endpoint
will return a JSON object containing the validator's public network
endpoint (i.e., the address specified with the validator's
`--endpoint` CLI argument):
```
{
"endpoint":
drozd (Mon, 08 Jan 2018 23:42:52 GMT):
@Dan @pschwarz @amundson @zac @grkvlt
akaum (Mon, 08 Jan 2018 23:46:09 GMT):
Has joined the channel.
shanb (Tue, 09 Jan 2018 00:04:58 GMT):
Hi, I facing exception "java.net.ProtocolException: Unexpected status line" every 2nd call to API /batches or /state. Anybody facing same issue.
rahulr92 (Tue, 09 Jan 2018 00:10:47 GMT):
@Dan Thanks. I tried changing the advertised network to use the public IP address. However I am still getting "Endpoint has not completed authorization in XX seconds".
The bind attribute should still use localhost (127.0.0.1) right?
bind = [
"network:tcp://127.0.0.1:8800",
"component:tcp://127.0.0.1:4004"
]
Dan (Tue, 09 Jan 2018 00:30:01 GMT):
I can't find where we have this in the docs so either this is poorly document or it moved. :(
Bind is setting up listeners for those two capabilities.
`network` for us means the peer-to-peer network. That needs to listen on a network interface that can talk outside the machine.
`component` means one of the helper processes that will attach to the validator locally, like a Transaction Processor or the Rest API.
Dan (Tue, 09 Jan 2018 00:32:13 GMT):
On a physical node I'm running right now I use my wireless NIC for the network bind and the loopback for the components:
```bind = [
"network:tcp://wlp1s0:8800",
"component:tcp://127.0.0.1:4004"
]
```
Dan (Tue, 09 Jan 2018 00:37:01 GMT):
This node sits behind a firewall and NAT'ing so in the endpoint I have the public IP address of this network. On the firewall I've configured port mapping to send inbound traffic at that public IP and port to the internal IP and port of this particular node. (Note you don't have to do that kind of port mapping if you are just setting up a vlan on some cloud hosting or something like that and all the nodes can see each other).
Dan (Tue, 09 Jan 2018 00:39:50 GMT):
@drozd could you copy that proposal to the mail list?
rahulr92 (Tue, 09 Jan 2018 00:48:37 GMT):
@Dan Thank you so much. I made that change and also switched from Public IP to the Private IP in AWS. Now my validators are able to talk and are in sync! :)
rahulr92 (Tue, 09 Jan 2018 00:56:27 GMT):
I believe the issue was that my ec2 instances where inside a VPC and hence needed to be accessed through their private IPs.
lightning18 (Tue, 09 Jan 2018 02:39:43 GMT):
Has joined the channel.
zac (Tue, 09 Jan 2018 02:45:14 GMT):
@drozd @Dan Any reason not to combine `/status` with `/peers` into one endpoint that provides some config info for the validator?
zac (Tue, 09 Jan 2018 02:45:50 GMT):
Also, to avoid confusion with `/batch_statuses` I would prefer to call this endpoint `/info` or something similar (which is more accurate anyway)
zac (Tue, 09 Jan 2018 02:45:50 GMT):
Also, to avoid confusion with `/batch_statuses` I would prefer to call this endpoint `/info` or something similar (which seems more accurate to me anyway)
zac (Tue, 09 Jan 2018 02:47:16 GMT):
It's also not unheard of to have a root `/` route that provides some info. Typically that is more focused on API usage though (available routes for example), so I'm not sure it works exactly for this usage.
amundson (Tue, 09 Jan 2018 03:19:12 GMT):
@zac /peers should have gone into /status, IMO, but we shouldn't remove endpoints now. we could still have /status contains peers though to avoid two calls. /status is accurate, as we want error conditions/states reported there eventually; /info and / aren't great alternatives.
zac (Tue, 09 Jan 2018 03:47:43 GMT):
leaving `/peers` for backward compatibility is reasonable
zac (Tue, 09 Jan 2018 03:48:05 GMT):
`/status` would not be my choice for errors + peers + endpoint either
zac (Tue, 09 Jan 2018 03:48:17 GMT):
that still seems like `/info` to me
zac (Tue, 09 Jan 2018 03:48:43 GMT):
but ¯\__(ツ)__/¯
alexandra_g (Tue, 09 Jan 2018 05:48:56 GMT):
Hi All, I had a quick question regarding in the case that a batch was rejected due to an invalid transaction. What happens with the other valid transactions? Is there documentation or explanation of how those transactions are repackaged into another batch and sent to validator? Thank you in advance!
yoni (Tue, 09 Jan 2018 06:46:07 GMT):
"All transactions within a batch are committed to state together or not at all", the transactions won't be repackaged unless you do so explicitly.
i usually just put one transaction in each batch unless there is dependency between them
yoni (Tue, 09 Jan 2018 06:49:22 GMT):
followed this documentation for when to use more than one transaction in a batch - https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc6/architecture/transactions_and_batches.html#why-batches
Jayc2 (Tue, 09 Jan 2018 08:40:16 GMT):
Has joined the channel.
OlliKasari (Tue, 09 Jan 2018 12:44:11 GMT):
Has joined the channel.
OlliKasari (Tue, 09 Jan 2018 12:44:51 GMT):
Hi! How easy/complicated is it in Sawtooth to expand peer network with additional nodes?
Johnjam (Tue, 09 Jan 2018 14:25:39 GMT):
Hi everyone, I still got this error in parallel scheduler configuration when sending batches via the rest_api :
[2018-01-09 15:18:30.460 ERROR future] An unhandled error occurred while running future callback
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_validator/networking/future.py", line 79, in run_callback
self._callback_func(self._request, self._result)
File "/usr/lib/python3/dist-packages/sawtooth_validator/execution/executor.py", line 132, in _future_done_callback
data=data)
File "/usr/lib/python3/dist-packages/sawtooth_validator/execution/scheduler_parallel.py", line 652, in set_transaction_execution_result
self._set_least_batch_id(txn_signature=txn_signature)
File "/usr/lib/python3/dist-packages/sawtooth_validator/execution/scheduler_parallel.py", line 616, in _set_least_batch_id
batch = self._batches_by_txn_id[txn_signature]
KeyError: 'ff94f2fed5f2a19397f0a5c63c05d3c15bc6496c7310bf9296afaf3be05fc6d45d5d9393215cebdf5bbcd982eccf74d85a91d2f4127d8f807115c6ca46eb70d2'
Is this an error I could avoid ? Thanks
zac (Tue, 09 Jan 2018 16:00:36 GMT):
@alexandra_g A batch is the atomic unit of change in Sawtooth. Meaning that either the entire batch is committed, or _none_ of the batch is committed. In many blockchains the transaction is the atomic unit of change, but what if you have some transactions that you only want to be dependent on others? That batch gives us a mechanism to enforce that inter-transaction dependency.
zac (Tue, 09 Jan 2018 16:00:36 GMT):
@alexandra_g A batch is the atomic unit of change in Sawtooth. Meaning that either the entire batch is committed, or _none_ of the batch is committed. In many blockchains the transaction is the atomic unit of change, but what if you want to have some transactions be dependent on others? The batch gives us a mechanism to enforce that inter-transaction dependency.
zac (Tue, 09 Jan 2018 16:01:32 GMT):
So, in answer to your question, those other transactions are thrown out. They would have to be resubmitted in a new batch.
zac (Tue, 09 Jan 2018 16:02:26 GMT):
However, there is no reason you can't submit multiple batches with just transaction in each. So if you have transactions that _aren't_ dependent on each other, you should just split them off into their own batches.
zac (Tue, 09 Jan 2018 16:02:26 GMT):
However, there is no reason you can't submit multiple batches with just one transaction in each. So if you have transactions that _aren't_ dependent on each other, you should just split them off into their own batches.
zac (Tue, 09 Jan 2018 16:04:33 GMT):
For further reading, the link provided by @yoni is a good one.
aiur (Tue, 09 Jan 2018 18:28:42 GMT):
Has joined the channel.
aiur (Tue, 09 Jan 2018 18:29:38 GMT):
Hi all, is sawtooth the right tools for create a private blockchain to store information?
cchalc (Tue, 09 Jan 2018 20:46:13 GMT):
Has joined the channel.
zac (Tue, 09 Jan 2018 21:33:22 GMT):
define "private blockchain"
zac (Tue, 09 Jan 2018 21:33:51 GMT):
the answer is either "yes", or "that is a nonsense thing you just said"
alexandra_g (Tue, 09 Jan 2018 21:55:33 GMT):
thanks @zac, super helpful answer! Just to address the efficiency with batching, doesn't having single tx per batch less efficient or is it thought that use cases using Sawtooth would have transactions dependent on one another making batching an attractive feature?
zac (Tue, 09 Jan 2018 21:58:22 GMT):
Well, you can submit multiple Batches in one HTTP or ZMQ submission. So it's a question of sending 1 submission, with 10 batches, with 1 transaction per batch, or sending 1 submission with 1 batch, with 10 transactions.
zac (Tue, 09 Jan 2018 21:58:37 GMT):
I don't know of any reason why one would be more or less efficient than the other.
amundson (Tue, 09 Jan 2018 22:04:14 GMT):
It is more efficient to bundle multiple transactions into a batch. However, you shouldn't necessarily do this artificially; you should do it because it makes sense from an application perspective that they be atomic. In integration use cases, if you are bundling high counts of transactions-per-batch (100+), you would likely see a substantial throughput increase in transactions-per-second; but you have to be able to then handle what happens if one of the transactions fail, which is rather complex from a client perspective.
zac (Tue, 09 Jan 2018 22:15:22 GMT):
Is there a simple explanation for why 100 transactions in one batch would be processed faster than those same transactions in 100 batches? Or is there no way to explain it without going in-depth into the underlying architecture?
zac (Tue, 09 Jan 2018 23:06:23 GMT):
in which case I would be satisfied with the explanation: _"because"_
zac (Tue, 09 Jan 2018 23:06:23 GMT):
in which case I would be satisfied with the explanation: _"Because."_
KevinTorkelson (Wed, 10 Jan 2018 02:02:46 GMT):
Has joined the channel.
OlliKasari (Wed, 10 Jan 2018 08:18:19 GMT):
I'm getting server error when creating assets at https://mktplace.sawtooth.me demo
matrisis (Wed, 10 Jan 2018 12:56:48 GMT):
Has left the channel.
aiur (Wed, 10 Jan 2018 13:07:07 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=EdG6vuifdXyCdLWCK) @zac Thanks you for your answer. I want to store data in some nodes, but data are not publically acessible outside of nodes itself.
davod (Wed, 10 Jan 2018 13:15:54 GMT):
Has joined the channel.
davod (Wed, 10 Jan 2018 13:41:42 GMT):
Hi all, I'm wondering about the scalability limit. I tried with 10000 intkey transactions (set new entries in the state) and the total folder size of /var/lib/sawtooth is approximately 128 MiB. Is there a way to compress the BlockStore database or save less information ?
skbehera85 (Wed, 10 Jan 2018 14:25:18 GMT):
HI, I am trying to connect 2 validators on 2 different servers, its not connecting. I have attached my validators below. please let me know if am wrong:-
validator-1:
image: hyperledger/sawtooth-validator:1.0
container_name: sawtooth-validator-1-default
expose:
- 4004
ports:
- "4004:4004"
# start the validator-1 with an empty genesis batch
entrypoint: "bash -c \"\
sawadm keygen && \
sawtooth keygen my_key && \
sawset genesis -k /root/.sawtooth/keys/my_key.priv && \
sawadm genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator-1:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800
\""
skbehera85 (Wed, 10 Jan 2018 14:25:18 GMT):
HI, I am trying to connect 2 validators on 2 different servers, its not connecting. I have attached my validators below. please let me know if am wrong:-
validator-1:
image: hyperledger/sawtooth-validator:1.0
container_name: sawtooth-validator-1-default
expose:
- 4004
ports:
- "4004:4004"
# start the validator-1 with an empty genesis batch
entrypoint: "bash -c \"\
sawadm keygen && \
sawtooth keygen my_key && \
sawset genesis -k /root/.sawtooth/keys/my_key.priv && \
sawadm genesis config-genesis.batch && \
sawtooth-validator -vv \
--endpoint tcp://validator-1:8800 \
--bind component:tcp://eth0:4004 \
--bind network:tcp://eth0:8800
\""
in another yaml :-
validator-2:
image: hyperledger/sawtooth-validator:1.0
container_name: sawtooth-validator-2-default
expose:
- 4005
ports:
- "4005:4005"
# start the validator with an empty genesis batch
entrypoint: "bash -c \"\
sawadm keygen && \
sawtooth keygen my_key && \
sawtooth-validator -vv \
--endpoint tcp://validator-2:8800 \
--bind component:tcp://eth0:4005 \
--bind network:tcp://eth0:8800 \
--peers tcp://ip - validator - 1:8800
\""
zac (Wed, 10 Jan 2018 15:37:57 GMT):
@aiur Why not just use a database?
aiur (Wed, 10 Jan 2018 15:40:42 GMT):
Because I want to have a distributed system
aiur (Wed, 10 Jan 2018 15:40:53 GMT):
To have better security
aiur (Wed, 10 Jan 2018 15:41:00 GMT):
is that wrong?
zac (Wed, 10 Jan 2018 15:45:48 GMT):
In short: probably yes.
zac (Wed, 10 Jan 2018 15:46:16 GMT):
I feel like we're just tossing around buzzwords a bit: "distributed", "security"
zac (Wed, 10 Jan 2018 15:46:53 GMT):
Let's get specific a bit:
zac (Wed, 10 Jan 2018 15:48:07 GMT):
Blockchains have a fairly specific use, which is enforcing trust between parties who don't trust each other but need to agree on some data. Bitcoin is the most visible example. Everyone has a copy of everyone else's bitcoin transactions, and it is very easy to verify whether or not a new copy is valid.
zac (Wed, 10 Jan 2018 15:48:25 GMT):
This means everyone can check everyone else's work, and throw out anyone trying to fudge the data.
zac (Wed, 10 Jan 2018 15:49:14 GMT):
But say instead of bitcoin, you are storing your personal data, and instead of "everyone" having it, it's just you.
zac (Wed, 10 Jan 2018 15:50:26 GMT):
You've layered on a ton of boilerplate and work for your CPU that is going into making sure you haven't tried to commit fraud on yourself.
zac (Wed, 10 Jan 2018 15:51:04 GMT):
You could distribute it by making backups. And you could secure it by encrypting it.
zac (Wed, 10 Jan 2018 15:51:30 GMT):
I'm not sure what else a blockchain would do for you in this use case.
zac (Wed, 10 Jan 2018 15:51:37 GMT):
Unless you had something else in mind?
aiur (Wed, 10 Jan 2018 15:53:04 GMT):
I don't want to trust my own infrastructure, So if someone hack one of my server I can reject data tampering. I could do the same using mongodb, but with more work, imho
zac (Wed, 10 Jan 2018 15:54:14 GMT):
I still think some sort of encryption scheme is probably the better approach if you are worried about being hacked.
zac (Wed, 10 Jan 2018 15:54:52 GMT):
Or you could store hashes of the data or something to check whether or not it's been modified.
zac (Wed, 10 Jan 2018 15:55:10 GMT):
There are probably really robust solutions out there specifically for this.
zac (Wed, 10 Jan 2018 15:55:33 GMT):
That said, if you are determined to use Sawtooth to store private data, yes you absolutely could do it.
zac (Wed, 10 Jan 2018 15:56:02 GMT):
It's a general-purpose platform though, so you'd have to do a fair amount of setup.
zac (Wed, 10 Jan 2018 15:56:18 GMT):
Build your own data storage app essentially.
aiur (Wed, 10 Jan 2018 15:58:53 GMT):
Another point is the ability to run smart contract.
aiur (Wed, 10 Jan 2018 15:59:05 GMT):
Should I start with fabric or sawtooth?
aiur (Wed, 10 Jan 2018 15:59:29 GMT):
Thanks for your help, I'll reflect about
zac (Wed, 10 Jan 2018 15:59:40 GMT):
Well, keep in mind a "smart contract" is just "run this code when this condition happens"
zac (Wed, 10 Jan 2018 15:59:48 GMT):
You still have to right all that code
zac (Wed, 10 Jan 2018 16:00:13 GMT):
You could write MongoDB hooks that do the same thing.
zac (Wed, 10 Jan 2018 16:00:45 GMT):
I would start with Sawtooth
zac (Wed, 10 Jan 2018 16:00:53 GMT):
I'm a maintainer though so I'm biased
zac (Wed, 10 Jan 2018 16:03:10 GMT):
With Sawtooth you get a highly modular, data agnostic, platform that is entirely customizable, support for development in a wide variety of languages, and the PoET consensus mechanism (though for your use, the consensus mechanism is probably trivial)
zac (Wed, 10 Jan 2018 16:04:42 GMT):
I have heard others say that it is easier to develop for Sawtooth. Our REST API and multiple SDKs provide a lot of support.
zac (Wed, 10 Jan 2018 16:04:42 GMT):
I have heard others say that it is easier to develop for Sawtooth. Our REST API and multiple SDKs provide a lot of support, and I would argue the architecture is easier to work with in general.
zac (Wed, 10 Jan 2018 16:06:40 GMT):
But Fabric does have some nifty tools available like Composer. Maybe there is already a "store my data" app built by someone? I'd had over to #fabric and see what they think.
aiur (Wed, 10 Jan 2018 16:09:41 GMT):
Thanks you a lot :)
zac (Wed, 10 Jan 2018 16:12:26 GMT):
Of course
sealthedeal (Wed, 10 Jan 2018 16:21:58 GMT):
Has joined the channel.
sealthedeal (Wed, 10 Jan 2018 16:22:16 GMT):
Hey, I've been deeply interested in Hyperledger Sawtooth lately, but when I was recently asked to explain Proof of Elapsed Time, I wasn't able to explain in detail how it scales comparably to PoW. I've tried to youtube it, but there's little to no resources I've been able to locate that expand on the subject other than "Pluggable election strategy set to a permissioned, voting-based strategy by default that scales well and it byzantine fault tolerant. However, finality may be delayed due to forks that must be resolved."
amundson (Wed, 10 Jan 2018 16:36:33 GMT):
@sealthedeal - have you seen this?
https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/poet.html
sealthedeal (Wed, 10 Jan 2018 17:26:25 GMT):
@amundson reading over it now. Thank you.
Dan (Wed, 10 Jan 2018 17:49:44 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=ge6L2hq9rqDtfuzdp) @zac I think there's 99 extra signature verifications if its 1:1. Probably some minor network overhead and internal object management too. Mostly though I think its the signature verifications.
zac (Wed, 10 Jan 2018 18:37:58 GMT):
Ah yes. That makes sense. Damn signatures.
amundson (Wed, 10 Jan 2018 18:43:53 GMT):
no, it's not signatures, it's more about the network traffic and internal indexing
amundson (Wed, 10 Jan 2018 18:44:08 GMT):
it _used_ to be signatures, but I think it's not anymore
Asettouf (Wed, 10 Jan 2018 21:09:28 GMT):
@zac Regarding the 100 transactions, I guess it's kind of the same as for any network transaction, HTTP for example adds metadata to one request, so if you upload 100 files, you get a 100 headers generated, if you submit one archive with the 100 files, you have only one header, thus reducing the network overhead. Given that most transactions, AFAIK comes with metadata (for instance the length of the bytes stream) I would imagine that any transaction made with as less requests as possible would be faster
Dan (Wed, 10 Jan 2018 21:10:03 GMT):
Speaking of signatures... a python library we've been using for wif support is being EOL. I'd like to drop support for storing private keys in WIF format. If you are using WIF and can't / don't want to change to HEX please speak up.
zac (Wed, 10 Jan 2018 21:22:14 GMT):
@amundson So for peer-to-peer ZMQ communication those 100 batches would be sent out separately? Not in a single message like when they were submitted?
SevanBoyajian (Wed, 10 Jan 2018 23:54:44 GMT):
Has joined the channel.
rajivgandhi2010 (Thu, 11 Jan 2018 10:34:18 GMT):
Has joined the channel.
rajivgandhi2010 (Thu, 11 Jan 2018 10:34:36 GMT):
Hello All
rajivgandhi2010 (Thu, 11 Jan 2018 10:34:43 GMT):
Am new to Sawtooth
rajivgandhi2010 (Thu, 11 Jan 2018 10:35:18 GMT):
anyone help me to create sample application using sawtooth?
rajivgandhi2010 (Thu, 11 Jan 2018 10:36:10 GMT):
I tried one tutorial
rajivgandhi2010 (Thu, 11 Jan 2018 10:36:30 GMT):
but, dont know how to write an application
rajivgandhi2010 (Thu, 11 Jan 2018 10:36:37 GMT):
pls help me on this
Dan (Thu, 11 Jan 2018 14:23:22 GMT):
which tutorial did you try?
mfford (Thu, 11 Jan 2018 14:26:57 GMT):
User User_1 added by mfford.
ricardor (Thu, 11 Jan 2018 14:48:06 GMT):
Has joined the channel.
ricardor (Thu, 11 Jan 2018 14:51:21 GMT):
Hi everyone it's great to be here, I'm searching information about how Sawtooth implement the data privacy, can help me? I need check first in high level, but I need evaluate later in low level
Dan (Thu, 11 Jan 2018 15:28:03 GMT):
You can address privacy in a few ways. You can spawn separate networks. You can encrypt payloads (but this restricts transaction verification, i.e. you commit receipts you don't verify state transitions), finally we have a few research projects in progress using trusted execution and/or ZK approaches.
JeremyMet (Thu, 11 Jan 2018 15:45:50 GMT):
Has joined the channel.
ricardor (Thu, 11 Jan 2018 15:53:08 GMT):
Hi @Dan thank you for answer. Yes one of the more attractive feature is the implementation of NIZK, can you give me more some links where I can see this?
ricardor (Thu, 11 Jan 2018 15:54:16 GMT):
My main uneasiness is choice a blockchain platform where:
The provenance of the asset cannot move (or moving the asset to another domain becomes a complex task) to another domains of the original domain where the asset was created.
Reveal data unnecessarily to prove the provenience or property of the asset
ricardor (Thu, 11 Jan 2018 15:59:01 GMT):
.............. for example if I use separate networks how I move the provenance of the asset to other networks, Today #fabric is working to solve this issue, please tell me this does not happen here, please:wink:
ricardor (Thu, 11 Jan 2018 15:59:01 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jsi9mLqo7f4RwPK3H) @jamiel Hi, I was chating with @Dan not is possible reach this granularity of privacy, in fact neither hyperledger can't do it, all data is visible for all participants in the network, in words of @Dan is neccesary " adopt blockchain where all participants have a business need to read and modify the same data under adversarial constraints."
JeremyMet (Thu, 11 Jan 2018 16:16:45 GMT):
hello people, I've been wondering how to "load" the validator.toml file when launching the validator ?
JeremyMet (Thu, 11 Jan 2018 16:17:06 GMT):
what flag should I use ? Or which line of the .yaml file should I edit ?
JeremyMet (Thu, 11 Jan 2018 16:17:06 GMT):
what flag should I use ? Or which line of the .yaml file (sawtooth-default.yaml) should I edit ?
JeremyMet (Thu, 11 Jan 2018 16:18:36 GMT):
Thank you :)
islandDeveloper242 (Thu, 11 Jan 2018 17:38:19 GMT):
Has joined the channel.
Asettouf (Thu, 11 Jan 2018 18:18:26 GMT):
Regarding PRs, is there a specific action on my side to be "whitelisted" (didn't see anything in the doc), or is it on your side to approve?
Dan (Thu, 11 Jan 2018 20:34:59 GMT):
@ricardor it's still research phase on the zk stuff, so unfortunately no links to share yet.
I agree with your unease on fragile methods. My guidance is to adopt blockchain where all participants have a business need to read and modify the same data under adversarial constraints.
ricardor (Thu, 11 Jan 2018 20:38:03 GMT):
thanks @Dan
jingman (Thu, 11 Jan 2018 22:11:37 GMT):
Has joined the channel.
jingman (Thu, 11 Jan 2018 22:12:40 GMT):
Hey all! I'm trying to go through the Sawtooth docs and I'm stuck on creating the genesis block
jingman (Thu, 11 Jan 2018 22:13:46 GMT):
I make the block just fine but then when I try to use it, I get ...
jingman (Thu, 11 Jan 2018 22:13:48 GMT):
```
jingman (Thu, 11 Jan 2018 22:13:48 GMT):
```sudo -u sawtooth sawtooth admin genesis config-genesis.batch
Processing config-genesis.batch...
Error: Unable to read config-genesis.batch```
jingman (Thu, 11 Jan 2018 22:14:26 GMT):
I have this issue with both the latest nightly and the latest stable 0.8 build
jingman (Thu, 11 Jan 2018 22:14:42 GMT):
I installed sawtooth using apt-get
jingman (Thu, 11 Jan 2018 22:18:45 GMT):
on a 2gb digital ocean droplet
jingman (Thu, 11 Jan 2018 22:26:55 GMT):
ah, the `sudo -u sawtooth` was tripping it up
rberg2 (Thu, 11 Jan 2018 22:29:12 GMT):
I have seen that before when "sawset genesis" was run as root and created config-genesis.batch in a path the sawtooth user could not read
rberg2 (Thu, 11 Jan 2018 22:29:35 GMT):
that path being /root
rberg2 (Thu, 11 Jan 2018 22:32:04 GMT):
for the 0.8 instructions that would be the "sawtooth config genesis" command
AdamParker (Thu, 11 Jan 2018 22:38:17 GMT):
Has joined the channel.
AdamParker (Thu, 11 Jan 2018 22:39:47 GMT):
If a custom batch has been pending for several minutes but the xo example works immediately at the same time, what should I check?
AdamParker (Thu, 11 Jan 2018 22:40:38 GMT):
My test code is basically my interpretation of the Python example code in the wiki.
zac (Thu, 11 Jan 2018 23:53:36 GMT):
Is your custom batch xo, or is it from a different transaction family?
zac (Thu, 11 Jan 2018 23:54:06 GMT):
If it's a different family, it would be good to make sure the transaction processor for that family has registered with the validator properly.
AdamParker (Fri, 12 Jan 2018 04:10:23 GMT):
Oh, that makes some sense. So when you create a new type of ledger you have to write a validator or else it never comes out of pending.
AdamParker (Fri, 12 Jan 2018 04:12:31 GMT):
That's less magical than what I was expecting. lol
AdamParker (Fri, 12 Jan 2018 04:12:31 GMT):
That's less magical than what I was expecting. lol So this is the spot to make sure people are playing nice with the stuff they're putting in the chain.
jingman (Fri, 12 Jan 2018 04:54:12 GMT):
I'm trying to add a on-chain identity policy, but I don't seem to have an identity transaction processor. I tried running `identity-ts` but came up empty.
jingman (Fri, 12 Jan 2018 04:56:07 GMT):
I'm following the transactor permissioning instructions for 0.8.13
jamiel (Fri, 12 Jan 2018 05:10:12 GMT):
Has joined the channel.
jamiel (Fri, 12 Jan 2018 05:11:53 GMT):
Does sawtooth support data privacy on the chain like quorum? For example party A provides party B valuable information as per a smart contract but that information contains NPI, can that NPI data be made private to only A and B?
rajivgandhi2010 (Fri, 12 Jan 2018 05:17:52 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=ZGP2c62bva6dfq7qu) @Dan https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS171x+3T2017/courseware/9faeeb6df17c4d25a205c965473925e5/016a2cd813884e32a0c3056c472d39b1/?activate_block_id=block-v1%3ALinuxFoundationX%2BLFS171x%2B3T2017%2Btype%40sequential%2Bblock%40016a2cd813884e32a0c3056c472d39b1
rajivgandhi2010 (Fri, 12 Jan 2018 05:18:05 GMT):
i tried this tutorial
jingman (Fri, 12 Jan 2018 05:31:06 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=HvKB9ro9JoQGW9cC4) For some reason the `python3-sawtooth-identity` package did not install as part of the `apt-get install sawtooth`. Adding it manually worked.
JeremyMet (Fri, 12 Jan 2018 09:21:00 GMT):
Hello again,
Is this possible run several validators on a single machine without using VM ? Thx !! ;)
JeremyMet (Fri, 12 Jan 2018 09:21:00 GMT):
Hello again,
Is this possible run several validators on a single machine without using VM ? Thx !! ;)
PS : Does SAWTOOTH_HOME set up have any effect ?
JeremyMet (Fri, 12 Jan 2018 09:21:00 GMT):
Hello again,
Is this possible run several validators on a single machine without using VM ? Thx !! ;)
PS : Does SAWTOOTH_HOME set up have any effect ?
Is there really enough on https://sawtooth.hyperledger.org/docs/core/releases/latest/contents.html to master what needs to be mastered ? Trying to add my own transaction family, it is not really clear :-/
JeremyMet (Fri, 12 Jan 2018 09:21:00 GMT):
Hello again,
Is this possible run several validators on a single machine without using VM ? Thx !! ;)
PS : Does SAWTOOTH_HOME set up have any effect ?
Is there really enough on https://sawtooth.hyperledger.org/docs/core/releases/latest/contents.html to master what needs to be mastered ? Trying to add my own transaction family, it is not really clear :-/
Is there any better tutorial than the one given in Edx ?
davod (Fri, 12 Jan 2018 10:11:10 GMT):
Hi again, in this article https://www.altoros.com/blog/hyperledgers-sawtooth-lake-aims-at-a-thousand-transactions-per-second/ it says sawtooth can handle approximately 1000 transaction under a second. How about the database size with this rate for a month for example ? Like I said in a previous post, I tested with 10k intkey transactions, and my /var/lib/sawtooth folder is approximately 130MB. Is there a way to compress the blockstore db or something ? Thank you
davod (Fri, 12 Jan 2018 10:11:10 GMT):
Hi again, in this article https://www.altoros.com/blog/hyperledgers-sawtooth-lake-aims-at-a-thousand-transactions-per-second/ it says sawtooth can handle approximately 1000 transaction under a second. How about the database size with this rate for a month for example ? Like I said in a previous post, I tested with 10k intkey transactions, and my /var/lib/sawtooth folder is approximately 130MB. Is there a way to compress the blockstore db or something ? Thank you
davod (Fri, 12 Jan 2018 10:11:10 GMT):
Hi again, in this article https://www.altoros.com/blog/hyperledgers-sawtooth-lake-aims-at-a-thousand-transactions-per-second/ it says sawtooth can handle approximately 1000 transaction under a second. How about the database size with this rate for a month for example ? Like I said in a previous post, I tested with 10k intkey transactions, and my /var/lib/sawtooth folder is approximately 130MB. Is there a way to compress the blockstore db or something ? Thank you
PS: When I try to delete some state entries, the merkle-00.lmdb doesn't get smaller, is it on purpose ?
zac (Fri, 12 Jan 2018 13:52:46 GMT):
@AdamParker Yes. No magic involved. To the validator your transaction payloads are entirely opaque. It just validates the signatures and headers are correct. The transaction processor is the component you would write which knows how to decode the transaction payload and turn that into state changes. This is a fundamental reason behind Sawtooth's modularity. Since the validator has no knowledge or opinion of your payload data, your payload data can be anything.
ricardor (Fri, 12 Jan 2018 14:32:38 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jsi9mLqo7f4RwPK3H) @jamiel Hi, I was chating with @Dan not is possible reach this granularity of privacy, in fact neither hyperledger can't do it, all data is visible for all participants in the network, in words of @Dan is neccesary " adopt blockchain where all participants have a business need to read and modify the same data under adversarial constraints."
alain2sf (Fri, 12 Jan 2018 14:51:10 GMT):
Has left the channel.
ricardor (Fri, 12 Jan 2018 15:25:45 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/validator_network.html#message-delivery
Network Permissioning
One of the permissioning requirements is that the validator network be able to limit the nodes that are able to connect to it. The permissioning rules determine the roles a connection is able to play on the network. The roles control the types of messages that can be sent and received over a given connection. The components and nodes that wish to take on these roles must participate in an authorization “handshake” and request the roles they want to take on. The entities acting in the different roles will be referred to as requesters below.
ricardor (Fri, 12 Jan 2018 15:25:45 GMT):
check this @jamiel https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/validator_network.html#message-delivery
Network Permissioning
One of the permissioning requirements is that the validator network be able to limit the nodes that are able to connect to it. The permissioning rules determine the roles a connection is able to play on the network. The roles control the types of messages that can be sent and received over a given connection. The components and nodes that wish to take on these roles must participate in an authorization “handshake” and request the roles they want to take on. The entities acting in the different roles will be referred to as requesters below.
AdamParker (Fri, 12 Jan 2018 16:09:12 GMT):
Looking at my code again I'm in the intkey/1.0 family. It looks like the TP for intkey is running and probably is if `intkey generate` does 800txns/sec+. So I've probably done something real wrong here.
AdamParker (Fri, 12 Jan 2018 16:28:50 GMT):
I can create a new chain successfully but leaving inputs/outputs empty but it stays on processing when I try to add a block to an existing chain. Sanity check: where do I get the value for inputs and outputs from?
AdamParker (Fri, 12 Jan 2018 16:28:50 GMT):
I can create a new chain successfully by leaving inputs/outputs empty but it stays on processing when I try to add a block to an existing chain. Sanity check: where do I get the value for inputs and outputs from?
AdamParker (Fri, 12 Jan 2018 16:28:50 GMT):
I can create a new chain successfully by leaving inputs/outputs empty but it stays on pending when I try to add a block to an existing chain. Sanity check: where do I get the value for inputs and outputs from?
bill.cawthra (Fri, 12 Jan 2018 16:55:34 GMT):
somewhat easy question for the gallery here...
what is the default port for the rest_api? Is it `8080` or `8008`?
bill.cawthra (Fri, 12 Jan 2018 16:57:08 GMT):
i see github references for `8008` and the docs reference `8080`
AdamParker (Fri, 12 Jan 2018 17:01:43 GMT):
8080
AdamParker (Fri, 12 Jan 2018 17:03:48 GMT):
Alright, I RTFM and I got it. States go in transactions not blocks. Thanks for the hints zac.
askmish (Fri, 12 Jan 2018 17:30:03 GMT):
For v0.8.x rest-api is at 8080
tommling (Fri, 12 Jan 2018 18:00:41 GMT):
Hi all, I have been developing a client for sawtooth that uses the new encoder/ batcher and I noticed that the intkey processor crashes with ```Error: byte indices must be integers or slices, not str```
tommling (Fri, 12 Jan 2018 18:02:35 GMT):
The error is not caught and the tp simply falls off
tommling (Fri, 12 Jan 2018 18:02:35 GMT):
going to post a pastebin with specifics
tommling (Fri, 12 Jan 2018 18:11:49 GMT):
``` txn = self.encoder.create(payload_bytes, inputs=[addr], outputs=[addr])```
tommling (Fri, 12 Jan 2018 18:12:53 GMT):
is the trouble line, checkout most of the system specs and code here: https://pastebin.com/uqAscgK5
tommling (Fri, 12 Jan 2018 18:14:18 GMT):
Also troublesome is that on restarting the processor, the message queue persisting the batch will crash the processor again. Cheers
tommling (Fri, 12 Jan 2018 18:21:15 GMT):
Update: it turns out I was encoding the payload twice. i.e., I specified an encoder in the encoder(...'encoder'=cbor2.dumps,....) but I was also encoding payload_bytes manually.
tommling (Fri, 12 Jan 2018 18:21:48 GMT):
Thought that I should report the uncaught crash / inability to recover from fuzz ^^
jamiel (Fri, 12 Jan 2018 21:10:30 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=wRfYCYNSZ49Z3tBcg) @ricardor But I can always encrypt the data stored in a smart contract?
ricardor (Fri, 12 Jan 2018 21:16:36 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=5WsoaQ2XiTxfGdFzW) @jamiel Hi, this week @Dan told me the same, look "You can encrypt payloads (but this restricts transaction verification, i.e. you commit receipts you don't verify state transitions)" . Really now I'm studying this deeply, if you are doing the same thing I am open to talk and I shared what I found ... for example https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/permissioning_requirement.html#transactor-key-permissioning and https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/permissioning_requirement.html#private-network
Dan (Fri, 12 Jan 2018 22:46:24 GMT):
Basically for any blockchain short of maybe zcash there's no real privacy solution. Either you transact off chain encrypt or hash something opaque to the blockchain, or you form just a small network with those who can see everything.
jamiel (Sat, 13 Jan 2018 00:50:24 GMT):
@ricardor Where are you based out of? I'm in NYC, if you are also let's meet up
ricardor (Sat, 13 Jan 2018 01:59:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=vqJqEZQWPenrDYefS) @Dan , really I've seen that there are two implementations on the horizon, first this startup chronicled.com says integrate zk-SNARKs into your blockchain solution, unfortunately it is not open source and they promise that for this 2018 they will get a commercial solution. I recomend this post https://www.coindesk.com/no-one-control-blockchain-supply-chain/ ........... and second the implementation of data privacy of corda r3 based on states , in this post Richard Gendal of R3 confronts in a very entertaining way the privacy implementation of fabric https://gendal.me/2017/07/20/what-slack-can-teach-us-about-privacy-in-enterprise -blockchains /
ricardor (Sat, 13 Jan 2018 02:03:31 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=2FZFzPLWDabSoW3Tg) @jamiel sounds very cool, but I'm based in south america (Santiago, Chile), but there are phones and emails in this beautiful technological era :smile:
jamiel (Sat, 13 Jan 2018 03:09:20 GMT):
@ricardor LOL, what is your Skype ID? Mine is jamielsheikh
PrakashJha (Sat, 13 Jan 2018 17:34:16 GMT):
Has joined the channel.
PrakashJha (Sat, 13 Jan 2018 17:35:46 GMT):
I am stuck at setup xo_java in aws sawtootth ami server . Can any one help me on this setup?
sunilvk (Sat, 13 Jan 2018 18:32:29 GMT):
Has joined the channel.
Dan (Sat, 13 Jan 2018 20:12:15 GMT):
@ricardor good point, I left out Corda. I like their solution too.
AdamParker (Sun, 14 Jan 2018 00:28:50 GMT):
Am I missing something or am I just going to have to manually install the headers for the cxx api? I got the static library to compile but make doesn't seem to know how to install. (0.8 btw)
PrakashJha (Sun, 14 Jan 2018 09:56:19 GMT):
any freelancer or expert in sawtooth that will help me, pls connect mw
nycycr (Mon, 15 Jan 2018 00:12:27 GMT):
Has joined the channel.
AdamParker (Mon, 15 Jan 2018 05:01:04 GMT):
Just by declaring a `sawtooth::TransactionProcessor` in C++ I get a lot of Undefined References for what appear to be classes (constructors and destructors), Message, Transaction, TransactionHeader, TpPingResponse, TpStateDeleteResponse, TpStateDeleteRequest... etc etc. Are these actual issues in compilation of the static lib or where I'm supposed to start development? Documentation for the cxx sdk seems lacking, am I wrong or is there someone I can bug?
In premake4 lau here's what I'm linking against:
```libdirs { "/home/adam/sawtooth-core/sdk/cxx/build/lib/" }
links { "proto", "sawtooth", "zmqpp", "zmq", "pthread", "log4cxx",
"protobuf", "cryptopp"}```
AdamParker (Mon, 15 Jan 2018 05:01:04 GMT):
Just by declaring a `sawtooth::TransactionProcessor` in C++ I get a lot of Undefined References for what appear to be classes (constructors and destructors), Message, Transaction, TransactionHeader, TpPingResponse, TpStateDeleteResponse, TpStateDeleteRequest... etc etc. Are these actual issues in compilation of the static lib or where I'm supposed to start development? Documentation for the cxx sdk seems lacking, am I wrong or is there someone I can bug?
In premake4 lau here's what I'm linking against:
```libdirs { "/home/adam/sawtooth-core/sdk/cxx/build/lib/" }links { "proto", "sawtooth", "zmqpp", "zmq", "pthread", "log4cxx",
"protobuf", "cryptopp"}```
AdamParker (Mon, 15 Jan 2018 05:01:04 GMT):
Just by declaring a `sawtooth::TransactionProcessor` in C++ I get a lot of Undefined References for what appear to be classes (constructors and destructors), Message, Transaction, TransactionHeader, TpPingResponse, TpStateDeleteResponse, TpStateDeleteRequest... etc etc. Are these actual issues in compilation of the static lib or where I'm supposed to start development? Documentation for the cxx sdk seems lacking, am I wrong or is there someone I can bug?
In premake4 lau here's what I'm linking against:
```libdirs { "/home/adam/sawtooth-core/sdk/cxx/build/lib/" }
links { "proto", "sawtooth", "zmqpp", "zmq", "pthread", "log4cxx",
"protobuf", "cryptopp"}```
tristanperalta (Mon, 15 Jan 2018 09:21:15 GMT):
hello, can someone help me how to setup sawtooth validator. What I already did is clone repo from github, then run `./bin/sawtooth-validator` and it returns an error
tristanperalta (Mon, 15 Jan 2018 09:22:16 GMT):
https://gist.github.com/tristanperalta/e9a3e914dfa3257dce64e7b1b010a6e6
amolk (Mon, 15 Jan 2018 09:56:01 GMT):
I'd recommend that you follow the documentation at: https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html.
pschwarz (Mon, 15 Jan 2018 15:30:00 GMT):
If you're running from source, you need to run `./bin/build_all -l python`
pschwarz (Mon, 15 Jan 2018 15:30:42 GMT):
There is a PR (#1298) that has documentation for running sawtooth from source
AdamParker (Mon, 15 Jan 2018 15:49:18 GMT):
What a weird turn of events. So I was on 16.04 at home and I got the CXX SDK to compile. Now that I'm at work on an AWS instance when I go to compile the SDK it complains:
`txn_receipt.proto:16:10: Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"`
AdamParker (Mon, 15 Jan 2018 15:50:28 GMT):
and I mean 16.04 ships with proto2 but I'm 80% sure my ubuntu machine at home is 16.04 so not sure what has gone awry here.
pschwarz (Mon, 15 Jan 2018 15:59:40 GMT):
How are you installing the protobuf compiler?
AdamParker (Mon, 15 Jan 2018 16:01:06 GMT):
aptitude
AdamParker (Mon, 15 Jan 2018 16:05:39 GMT):
This AWS image is somehow out of sync. I installed docker and did the compile the "normal" way. When I try to run intkey_cxx it complains about not finding librpotobuf.so.13, which is fair because aptitude reports libprotobuf12 being the current version.
AdamParker (Mon, 15 Jan 2018 16:09:19 GMT):
Ah, so libprotobuf12 installs libprotobuf.so.14. This is a mild nightmare.
amundson (Mon, 15 Jan 2018 16:45:36 GMT):
AFAIK, protoc on Ubuntu 16.04 does only support proto2. I haven't looked at CXX specifically, but I'm putting up a PR now using protoc w/Rust SDK and the approach I took is to install 3.5.1 from the published zip file.
amundson (Mon, 15 Jan 2018 16:46:41 GMT):
(for docker -- on the mac it's 'brew install protobuf')
AdamParker (Mon, 15 Jan 2018 17:09:38 GMT):
CXX might just require that I run a 17.04 dev machine. Makes the AWS box pretty useless but it just doesn't line up with the docker environment.
AdamParker (Mon, 15 Jan 2018 17:14:23 GMT):
Actually that's something I'm not 100% on. The compile is much nicer in docker, even spits out a .deb answering my question from this weekend, but it doesn't seem to line up with a fresh 16.04 install despite being based on xenial. How am I supposed to use it's output?
amundson (Mon, 15 Jan 2018 17:21:20 GMT):
I haven't used the AWS image, is it just older than the just-built docker images? would "apt-get upgrade" fix the issue?
stephentt (Mon, 15 Jan 2018 17:22:51 GMT):
Has joined the channel.
amundson (Mon, 15 Jan 2018 17:22:53 GMT):
is it possible that when doing the docker sequence, the files are created with bin/protogen and thus it isn't attempting to run protoc?
amundson (Mon, 15 Jan 2018 17:23:31 GMT):
that used to be how the Rust one worked prior to the PR I just put up
AdamParker (Mon, 15 Jan 2018 17:24:41 GMT):
Probably pretty close and no it doesn't seem to have anything to upgrade.
I'm not sure how exactly it gets through the docker but if I had to guess I'd say they've made one step "install more recent protoc than what's in aptitude".
AdamParker (Mon, 15 Jan 2018 17:25:18 GMT):
But then you're goose is cooked because it drops you back out to your regular 16.04 install and nothing matches up.
AdamParker (Mon, 15 Jan 2018 17:35:27 GMT):
yea, it compiles like a charm under 17.04
amundson (Mon, 15 Jan 2018 17:42:10 GMT):
can't wait for 18.04
AdamParker (Mon, 15 Jan 2018 18:15:09 GMT):
It's such an odd thing because I just remembered the package into repos is tied to xenial so now I have to figure out how to compile it to get the platform to run under 17.04. You're obviously not meant to do it this way.
AdamParker (Mon, 15 Jan 2018 18:15:09 GMT):
It's such an odd thing because I just remembered the sawtooth package into repos is tied to xenial so now I have to figure out how to compile it to get the platform to run under 17.04. You're obviously not meant to do it this way.
BeeKay (Mon, 15 Jan 2018 18:21:34 GMT):
Is there a way to register for validator events using validator CLI? I am having trouble registering for events in code, and want to debug using a different option.
AdamParker (Mon, 15 Jan 2018 21:32:26 GMT):
vagrant provisioning is failing during `pip3 install sphinxcontrib-openapi`
default: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-q6mvbmws/sphinxcontrib-openapi/
AdamParker (Mon, 15 Jan 2018 21:32:26 GMT):
vagrant provisioning is failing during `pip3 install sphinxcontrib-openapi`
` default: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-q6mvbmws/sphinxcontrib-openapi/`
Sunillal_VR (Mon, 15 Jan 2018 23:17:53 GMT):
Has joined the channel.
tristanperalta (Tue, 16 Jan 2018 05:50:39 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=sRtBMBQLPzQ4bTgTS) @pschwarz yes, I prefer sawtooth from source, in that way I know what is happening. And I also want to contribute.
tristanperalta (Tue, 16 Jan 2018 07:49:19 GMT):
Just ran, `docker-compose -f docker/compose/default.yml up`. Seems working fine, how do I connect to tcp://eth0:4004?
rajivgandhi2010 (Tue, 16 Jan 2018 08:20:01 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=b3kbNaAtd6Xsi8wf3) @AdamParker did you resolved this issue?
aymanelshayeb (Tue, 16 Jan 2018 10:17:41 GMT):
Has joined the channel.
aymanelshayeb (Tue, 16 Jan 2018 10:20:44 GMT):
Hello All, I have a question about Sawtooth. the main reason of using Blockchain technology is that all parties do not need trust central party . but i get confused when i read about sawtooth . it depends on Trusted network and also we have trust some validators. can anyone help me to understand this part?
aymanelshayeb (Tue, 16 Jan 2018 10:22:34 GMT):
I also have another question . if we go with all assumption of Sawtooth. and we have know big tree with all data . What if one of the parties of the application needs to make sure there is no fraud in the blockchain . In case of ethereum he can know this by simply verify nonce and target of each block but How can he do this in Sawtooth ? Thanks,
Rak (Tue, 16 Jan 2018 10:46:59 GMT):
Has joined the channel.
jklondon (Tue, 16 Jan 2018 12:26:54 GMT):
Has joined the channel.
jklondon (Tue, 16 Jan 2018 12:27:29 GMT):
Hi, has there been any development on the bond trading example? Any work to take it one step further to a production type scenario? Curious as I work in that space. Thanks Ravi
AdamParker (Tue, 16 Jan 2018 14:16:43 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=BvsJKLQFHau4Wfmdf) @rajivgandhi2010 I did but not in a pretty way. I had to update the associated vagrant script so the first step was to update setuptools for the current user and then it would pass.
zac (Tue, 16 Jan 2018 15:47:13 GMT):
@jklondon There aren't any plans to update the bond trading app for Sawtooth 1.0 so far as I know, though Sawtooth Marketplace is somewhat similar on a broad conceptual level:
https://github.com/hyperledger/sawtooth-marketplace
zac (Tue, 16 Jan 2018 15:48:13 GMT):
Though if you wanted to be the one to port the bond app to 1.0, I'm sure it would make a lot of people happy!
pschwarz (Tue, 16 Jan 2018 15:49:13 GMT):
@tristanperalta Port 4004 is being forward to the host machine. You can connect to it via `tcp://localhost:4004`
zac (Tue, 16 Jan 2018 15:51:50 GMT):
@aymanelshayeb You are right that you can only trust Sawtooth as far as you can trust the validator. This is why you would typically run your own validator. It would run all of the cryptographic checks and what not. I'm not sure what "trusted network" means in this context, but the major requirement to being able to verify everything is running a validator.
zac (Tue, 16 Jan 2018 15:53:17 GMT):
The data tree should also be built and managed by your validator. This is how you know it is trustworthy. If you remove the data from the validator it no longer has a hash or anything you can use to verify it.
Rak (Tue, 16 Jan 2018 16:26:16 GMT):
Hello, I'm fairly new to sawtooth, while running sawtooth-default.yaml I'm getting the validator and client exiting with code 1
Rak (Tue, 16 Jan 2018 16:27:45 GMT):
Any suggestion on how to get around this, using the -force command does not seem to work, I get a message back saying 'No such command: sawtooth_default.yaml'
Rak (Tue, 16 Jan 2018 16:27:50 GMT):
thanks
amundson (Tue, 16 Jan 2018 16:30:23 GMT):
@zac at the network level, trust is more about consensus agreeing on the current chain head
ibansalankit (Tue, 16 Jan 2018 17:43:44 GMT):
Hello, I want to contribute to core development of sawtooth. I have been going through the architecture and different components of sawtooth from last few days. I was thinking of starting with a few bugs to get better idea of the code. I was looking for some unresolved bugs with the label help-wanetd like STL-99 but it looks obselete. Can someone point me to any particular direction from where I can start working?
ibansalankit (Tue, 16 Jan 2018 17:43:44 GMT):
Hello, I want to contribute to core development of sawtooth. I have been going through the architecture and different components of sawtooth from last few days. I was thinking of starting with a few bugs to get better idea of the code. I was looking for some unresolved bugs with the label help-wanetd like STL-99 but it looks obsolete. Can someone point me to any particular direction from where I can start working?
vmelachervu (Tue, 16 Jan 2018 19:12:26 GMT):
Has joined the channel.
mfford (Tue, 16 Jan 2018 19:12:31 GMT):
@ibansalankit If you wanted to get started wth bugs, you could look at https://jira.hyperledger.org/browse/STL-833 or https://jira.hyperledger.org/browse/STL-945. You could also look at https://jira.hyperledger.org/browse/STL-347
amundson (Tue, 16 Jan 2018 19:46:26 GMT):
@ibansalankit do you have any programming language preferences?
Dan (Tue, 16 Jan 2018 19:47:45 GMT):
we should probably scrub any two-digit jira item. those are all likely to be pretty out of date at this point.
AdamParker (Tue, 16 Jan 2018 20:31:56 GMT):
Hmmm.. wish I knew how to reproduce that. Somehow I hung my validator and spent a couple hours trying to debug my TP but really it was just the validator not responding.
amundson (Tue, 16 Jan 2018 20:56:48 GMT):
@AdamParker what version of sawtooth are you using?
AdamParker (Tue, 16 Jan 2018 20:57:27 GMT):
0.8.13
CaryMa (Tue, 16 Jan 2018 21:07:17 GMT):
Has joined the channel.
FrankCastellucci (Tue, 16 Jan 2018 22:12:53 GMT):
Has joined the channel.
jcraney (Tue, 16 Jan 2018 22:46:02 GMT):
Has joined the channel.
liushengxi (Wed, 17 Jan 2018 12:08:14 GMT):
Has joined the channel.
mauricio (Wed, 17 Jan 2018 14:59:37 GMT):
Has joined the channel.
Dan (Wed, 17 Jan 2018 15:28:21 GMT):
@mfford do you have a link to Zac's supply chain webcast (from the ST tech forum series) ?
tkuhrt (Wed, 17 Jan 2018 15:43:51 GMT):
@Dan : do you know what day Zac's supply chain webcast was?
tkuhrt (Wed, 17 Jan 2018 15:44:22 GMT):
You should be able to find it in this folder: https://drive.google.com/drive/u/0/folders/0B_NJV6eJXAA1VnFUakRzaG1raXc
tkuhrt (Wed, 17 Jan 2018 15:45:46 GMT):
Looks like the 19th October
tkuhrt (Wed, 17 Jan 2018 15:45:59 GMT):
https://drive.google.com/open?id=0B_NJV6eJXAA1ZHlaZjBCMVNpSWM
tkuhrt (Wed, 17 Jan 2018 15:46:38 GMT):
Looks like it starts @ 25 minutes
Dan (Wed, 17 Jan 2018 15:51:37 GMT):
Thanks @tkuhrt ! @mfford do you post a trimmed version? if not no worries I'll link to this one.
tkuhrt (Wed, 17 Jan 2018 15:53:27 GMT):
Oh..looks like there is a trimmed version at https://drive.google.com/open?id=0ByXbfT5DHjNjRDhiUFYzc011VHM
tkuhrt (Wed, 17 Jan 2018 15:53:42 GMT):
@Dan can you DM me about the project update
mfford (Wed, 17 Jan 2018 15:54:11 GMT):
Thought we had trimmed that one. Thanks for finding @tkuhrt
Dan (Wed, 17 Jan 2018 15:54:32 GMT):
@tkhurt wins the forensics badge today.
nicholas (Wed, 17 Jan 2018 16:49:33 GMT):
Has joined the channel.
AshishMishra 1 (Wed, 17 Jan 2018 16:52:52 GMT):
Has left the channel.
ibansalankit (Wed, 17 Jan 2018 17:02:25 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Tra8jEuKsG75eAq2S) @amundson I have experience with Python, Java, C++ and Javascript.
ibansalankit (Wed, 17 Jan 2018 17:02:53 GMT):
I do no restrict myself to any programming language
ibansalankit (Wed, 17 Jan 2018 17:06:51 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Ed7dA3jBYgH8bdYii) @mfford I will look into these bug. You can expect a pull request soon. Thank you
amundson (Wed, 17 Jan 2018 17:21:20 GMT):
@ibansalankit if you want a bulkier todo item, we need a signing library for Java that has a similar API as the signing libraries in Rust, Python, and Go
amundson (Wed, 17 Jan 2018 17:22:20 GMT):
there has been a lot of interest here in the Java SDK, so I think this would be a relatively big impact for some folks
amundson (Wed, 17 Jan 2018 17:25:24 GMT):
https://github.com/hyperledger/sawtooth-core/tree/master/sdk/rust/src/signing
amundson (Wed, 17 Jan 2018 17:25:52 GMT):
mod.rs has the general API, and secp256k1 is the one current implementation of it
amundson (Wed, 17 Jan 2018 17:26:32 GMT):
the rust API was finalized first, then we updated Go, Python, Javascript to be similar
ibansalankit (Wed, 17 Jan 2018 17:26:45 GMT):
I can surely work on that
amundson (Wed, 17 Jan 2018 17:27:14 GMT):
https://github.com/hyperledger/sawtooth-core/tree/master/sdk/java/src/main/java/sawtooth/sdk/client
amundson (Wed, 17 Jan 2018 17:27:24 GMT):
it should completely replace that current class
ibansalankit (Wed, 17 Jan 2018 17:27:25 GMT):
I will start looking into existing signing libraries to get a better understanding of them
amundson (Wed, 17 Jan 2018 17:28:57 GMT):
The tests, including https://github.com/hyperledger/sawtooth-core/blob/master/sdk/rust/src/signing/secp256k1.rs, should give some idea of how we would expect it to be used. I imagine we would have the same tests in Java.
amundson (Wed, 17 Jan 2018 17:29:07 GMT):
(tests are at the bottom of that file)
ibansalankit (Wed, 17 Jan 2018 17:35:26 GMT):
@amundson If I need some support to get started on this who is the right person to ask?
amundson (Wed, 17 Jan 2018 17:39:34 GMT):
this is a good forum for discussion; I worked on the Rust signing code, @adamludvik on the Go signing code, and @pschwarz (and others, over time) on the Python signing code
amundson (Wed, 17 Jan 2018 17:40:25 GMT):
@Dan knows a lot about secp256k1 and selected it for Sawtooth
amundson (Wed, 17 Jan 2018 17:41:57 GMT):
@boydjohnson did the initial work on the Java SDK
ibansalankit (Wed, 17 Jan 2018 17:47:35 GMT):
I will first improve my understanding of the signing library and will come back for clarifications.
AdamParker (Wed, 17 Jan 2018 18:51:08 GMT):
If a new name comes to my transaction processor, what state is loaded by state_store.get([address])?
Dan (Wed, 17 Jan 2018 19:33:00 GMT):
fresh blog content on data structure design for merkle radix trees: https://www.hyperledger.org/blog/2018/01/16/data-model-considerations-in-hyperledger-sawtooth
jsmitchell (Wed, 17 Jan 2018 19:33:27 GMT):
@AdamParker I'm not sure what you mean by a new name, but get() will return the bytes stored at the provided address anchored on the version of the state tree associated with the context in which the transaction is executed
AdamParker (Wed, 17 Jan 2018 19:38:41 GMT):
Well lets say I'm tracking a new widget, serial number [new serial number] which I'm using analogous to name in the intkey example. It seems like whatever it returns it's empty but my Python knowledge is mediocre.
AdamParker (Wed, 17 Jan 2018 19:48:07 GMT):
@jsmitchell Excuse me, I'm talking in intkey parlance. A new Address (which is tied to the name in intkey). By your explanation and reading the code I guess it would return an empty container
erikpupo (Wed, 17 Jan 2018 23:30:13 GMT):
Has joined the channel.
genesmith (Wed, 17 Jan 2018 23:40:03 GMT):
Has joined the channel.
BeeKay (Thu, 18 Jan 2018 05:39:02 GMT):
I am not sure i understand how to connect to the validator and register for events/post events. I am trying the code from "Subscribing to events" in documentation, and I see something listening on ports 8800 and 4004 (using lsof)
vpnkit 3886 Krishna 22u IPv4 0xb966c38eca4988bf 0t0 TCP *:4004 (LISTEN)
vpnkit 3886 Krishna 23u IPv6 0xb966c38ebea92217 0t0 TCP localhost:4004 (LISTEN)
vpnkit 3886 Krishna 24u IPv4 0xb966c38eca0f5c9f 0t0 TCP *:8008 (LISTEN)
vpnkit 3886 Krishna 25u IPv6 0xb966c38ebea93357 0t0 TCP localhost:8008 (LISTEN)
that disappear if sawtooth goes down. But when connecting to the localhost:4004 0r 8008, a "Resource temporarily unavailable" error gets thrown on a non-blocking mode socket. Any pointers about how to debug?
mehmetshams (Thu, 18 Jan 2018 09:40:02 GMT):
Has joined the channel.
denis1990 (Thu, 18 Jan 2018 10:00:36 GMT):
Hi all! I am just learning sawtooth and not sure is it convinient to create public blockchains ? For example some blockchain with coins that can be transferred from node to node? Is Poet consensus good for it? Can spam attack or miner attack on validator crush everything ?
Dan (Thu, 18 Jan 2018 14:11:47 GMT):
@denis1990 welcome to Sawtooth! Sawtooth is designed for enterprise use. It has features such as poet that can facilitate public network usage but that is not our focus.
denis1990 (Thu, 18 Jan 2018 14:24:43 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=f6qLnw3d2wK9qQA95) @Dan Thanks for answer, Dan. Can you also tell me please, if I want to start create my own transaction family, from what should I start? Are there any good tutorials where shown hw the new TF created ? I will be very grateful for some links or simple advise with 1,2,3... steps. Thank you
Dan (Thu, 18 Jan 2018 14:26:11 GMT):
These should get you started @denis1990
https://hyperledger.org/blog/2017/06/22/whats-a-transaction-family
https://sawtooth.hyperledger.org/docs/core/nightly/master/app_developers_guide.html
FrankCastellucci (Thu, 18 Jan 2018 17:13:20 GMT):
Greetings. Noob question... Just starting with sawtooth dev (using java SDK) and am creating a TransactionProcessor/Handler image for change/voting to a Unit chain. Do I also write the validator that knows what/how to communicate to my Unit TP? If not, do I register (and if so how) my TP to some other sawtooth component? Sorry for the raw ignorance on my part.
AdamParker (Thu, 18 Jan 2018 17:17:49 GMT):
TP registers to the validator. The validator will pass it the encoded payload of the block.
zac (Thu, 18 Jan 2018 17:21:51 GMT):
@FrankCastellucci The SDK should mostly handle the registration for you. You just need to point it at the right URL. Here is an example in Java:
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/intkey_java/IntegerKeyTransactionProcessor.java#L27
zac (Thu, 18 Jan 2018 17:22:07 GMT):
`args[0]` is the validator URL in this case
FrankCastellucci (Thu, 18 Jan 2018 17:28:03 GMT):
@zac Ahhhhh, so I can use the sawtooth validator URL when I start my TP image. I will start with that. Thank you!
AdamParker (Thu, 18 Jan 2018 17:33:42 GMT):
:/ My blocks are stuck in Pending despite calling state_store.set.
AdamParker (Thu, 18 Jan 2018 17:37:27 GMT):
set is returning a valid looking address
zac (Thu, 18 Jan 2018 19:15:12 GMT):
Anyone else seeing this when running the Docker image: `hyperledger/sawtooth-rest-api:1.0`?
```
supply-rest-api | [2018-01-18 19:12:15.859 INFO messaging] Connecting to tcp://validator:4004
supply-rest-api | [2018-01-18 19:12:15.861 INFO rest_api] Creating handlers for validator at tcp://validator:4004
supply-rest-api | [2018-01-18 19:12:15.865 INFO rest_api] Starting REST API on sawtooth-rest-api:8008
supply-rest-api | [2018-01-18 19:12:15.912 ERROR rest_api] [Errno -2] Name or service not known
supply-rest-api | Traceback (most recent call last):
supply-rest-api | File "/usr/lib/python3/dist-packages/sawtooth_rest_api/rest_api.py", line 240, in main
supply-rest-api | wrapped_registry)
supply-rest-api | File "/usr/lib/python3/dist-packages/sawtooth_rest_api/rest_api.py", line 138, in start_rest_api
supply-rest-api | access_log_format='%r: %s status, %b size, in %Tf s')
supply-rest-api | File "/usr/lib/python3/dist-packages/aiohttp/web.py", line 454, in run_app
supply-rest-api | asyncio.gather(*server_creations, loop=loop)
supply-rest-api | File "/usr/lib/python3.5/asyncio/base_events.py", line 387, in run_until_complete
supply-rest-api | return future.result()
supply-rest-api | File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
supply-rest-api | raise self._exception
supply-rest-api | File "/usr/lib/python3.5/asyncio/tasks.py", line 241, in _step
supply-rest-api | result = coro.throw(exc)
supply-rest-api | File "/usr/lib/python3.5/asyncio/base_events.py", line 923, in create_server
supply-rest-api | infos = yield from tasks.gather(*fs, loop=self)
supply-rest-api | File "/usr/lib/python3.5/asyncio/futures.py", line 361, in __iter__
supply-rest-api | yield self # This tells Task to wait for completion.
supply-rest-api | File "/usr/lib/python3.5/asyncio/tasks.py", line 296, in _wakeup
supply-rest-api | future.result()
supply-rest-api | File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
supply-rest-api | raise self._exception
supply-rest-api | File "/usr/lib/python3.5/asyncio/tasks.py", line 241, in _step
supply-rest-api | result = coro.throw(exc)
supply-rest-api | File "/usr/lib/python3.5/asyncio/base_events.py", line 871, in _create_server_getaddrinfo
supply-rest-api | flags=flags, loop=self)
supply-rest-api | File "/usr/lib/python3.5/asyncio/futures.py", line 361, in __iter__
supply-rest-api | yield self # This tells Task to wait for completion.
supply-rest-api | File "/usr/lib/python3.5/asyncio/tasks.py", line 296, in _wakeup
supply-rest-api | future.result()
supply-rest-api | File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
supply-rest-api | raise self._exception
supply-rest-api | File "/usr/lib/python3.5/concurrent/futures/thread.py", line 55, in run
supply-rest-api | result = self.fn(*self.args, **self.kwargs)
supply-rest-api | File "/usr/lib/python3.5/socket.py", line 732, in getaddrinfo
supply-rest-api | for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
supply-rest-api | socket.gaierror: [Errno -2] Name or service not known
supply-rest-api exited with code 1
```
ShowBox 3 (Thu, 18 Jan 2018 19:42:29 GMT):
Has joined the channel.
FrankCastellucci (Thu, 18 Jan 2018 20:26:07 GMT):
@zac One last question: I've setup on local machine and see the sawtooth-validator running and it has exposed port 4004. Not sure what to pass to my container though... I've tried tcp://validator:4004 but that throws an error. Is it some other format?
zac (Thu, 18 Jan 2018 20:32:16 GMT):
Going to depend on your setup
zac (Thu, 18 Jan 2018 20:32:38 GMT):
That URL will be valid if everything is running in containers with `docker-compose`
zac (Thu, 18 Jan 2018 20:33:14 GMT):
if you are running your TP on your local host machine then `tcp://localhost:4004` is probably what you want
AdamParker (Thu, 18 Jan 2018 21:17:28 GMT):
So I apply a transaction and then I immediately get another transaction despite not having submitted anything. The second one fails because the state has moved and the transaction is marked as invalid overall. Any ideas what could be happening here?
AdamParker (Thu, 18 Jan 2018 21:21:31 GMT):
It seems to be the same transaction twice which would explain why it fails the second time, the data is invalid for the new state.
agunde (Thu, 18 Jan 2018 21:23:53 GMT):
@AdamParker A transaction should be processed twice, once on block publishing and again on block validation. Make sure that the data you are storing in state is deterministic other wise the second validation will fail.
agunde (Thu, 18 Jan 2018 21:25:37 GMT):
Really all the code in your transaction processor needs to be deterministic otherwise you will see failures.
AdamParker (Thu, 18 Jan 2018 21:33:37 GMT):
Ah, sure enough. Does the entry I set have to be the same between the two processing cycles? I'm guessing so since it has to be deterministic.
agunde (Thu, 18 Jan 2018 21:36:16 GMT):
Yep, here is quick overview of state https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/global_state.html
FrankCastellucci (Thu, 18 Jan 2018 21:45:47 GMT):
@zac Fantastic, worked like a charm... thanks
amundson (Thu, 18 Jan 2018 21:58:15 GMT):
the Rust SDK in master now supports writing transaction processors
zac (Thu, 18 Jan 2018 22:01:19 GMT):
What about ledger syncs?
rbuysse (Thu, 18 Jan 2018 22:03:07 GMT):
We'll be rebooting the machine that hosts sawtooth.hyperledger.org in a few minutes. If you see any docs interruption, please wait a moment and refresh. I'll send another note when it's back up.
rbuysse (Thu, 18 Jan 2018 22:20:11 GMT):
Everything is back up now.
Mythul (Thu, 18 Jan 2018 23:26:57 GMT):
hi, does anybody have 5 minutes to help me with an error?
amundson (Thu, 18 Jan 2018 23:33:20 GMT):
@zac there is enough in the Rust SDK to do ledger sync
zac (Fri, 19 Jan 2018 00:01:47 GMT):
Now, do I have enough Rust to write it?
zac (Fri, 19 Jan 2018 00:01:58 GMT):
(no)
zac (Fri, 19 Jan 2018 00:02:14 GMT):
(but maybe soon)
Dan (Fri, 19 Jan 2018 00:37:51 GMT):
@Mythul just post your problem and generally someone will try to help answer :)
achenette (Fri, 19 Jan 2018 01:49:50 GMT):
Has joined the channel.
Mythul (Fri, 19 Jan 2018 07:20:11 GMT):
thanks
Mythul (Fri, 19 Jan 2018 07:20:28 GMT):
so I'm trying to use the following working example for sawtooth: https://github.com/delventhalz/transfer-chain-js
Mythul (Fri, 19 Jan 2018 07:21:06 GMT):
the project has the following transaction family defined: const FAMILY = 'transfer-chain'
Mythul (Fri, 19 Jan 2018 07:21:44 GMT):
is transfer-chain some kind of predefined transaction family? if I just change that name in the entire project, I get an invalid transaction error
Mythul (Fri, 19 Jan 2018 07:22:23 GMT):
when I revert back to the 'transfer-chain' name it works. I think I'm missing something easy here....
gaurang (Fri, 19 Jan 2018 08:22:59 GMT):
Has joined the channel.
ShowBox 3 (Fri, 19 Jan 2018 10:26:54 GMT):
i tried creating a participant in the bond asset settlement and got an error
ShowBox 3 (Fri, 19 Jan 2018 10:27:30 GMT):
the marketplace example worked
ShowBox 3 (Fri, 19 Jan 2018 10:29:13 GMT):
can anyone help with marketplace install and functionality at intel..any direct number?
Dan (Fri, 19 Jan 2018 13:55:07 GMT):
@ShowBox 3 you can get marketplace code, build, and install directions here: https://github.com/hyperledger/sawtooth-marketplace
Dan (Fri, 19 Jan 2018 13:56:24 GMT):
@zac see @Mythul 's post above ^
Mythul (Fri, 19 Jan 2018 14:20:49 GMT):
I've fixed my issue :)
Mythul (Fri, 19 Jan 2018 14:21:27 GMT):
forgot that the prefix needs to be the first 6 char of the hash of the actual family name
Mythul (Fri, 19 Jan 2018 14:21:35 GMT):
thanks @Dan
glotov (Fri, 19 Jan 2018 14:46:44 GMT):
Has joined the channel.
jaredcorduan (Fri, 19 Jan 2018 15:13:32 GMT):
apologies if this is documented somewhere, I can't find it, but can you configure the (software) poet wait times in the validator toml file?
jaredcorduan (Fri, 19 Jan 2018 15:15:12 GMT):
or is it configured in the settings txn family?
jaredcorduan (Fri, 19 Jan 2018 15:17:17 GMT):
ha ha, I find it as soon as I ask. `sawtooth.poet.target_wait_time`
Dan (Fri, 19 Jan 2018 16:05:04 GMT):
for other branch pack-rats, a command line to cleanup your local branches https://gist.github.com/dcmiddle/756445b9c2cca1e99b21b5eed065064f
AdamParker (Fri, 19 Jan 2018 16:06:52 GMT):
Is there a timeout on verifying a transaction?
bill.cawthra (Fri, 19 Jan 2018 16:23:47 GMT):
more questions relating to what :point_up: Jared asked, I'm seeing a lot of `Block marked invalid(invalid predecessor)` messages. How can we modify the wait settings to avoid this? Is that the right thing to address the issue? Still hunting on ways to understand and fix this.
bill.cawthra (Fri, 19 Jan 2018 16:24:02 GMT):
How are people load testing?
AdamParker (Fri, 19 Jan 2018 16:26:53 GMT):
Is there a short list of reasons why a transaction would be fed to my TP only once?
AdamParker (Fri, 19 Jan 2018 16:34:22 GMT):
I started the validator by hand and now it's working :rolling_eyes:
IronZion718 (Fri, 19 Jan 2018 17:13:03 GMT):
Has joined the channel.
IronZion718 (Fri, 19 Jan 2018 17:13:16 GMT):
What is the best IME for working with blockchain?
AdamParker (Fri, 19 Jan 2018 17:35:59 GMT):
There it is:
```[2018-01-19 11:34:40.983 INFO processor_handlers] registered transaction processor: connection_id=017cb6e1c82a0e724c42cb0d950bde27bc003e7578926106ef4338f72000e1d3d25e9f8a0cc7a6888217fdd2ff9211a1b6fa411818ff48b19bc5f4b08c0fb192, family=sawdost, version=1.0, encoding=application/cbor, namespaces=['69b636']
[2018-01-19 11:34:48.472 INFO publisher] Claimed Block: a750033b(9, S:9768fdb0, P:fef4663b)
[2018-01-19 11:34:48.474 CRITICAL publisher] on_check_publish_block exception.
[2018-01-19 11:34:48.474 ERROR publisher] 'NoneType' object has no attribute 'previous_block_id'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/publisher.py", line 598, in on_check_publish_block
self._block_sender.send(blkw.block)
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/block_sender.py", line 43, in send
self._completer.add_block(block)
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/completer.py", line 285, in add_block
self.block_cache[block.header_signature] = blkw
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/block_cache.py", line 85, in __setitem__
self._purge_expired()
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/block_cache.py", line 141, in _purge_expired
dec_count_for.append(block.previous_block_id)
AttributeError: 'NoneType' object has no attribute 'previous_block_id'```
AdamParker (Fri, 19 Jan 2018 17:35:59 GMT):
There it is:
```[2018-01-19 11:34:48.472 INFO publisher] Claimed Block: a750033b(9, S:9768fdb0, P:fef4663b)
[2018-01-19 11:34:48.474 CRITICAL publisher] on_check_publish_block exception.
[2018-01-19 11:34:48.474 ERROR publisher] 'NoneType' object has no attribute 'previous_block_id'
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/publisher.py", line 598, in on_check_publish_block
self._block_sender.send(blkw.block)
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/block_sender.py", line 43, in send
self._completer.add_block(block)
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/completer.py", line 285, in add_block
self.block_cache[block.header_signature] = blkw
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/block_cache.py", line 85, in __setitem__
self._purge_expired()
File "/usr/lib/python3/dist-packages/sawtooth_validator/journal/block_cache.py", line 141, in _purge_expired
dec_count_for.append(block.previous_block_id)
AttributeError: 'NoneType' object has no attribute 'previous_block_id'```
AdamParker (Fri, 19 Jan 2018 17:38:02 GMT):
I find it a bit strange that it's inconsistent. I restarted the validator and now it's fine again.
KyleJ 1 (Fri, 19 Jan 2018 17:59:16 GMT):
Has joined the channel.
Nick2567 (Fri, 19 Jan 2018 18:44:35 GMT):
Has joined the channel.
Nick2567 (Fri, 19 Jan 2018 19:37:07 GMT):
Hi, I am trying to start Sawtooth but I am seeing the following error -
Nick2567 (Fri, 19 Jan 2018 19:37:20 GMT):
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
zac (Fri, 19 Jan 2018 19:38:01 GMT):
Is Docker running?
Nick2567 (Fri, 19 Jan 2018 19:38:58 GMT):
Yes
Nick2567 (Fri, 19 Jan 2018 19:39:02 GMT):
docker.service loaded active running Docker Application
AdamParker (Fri, 19 Jan 2018 19:40:31 GMT):
Is you user in the docker group?
AdamParker (Fri, 19 Jan 2018 19:40:31 GMT):
Is your user in the docker group?
Nick2567 (Fri, 19 Jan 2018 19:44:23 GMT):
Good question, how do I check this? So far I have installed the prerequisites and downloaded the Docker Compose file.
Dan (Fri, 19 Jan 2018 20:01:19 GMT):
@bill.cawthra if you haven't changed any of the defaults I don't think an invalid block would be caused by a poet setting. An invalid predecessor means that for some reason sawtooth thinks the parent block is bad (has an invalid transaction, doesn't exist, was previously found to be invalid for some other reason, etc.). That's unlikely to happen in normal operation so I'd need to know more about what you are doing to dial in further. Are you stressing the system? You might pop loose a bug in that case. Did you restart a node with a different genesis block? then you'd have distinct chains that wouldn't trust each other.
jaredcorduan (Fri, 19 Jan 2018 20:09:39 GMT):
yes, @bill.cawthra is load testing the system. but he is not restarting a node with a different genesis block.
AdamParker (Fri, 19 Jan 2018 21:00:26 GMT):
In python, if I have a payload from a 'blocks/[block id]' response from the REST API. Can I load this back into CBOR?
AdamParker (Fri, 19 Jan 2018 21:20:07 GMT):
I just realized it got into the form by the encoder facilities. I can't find and decoding facilities in the Python API, do they exist?
AdamParker (Fri, 19 Jan 2018 21:20:07 GMT):
I just realized it got into the form by the encoder facilities. I can't find and decoding facilities in the Python API, do they exist?
Edit:
Found it, the data is a Base64 encoding, b64decode and then feed it to cbor.
amundson (Sat, 20 Jan 2018 00:00:29 GMT):
@AdamParker you can deserialize block and block headers using protobuf and then access the fields, if that's what you are trying to do
amundson (Sat, 20 Jan 2018 00:01:23 GMT):
same is true for batches and transactions
amundson (Sat, 20 Jan 2018 00:01:38 GMT):
payload is serialized/deserialized as defined by the transaction family
jcraney (Sat, 20 Jan 2018 10:11:07 GMT):
Hi i'm having trouble getting the validators to talk to each other on a private network. I posted in the slack channel and @Dan gave me an explanation but I'm still somewhat lost. He mentioned a toml file and endpoints. I can't find those files in the sawtooth tuna repo I downloaded from github or the simple installation on the documents site. I just don't know which configuration files I need to edit to add the right ip addresses for the different validator nodes. I'm not sure I'm fully understanding how the nodes are supposed to communicate and the docs don't really provide a walk-through for setting up a network of validators after you get the components set up in a docker environment or on a linux machine.
jcraney (Sat, 20 Jan 2018 10:13:33 GMT):
Right now I have a docker instance running sawtooth and a virtualbox ubuntu instance running sawtooth as well. I would like to connect them over the vpn and have them share blockchain information. I know the ip addresses but I don't know where I need to put them.
FrankCastellucci (Sat, 20 Jan 2018 10:28:36 GMT):
@jcraney I am a neophyte in this whole space but for the core repo, in validator https://github.com/hyperledger/sawtooth-core/tree/master/validator/packaging there are a number sample toml file that may shed some light. Deepest apologies if this completely missed your point.
FrankCastellucci (Sat, 20 Jan 2018 12:54:23 GMT):
I have hijacked the java intkey example, renamed the transaction family name to "uomkey". It starts and connects to sawtooth_validator_default. I would like to use the `intkey` utility to create a load file to test, is this possible as I am inferring that intkey generates transactions specifically to the intkey family?
amundson (Sat, 20 Jan 2018 15:13:47 GMT):
@jcraney the documentation for 1.0 is much better than for 0.8. https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc6/sysadmin_guide/configuring_sawtooth/validator_configuration_file.html
amundson (Sat, 20 Jan 2018 15:14:37 GMT):
to anyone using 0.8, I'd suggest migrating to 1.0
amundson (Sat, 20 Jan 2018 15:21:11 GMT):
@FrankCastellucci you could hack the intkey client to generate uomkey transactions. the family name is at https://github.com/hyperledger/sawtooth-core/blob/master/sdk/examples/intkey_python/sawtooth_intkey/client_cli/create_batch.py#L93
FrankCastellucci (Sat, 20 Jan 2018 15:26:52 GMT):
@amundson Ahhh, thank you sir. I was having difficulty finding the source and I see there is one for python but not for java. I should be able to map it reasonably enough to java (ideally Clojure but that is a heavier lift no doubt). Thanks again.
amundson (Sat, 20 Jan 2018 15:31:56 GMT):
@FrankCastellucci the challenge with that will be the current state of the client-side support in the Java SDK, in particular the signing code. @ibansalankit was considering working on a better implementation, but not sure if he has had a chance to start on it. as far as Clojure, @pschwarz may have the start of a Clojure SDK.
amundson (Sat, 20 Jan 2018 15:34:39 GMT):
in the docs for nightly master, we have started to attempt to describe the current state/readiness of each of the SDKs - https://sawtooth.hyperledger.org/docs/core/nightly/master/app_developers_guide/sdk_table.html
FrankCastellucci (Sat, 20 Jan 2018 15:45:05 GMT):
@amundson OK, I was perusing your state-export-prototype, and it helped for other things, but will go with the python client hack to make headway on testing my TP. Great new info btw...
jcraney (Sat, 20 Jan 2018 16:38:03 GMT):
@FrankCastellucci @amundson thank you both for your help. I think I got it from here.
yoni (Sat, 20 Jan 2018 19:22:52 GMT):
help please.
i am working with one node in AWS instance with sawtooth 1.0.0-rc6 (upgraded from 0.8.13), and noticed that the genesis.batch file from /var/lib/sawtooth/ was being deleted.
after it happened twice i noticed that it caused when restarting the sawtooth-setup.service.
tried disabling this service but now the validator and rest-api services are not running after startup, even though they are enabled.
thanks,
pschwarz (Sat, 20 Jan 2018 20:11:29 GMT):
@FrankCastellucci I have a start on it, but nothing 100% yet. I do have a project that uses the Event Subscription feature of Sawtooth via Clojure: https://github.com/peterschwarz/state-export-prototype . There a number of parts there for connecting to a validator. The heavy lifting was setting up the connection to the validator over ZMQ; handling transaction process requests should be trivial
FrankCastellucci (Sat, 20 Jan 2018 22:49:27 GMT):
@pschwarz I will look deeper at the Clojure code (starred it). I am just such a noob in the whole sawtooth space I don't know that I could contribute but will certain test anything you've got in the interim. Right now I've hijacked java_intkey and all I did was substitute the family name (i.e. "uomkey"), and in the sawtooth-shell-default modified the intkey batch family name to the same. Unfortunately the sawtooth-validator-default is not recognizing the family when I do a load.
FrankCastellucci (Sat, 20 Jan 2018 23:26:50 GMT):
In my TP Dockerfile do I need to expose any port in order for the sawtooth-validator-default to callback?
arthurgreef (Sat, 20 Jan 2018 23:39:29 GMT):
Has joined the channel.
AdamParker (Sun, 21 Jan 2018 05:33:22 GMT):
Spent the day practicing some sawtooth concepts and it even seems to work in narrow tests. I get nervous when all my experience with a platform is behind IP so I wrote this to test some stuff in public.
https://github.com/foreverska/SensorChain
Loving the platform!
FrankCastellucci (Sun, 21 Jan 2018 09:20:42 GMT):
Is very instructional. Do you mind a few questions around how you develop (inside docker image or on your host machine?)[ ](https://chat.hyperledger.org/channel/sawtooth?msg=ZpBiP8NKF9cyAHxGg) @AdamParker
basename (Sun, 21 Jan 2018 14:17:28 GMT):
Has joined the channel.
basename (Sun, 21 Jan 2018 14:22:57 GMT):
Hi guys!
I not found information about peer nodes in documentation. I wanna to start a dynamic network of validators but, if the first one was started successful and I can to obtain information about blocks, but when I starting my second validator (and point the seeds property to first validator), I'm always stuck at discovering peer nodes. Please, anyone help with this, maybe stupid question.
Here I'm attach a screen: https://prnt.sc/i3hfuy
basename (Sun, 21 Jan 2018 14:46:29 GMT):
sawtooth-validator-default | [2018-01-21 14:45:07.696 DEBUG interconnect] Adding connection to tcp://192.168.1.108:8800
sawtooth-validator-default | [2018-01-21 14:45:07.697 DEBUG selector_events] Using selector: ZMQSelector
sawtooth-validator-default | [2018-01-21 14:45:07.697 DEBUG dispatch] Added send_message function for connection OutboundConnectionThread-tcp://192.168.1.108:8800
sawtooth-validator-default | [2018-01-21 14:45:07.698 DEBUG dispatch] Added send_last_message function for connection OutboundConnectionThread-tcp://192.168.1.108:8800
sawtooth-validator-default | [2018-01-21 14:45:07.703 DEBUG interconnect] Connection to 7c10b7ddf42168217271b0e5481ef9563acbf8e0e05a9dd6e0947994282fc2015f0296fc5b93676c34e9f5f1425fd2388a11bc0295c1fdef60248551637c7255 was acknowledged
sawtooth-validator-default | [2018-01-21 14:45:07.708 DEBUG handlers] got connect message from 7c10b7ddf42168217271b0e5481ef9563acbf8e0e05a9dd6e0947994282fc2015f0296fc5b93676c34e9f5f1425fd2388a11bc0295c1fdef60248551637c7255. sending ack
sawtooth-validator-default | [2018-01-21 14:45:07.708 DEBUG handlers] Endpoint of connecting node is tcp://validator:8800
sawtooth-validator-default | [2018-01-21 14:45:07.711 DEBUG permission_verifier] Chain head is not set yet. Permit all.
sawtooth-validator-default | [2018-01-21 14:45:07.711 DEBUG gossip] Endpoint has completed authorization: tcp://validator:8800 (id: 7c10b7ddf42168217271b0e5481ef9563acbf8e0e05a9dd6e0947994282fc2015f0296fc5b93676c34e9f5f1425fd2388a11bc0295c1fdef60248551637c7255)
sawtooth-validator-default | [2018-01-21 14:45:07.711 DEBUG gossip] Received unknown endpoint: tcp://validator:8800
sawtooth-validator-default | [2018-01-21 14:45:07.711 DEBUG handlers] Connection: 7c10b7ddf42168217271b0e5481ef9563acbf8e0e05a9dd6e0947994282fc2015f0296fc5b93676c34e9f5f1425fd2388a11bc0295c1fdef60248551637c7255 is approved
sawtooth-validator-default | [2018-01-21 14:45:09.701 DEBUG
basename (Sun, 21 Jan 2018 14:48:31 GMT):
I ran the two docker containers on two different machines and set up apache reverse proxy for connect to external ips
I'm boring in this line:
sawtooth-validator-default | [2018-01-21 14:45:07.711 DEBUG gossip] Received unknown endpoint: tcp://validator:8800
AdamParker (Sun, 21 Jan 2018 15:11:21 GMT):
@FrankCastellucci So I'm lucky enough to have some extra real hardware that I run. At work I use a virtual machine. These two strategies are because I'm usually an embedded linux developer and I'm not great with docker yet. But my major strategy there is to install ssh, use sshfs to mount the remote filesystem on my dev machine and then open a few terminals where I SSH into the remote machine. This gives me lots of room to develop almost as if it's local without having to gum up my dev machine. This strategy would probably work in docker as well. Anything else feel free to ask.
FrankCastellucci (Sun, 21 Jan 2018 15:26:51 GMT):
Luxuries
FrankCastellucci (Sun, 21 Jan 2018 15:26:51 GMT):
Luxuries
FrankCastellucci (Sun, 21 Jan 2018 15:34:46 GMT):
The I currently built my TP was, on my host machine, to go to the java sdk and install the sdk jar to my local maven, build my jar, wrap it in a docker image and invoke with passing tcp://localhost:4004. But it just sits there and I never see it registering in the validator.
FrankCastellucci (Sun, 21 Jan 2018 15:34:46 GMT):
The way I currently built my TP was, on my host machine, to go to the java sdk and install the sdk jar to my local maven, build my jar, wrap it in a docker image and invoke with passing tcp://localhost:4004. But it just sits there and I never see it registering in the validator.
yoni (Sun, 21 Jan 2018 15:43:18 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=eQ8B5fRXNkzrShwCA) anybody else seen this? happens only when running sawtooth as service
ibansalankit (Sun, 21 Jan 2018 16:27:26 GMT):
@amundson I have started looking into the Java SDK. I need some time to get to know more about Sawtooth especially theJava SDK.
amundson (Sun, 21 Jan 2018 18:35:03 GMT):
I updated the documentation "latest" link now points to the latest 1.0 software release (currently 1.0.0rc6), not 0.8.x. This is in support of the upcoming release of 1.0. (Multiple definitions of 'release' there, sorry.)
basename (Sun, 21 Jan 2018 19:47:04 GMT):
Guys, will be very glad if anyone knows how to connect node to existing network...
FrankCastellucci (Sun, 21 Jan 2018 22:25:31 GMT):
I've copied the client: section in sawtooth-local.yaml, renamed to jclient: renamed the container_name: and use the sawtooth-dev-java:latest image. But when I compose it loads everything but the last line is 'sawtooth-jclient-local exited with code 127'. Do I need to do something different to be able to 'shell' into that container and keep it from exiting?
arthurgreef (Mon, 22 Jan 2018 00:34:40 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=EKALZiEENXdTTHvNC) @FrankCastellucci The container exits when the first process terminates. What is the CMD command at the end of the docker file?
FrankCastellucci (Mon, 22 Jan 2018 09:05:33 GMT):
By adding my TP image to the equivalent of sawtooth-local.yaml I am not seeing the registration with the validator and I am getting at least 1 apply but I'm now facing "Invalid Transaction: sawtooth.sdk.processor.exceptions.InvalidTransactionException: Tried to get unauthorized address". I may have missed key generation steps.
FrankCastellucci (Mon, 22 Jan 2018 09:05:33 GMT):
By adding my TP image to the equivalent of sawtooth-local.yaml I am *now* seeing the registration with the validator and I am getting at least 1 apply but I'm now facing "Invalid Transaction: sawtooth.sdk.processor.exceptions.InvalidTransactionException: Tried to get unauthorized address". I may have missed key generation steps.
basename (Mon, 22 Jan 2018 09:57:34 GMT):
Thanks to all, I found solution.
The issue was in apache proxy server that was used for ip passthrough from docker to external ip.
FrankCastellucci (Mon, 22 Jan 2018 10:58:06 GMT):
Fixed issue... working like a charm now. [ ](https://chat.hyperledger.org/channel/sawtooth?msg=Ji5fA8JBxMs9YDXyS)
tritone11 (Mon, 22 Jan 2018 15:42:33 GMT):
Has joined the channel.
vkblue (Mon, 22 Jan 2018 16:34:01 GMT):
Has joined the channel.
thegreatsunra (Mon, 22 Jan 2018 17:16:35 GMT):
Has joined the channel.
jingman (Mon, 22 Jan 2018 17:19:30 GMT):
In a multi-validator-node setup, how can I process transactions submitted to _any_ Validator Node with a _single_ instance of a TP?
jingman (Mon, 22 Jan 2018 17:21:07 GMT):
When a TP registers with a VN, does that VN broadcast that registration to peers, such that transaction submissions on those peers will be forwarded to the TP?
pschwarz (Mon, 22 Jan 2018 17:21:31 GMT):
TP's only support connecting to a single validator
jingman (Mon, 22 Jan 2018 17:21:45 GMT):
ok glad to see I did not misread that
jingman (Mon, 22 Jan 2018 17:23:15 GMT):
so transactions really need to be submitted directly to the VN that has the appropriate TP registered?
pschwarz (Mon, 22 Jan 2018 17:23:30 GMT):
Yes
pschwarz (Mon, 22 Jan 2018 17:24:35 GMT):
Well, not exactly - the transaction will be distributed to the rest of the network, where it will be processed by nodes that have the TP registered.
pschwarz (Mon, 22 Jan 2018 17:24:51 GMT):
But, nodes that don't have it registered will block processing until the TP is available
pschwarz (Mon, 22 Jan 2018 17:25:57 GMT):
So nodes that don't have it will fall behind the rest of the network
jingman (Mon, 22 Jan 2018 17:26:26 GMT):
oh, they'll _never_ process those transactions?
jingman (Mon, 22 Jan 2018 17:27:13 GMT):
I'd have thought that one of the VNs with a TP would process the transaction and validate/broadcast that change to peers
jingman (Mon, 22 Jan 2018 17:27:24 GMT):
but maybe I'm thinking about it wrong
jingman (Mon, 22 Jan 2018 17:28:05 GMT):
You're saying I need to have separate TP instances running for, and connected to, every Validator node in my network?
pschwarz (Mon, 22 Jan 2018 17:57:36 GMT):
yes
pschwarz (Mon, 22 Jan 2018 17:58:01 GMT):
They all need to validate the transactions by executing the transaction, to produce the same global state
jingman (Mon, 22 Jan 2018 18:01:43 GMT):
rgr, thanks @pschwarz
jingman (Mon, 22 Jan 2018 18:03:01 GMT):
Are there any tricks/tips to scaling and maintaining TPs across every VN? It sounds... challenging.
jsmitchell (Mon, 22 Jan 2018 18:21:57 GMT):
@jingman think of the TPs as a platform for building the transaction capabilities of the network. So, they could contain static business logic that a consortium agrees to run, or they could be stack/state machines which process instructions stored in blockchain state. So, the sawtooth seth transaction processor, for example implements an Ethereum EVM and executes EVM bytecode stored on the blockchain.
jsmitchell (Mon, 22 Jan 2018 18:23:08 GMT):
If your use case means frequent changes to executed transaction logic, you probably want some kind of on-blockchain contract
jingman (Mon, 22 Jan 2018 18:24:38 GMT):
Makes sense - thanks @jsmitchell
FrankCastellucci (Mon, 22 Jan 2018 18:49:30 GMT):
Can anyone direct me on best practices, tricks or shortcuts to load the python sdk packages into pip3?
Dan (Mon, 22 Jan 2018 20:18:42 GMT):
@yoni what do you get from these two commands:
`systemctl list-unit-files | grep sawtooth`
`dpkg -l | grep sawtooth`
cianx (Mon, 22 Jan 2018 20:57:01 GMT):
@yoni Please post the logs from your failure.
AdamParker (Tue, 23 Jan 2018 04:17:01 GMT):
The data set in SetStateData is supposed to become cannon on the chain, right?
AdamParker (Tue, 23 Jan 2018 04:19:29 GMT):
What I'm working through right now is the client is posting a block of a certain type with junk data in some of the fields. The TP is supposed to correct those fields and then post the correct data to the chain. However; the original junk fields are seeping into the chain and I can't figure out why.
yoni (Tue, 23 Jan 2018 07:32:20 GMT):
systemctl list-unit-files | grep sawtooth
sawtooth-intkey-tp-python.service disabled
sawtooth-parts-tp-python.service enabled
sawtooth-poet-validator-registry-tp.service disabled
sawtooth-rest-api.service enabled
sawtooth-settings-tp.service enabled
sawtooth-setup.service enabled
sawtooth-validator.service enabled
sawtooth-xo-tp-python.service disabled
dpkg -l | grep sawtooth
ii python3-sawtooth-cli 1.0.0rc6-1 all Sawtooth CLI
ii python3-sawtooth-intkey 1.0.0rc6-1 all Sawtooth Intkey Python Example
ii python3-sawtooth-poet-cli 1.0.0rc6-1 all Sawtooth PoET CLI
ii python3-sawtooth-poet-common 1.0.0rc6-1 all Sawtooth PoET Common Modules
ii python3-sawtooth-poet-core 1.0.0rc6-1 all Sawtooth Core Consensus Module
ii python3-sawtooth-poet-families 1.0.0rc6-1 all Sawtooth Transaction Processor Families
ii python3-sawtooth-poet-simulator 1.0.0rc6-1 all Sawtooth PoET Simulator Enclave
ii python3-sawtooth-rest-api 1.0.0rc6-1 all Sawtooth REST API
ii python3-sawtooth-sdk 1.0.0rc6-1 all Sawtooth Python SDK
ii python3-sawtooth-settings 1.0.0rc6-1 all Sawtooth Settings Transaction Processor
ii python3-sawtooth-signing 1.0.0rc6-1 all Sawtooth Signing Library
ii python3-sawtooth-validator 1.0.0rc6-1 all Sawtooth Validator
ii python3-sawtooth-xo 1.0.0rc6-1 all Sawtooth XO Example
ii sawtooth 1.0.0rc6 all Hyperledger Sawtooth Distributed Ledger
yoni (Tue, 23 Jan 2018 07:33:08 GMT):
Clipboard - January 23, 2018 9:33 AM
yoni (Tue, 23 Jan 2018 07:38:48 GMT):
found a solution, i think maybe the setup service wasn't properly updated from version 0.8.13 i had before:
sudo apt-get autoremove --purge '*sawtooth*'
added the following lines to completely remove all sawtooth servies:
sudo systemctl stop sawtooth-*
sudo systemctl disable sawtooth-*
sudo rm -R /etc/systemd/system/sawtooth-setup.service.wants
sudo systemctl daemon-reload
sudo systemctl reset-failed
reset the instance
reinstall sawtooth and add genesis batch and keys again
restart and enable all services
RiyazPanarwala (Tue, 23 Jan 2018 09:50:36 GMT):
Has joined the channel.
RiyazPanarwala (Tue, 23 Jan 2018 09:51:44 GMT):
I am looking for sawtooth small-bank family examples.
yari_borbon (Tue, 23 Jan 2018 13:45:21 GMT):
Has joined the channel.
yari_borbon (Tue, 23 Jan 2018 14:08:49 GMT):
Dear all, I am new to blockchain and hyperledger. Gone throught the fabric tutorials and so far so good. Then moved onto the sawtooth and tried running ii, but, have no idea why the command goes on supply-shell unavailable server on and on:
yari_borbon (Tue, 23 Jan 2018 14:08:49 GMT):
Dear all, I am new to blockchain and hyperledger. Gone throught the fabric tutorials and so far so good. Then moved onto the sawtooth and tried running it, but, have no idea why the command goes on supply-shell unavailable server on and on:
yari_borbon (Tue, 23 Jan 2018 14:09:54 GMT):
supply-rethink | Listening on driver addresses: 127.0.0.1, 172.18.0.3
supply-rethink | Listening on http addresses: 127.0.0.1, 172.18.0.3
supply-rethink | Server ready, "05be5c800a9d_y51" 4c941f15-a0b3-4e68-b45b-4d6fa6fe93fc
supply-shell | Server unavailable, retrying in 5 seconds...
supply-shell | Server unavailable, retrying in 5 seconds...
supply-shell | Server unavailable, retrying in 5 seconds...
yari_borbon (Tue, 23 Jan 2018 14:10:12 GMT):
anyone can shed light on how to six this?
yari_borbon (Tue, 23 Jan 2018 14:10:12 GMT):
anyone can shed light on how to fix this?
yari_borbon (Tue, 23 Jan 2018 14:10:47 GMT):
supply-rethink | Listening on driver addresses: 127.0.0.1, 172.18.0.3
supply-rethink | Listening on http addresses: 127.0.0.1, 172.18.0.3
supply-rethink | Server ready, "05be5c800a9d_y51" 4c941f15-a0b3-4e68-b45b-4d6fa6fe93fc
supply-shell | Server unavailable, retrying in 5 seconds...
supply-shell | Server unavailable, retrying in 5 seconds...
supply-shell | Server unavailable, retrying in 5 seconds...
yari_borbon (Tue, 23 Jan 2018 14:11:16 GMT):
https://github.com/hyperledger/sawtooth-supply-chain
yari_borbon (Tue, 23 Jan 2018 14:12:36 GMT):
Start Up
Once Docker is installed and you've cloned this repo, navigate to the root project directory and run:
docker-compose up
yari_borbon (Tue, 23 Jan 2018 14:12:55 GMT):
supply-rethink | Listening on driver addresses: 127.0.0.1, 172.18.0.3
supply-rethink | Listening on http addresses: 127.0.0.1, 172.18.0.3
supply-rethink | Server ready, "05be5c800a9d_y51" 4c941f15-a0b3-4e68-b45b-4d6fa6fe93fc
supply-shell | Server unavailable, retrying in 5 seconds...
supply-shell | Server unavailable, retrying in 5 seconds...
supply-shell | Server unavailable, retrying in 5 seconds...
Dan (Tue, 23 Jan 2018 14:32:29 GMT):
@RiyazPanarwala the smallbank docs: https://sawtooth.hyperledger.org/docs/core/releases/latest/transaction_family_specifications/smallbank_transaction_family.html
code is here: https://github.com/hyperledger/sawtooth-core/tree/master/families/smallbank
I posted some instructions as a gist a while back. I don't know if the command lines are up to date there or not: https://gist.github.com/dcmiddle/edb6d70579a26064f68560f0c2ce946d
zac (Tue, 23 Jan 2018 15:15:24 GMT):
@yari_borbon The shell is a develop environment with dependencies installed to run Supply Chain scripts and components
zac (Tue, 23 Jan 2018 15:15:24 GMT):
@yari_borbon The shell is a development environment with dependencies installed to run Supply Chain scripts and components
zac (Tue, 23 Jan 2018 15:16:01 GMT):
It is trying to run scripts to seed the blockchain with example data, but can't until the server is running
zac (Tue, 23 Jan 2018 15:16:16 GMT):
The server does not appear to be running
zac (Tue, 23 Jan 2018 15:16:51 GMT):
See if you can find some logs from `supply-server` that might explain that
zac (Tue, 23 Jan 2018 15:16:51 GMT):
See if you can find some logs earlier from `supply-server` that might explain that
A0107400 (Tue, 23 Jan 2018 15:38:48 GMT):
Has joined the channel.
Dan (Tue, 23 Jan 2018 15:55:06 GMT):
Hey other sawtooth maintainers. One of you want to give the sawtooth update on Thursday at the TSC? I was going to do it but I just had a conflict emerge and can't attend the meeting.
ascatox (Tue, 23 Jan 2018 16:27:06 GMT):
Has joined the channel.
AdamParker (Tue, 23 Jan 2018 16:47:36 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_python.html
```from sawtooth_sdk.protobuf.transaction_pb2 import Transaction
signature = signer.sign(txn_header_bytes)
txn = Transaction(
header=txn_header_bytes,
header_signature=signature,
payload: payload_bytes
)```
Should be `payload=payload_bytes` I'm pretty sure
zac (Tue, 23 Jan 2018 17:08:56 GMT):
Indeed. Looks like some JS snuck in there.
AdamParker (Tue, 23 Jan 2018 17:10:16 GMT):
It was a gamble, could have been a positional dict without the braces. But yea, probably just some sneaky JS
zac (Tue, 23 Jan 2018 17:12:19 GMT):
I can fix it, unless you wanted to submit a contribution?
AdamParker (Tue, 23 Jan 2018 17:16:12 GMT):
I think I see how this works. I'll submit something in the next five
AdamParker (Tue, 23 Jan 2018 17:29:46 GMT):
https://github.com/hyperledger/sawtooth-core/pull/1369
zac (Tue, 23 Jan 2018 17:41:52 GMT):
@Dan Looks like Adam needs to be whitelisted
zac (Tue, 23 Jan 2018 17:42:01 GMT):
@AdamParker Looks like your commit needs to be signed
AdamParker (Tue, 23 Jan 2018 17:43:41 GMT):
My bad, I get so used to -m for my last two corporate gits
zac (Tue, 23 Jan 2018 17:45:25 GMT):
I was told once by someone not to use `-m` because it will omit some metadata from the commit
zac (Tue, 23 Jan 2018 17:46:06 GMT):
But now that I think about it, I have no idea _what_ metadata they were talking about, and it seems like silly behavior.
AdamParker (Tue, 23 Jan 2018 17:47:30 GMT):
Yea I don't know on that one. I got in the habit of -m because I'm in a rush for lunch or to go home and the finger acrobatics to write the commit the other way always felt slow.
zac (Tue, 23 Jan 2018 17:47:58 GMT):
In any case, you can use `-s` with `-m`
AdamParker (Tue, 23 Jan 2018 17:48:35 GMT):
Oh, so it's more a case of no one has ever cared about signatures before. Gotcha.
zac (Tue, 23 Jan 2018 17:49:29 GMT):
Yes. You may have to do some git configging if you have never signed anything before
zac (Tue, 23 Jan 2018 17:49:45 GMT):
It just grabs your name and email and adds them to the end of the commit message
AdamParker (Tue, 23 Jan 2018 17:50:17 GMT):
DCO seems to like my signature this time
zac (Tue, 23 Jan 2018 17:51:38 GMT):
Hooray! It's an approval by me.
zac (Tue, 23 Jan 2018 17:51:44 GMT):
Thanks for fixing that.
AdamParker (Tue, 23 Jan 2018 17:52:52 GMT):
No problem
Dan (Tue, 23 Jan 2018 18:18:56 GMT):
thanks @AdamParker ! I'm rerunning the jenkins job for you. We'll have to add your git account to the known list so it works automagically for you. (You still always need the -s . We just have an extra check for jenkins that the job is from a known id)
Dan (Tue, 23 Jan 2018 18:19:39 GMT):
Zac, if you have time you could make a PR to add Adam to the COMMITTERS list. I'm in mtgs for the foreseeable future :-/
zac (Tue, 23 Jan 2018 18:38:19 GMT):
https://github.com/hyperledger/sawtooth-core/pull/1370
zac (Tue, 23 Jan 2018 18:39:07 GMT):
@AdamParker Is this the correct name and github username for you: https://github.com/delventhalz/sawtooth-core/blob/7befa0ebc31aaa6a1189508b8793257d5b00dcda/COMMITTERS#L121
AdamParker (Tue, 23 Jan 2018 18:39:24 GMT):
Perfect
AdamParker (Tue, 23 Jan 2018 18:42:15 GMT):
My name in lights for a single character :grinning:
A0107400 (Tue, 23 Jan 2018 18:56:54 GMT):
Hi everyone, I am trying to run this step from the edx tutorial on Sawtooth: docker-compose -f sawtooth-default.yaml up ...it keeps getting stuck on this: sawtooth-validator-default | [2018-01-23 18:52:21.204 INFO executor] c0f1eb0d1bb8ee2a456079e3abbf38a8fbdc6ec219235530f20ddee07de182e419fce3ca6402835808d34fc1460913adab35217a4524a8cddebd443b6341abf8 did not respond to the TpPing, removing transaction processor.
Any ideas on what I am missing?
donhoffman (Tue, 23 Jan 2018 20:55:18 GMT):
Has joined the channel.
Asettouf (Tue, 23 Jan 2018 21:48:59 GMT):
@A0107400 Have you started the transaction processor? (this part basically: https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS171x+3T2017/courseware/9faeeb6df17c4d25a205c965473925e5/016a2cd813884e32a0c3056c472d39b1/?activate_block_id=block-v1%3ALinuxFoundationX%2BLFS171x%2B3T2017%2Btype%40sequential%2Bblock%40016a2cd813884e32a0c3056c472d39b1)
Asettouf (Tue, 23 Jan 2018 21:49:28 GMT):
@A0107400 Have you started the transaction processor?
amundson (Tue, 23 Jan 2018 22:54:08 GMT):
@AdamParker nice. I'm still waiting on a single-letter doc PR to merge I submitted to Rocket (a Rust web framework) back in Oct.
Asettouf (Tue, 23 Jan 2018 23:08:07 GMT):
@AdamParker Actually 2 ^^
zac (Tue, 23 Jan 2018 23:27:16 GMT):
@AdamParker You are officially a Sawtooth contributor
hemantkshukla (Wed, 24 Jan 2018 01:08:07 GMT):
Has joined the channel.
AdamParker (Wed, 24 Jan 2018 05:26:15 GMT):
Haha, I know what it technically means but it feels somehow hollow. Maybe I'll earn my wings on STL-263, there's some self service there. Looks like you wrote that one up Zac, anything I should know past what I can read?
RiyazPanarwala (Wed, 24 Jan 2018 06:36:37 GMT):
Thanks Dan for information
RiyazPanarwala (Wed, 24 Jan 2018 06:36:56 GMT):
@Dan Thanks
RiyazPanarwala (Wed, 24 Jan 2018 06:45:47 GMT):
@Dan I need to encode smallbank.proto file in javascript so can you please provide any help on this.
RiyazPanarwala (Wed, 24 Jan 2018 06:46:54 GMT):
Also in latest releases of sawtooth 1.0.0rc6, new events are added in context
grkvlt (Wed, 24 Jan 2018 12:19:59 GMT):
hi. i'm in the process of making Seth compatible with the 1-0 release of Sawtooth, and I came across the new QUEUE_FULL state, not sure how to handle it? see here https://github.com/hyperledger/sawtooth-seth/pull/5/commits/2adae2fc8baf7fe57d667b7edf17c290f31ad6c8
MMSolo (Wed, 24 Jan 2018 13:22:46 GMT):
Has joined the channel.
gshap (Wed, 24 Jan 2018 13:24:45 GMT):
Has joined the channel.
gshap (Wed, 24 Jan 2018 13:32:16 GMT):
Hi. I am trying to run a program that uses the sawtooth sdk.
gshap (Wed, 24 Jan 2018 13:32:16 GMT):
Hi. I am trying to run a program that uses the sawtooth sdk.
However I am getting the following error. Cannot find module './protobuf_bundle.json'
Through debugging it seems that the SDK is not being built correctly. Note I am running on Windows.
When I try do step 4 from here: https://github.com/hyperledger/sawtooth-core/blob/master/BUILD.md
I am getting the error: bin/build_all: line 230: docker: command not found
I have docker installed for Windows and I am able to get sawtooth working from here: https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/docker.html
gshap (Wed, 24 Jan 2018 13:32:16 GMT):
Hi. I am trying to run a program that uses the sawtooth sdk. (https://github.com/Huawei-OSG/caliper)
However I am getting the following error. Cannot find module './protobuf_bundle.json'
Through debugging it seems that the SDK is not being built correctly. Note I am running on Windows.
When I try do step 4 from here: https://github.com/hyperledger/sawtooth-core/blob/master/BUILD.md
I am getting the error: bin/build_all: line 230: docker: command not found
I have docker installed for Windows and I am able to get sawtooth working from here: https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/docker.html
gshap (Wed, 24 Jan 2018 13:37:36 GMT):
Anyone able to help?
askmish (Wed, 24 Jan 2018 13:42:36 GMT):
docker is perhaps not in the PATH?
MMSolo (Wed, 24 Jan 2018 13:43:04 GMT):
Hi there, i am basically new to everything involving programming. I am currently following the blockchain for businesse course and im trying to install/get sawtooth on my ubuntu. Howerver when i enter "doker-compose -f sawtooth-default.yaml up" in my terminal i get the error: no such file or directory: u'./sawtooth-default.yaml'
MMSolo (Wed, 24 Jan 2018 13:43:12 GMT):
how can i solve this?
askmish (Wed, 24 Jan 2018 13:44:41 GMT):
@MMSolo could you verify if sawtooth-default.yaml file is in the same directory, where you're executing docker-compose
MMSolo (Wed, 24 Jan 2018 13:47:10 GMT):
Clipboard - January 24, 2018 2:46 PM
MMSolo (Wed, 24 Jan 2018 13:47:36 GMT):
does this sufice as proof?
amundson (Wed, 24 Jan 2018 14:29:34 GMT):
@grkvlt the queue full state basically means "retry later"; the validator is attempting to slow down the rate of work ingested so it doesn't accept batches which can't be processed in the next few blocks. in the integration tests, we retry to submit in a loop if it occurs. the CLI commands probably exit to the user. so the correct handling depends on context.
grkvlt (Wed, 24 Jan 2018 14:30:14 GMT):
understood. i guess throwing an exception isn't _exactly_ right, then!
amundson (Wed, 24 Jan 2018 14:30:44 GMT):
@RiyazPanarwala are you working on a smallbank ui?
amundson (Wed, 24 Jan 2018 14:34:15 GMT):
@MMSolo the question is whether you are in that directory on the command line in the window you are running the docker-compose command
jaredcorduan (Wed, 24 Jan 2018 15:05:18 GMT):
is `v1.1.0` the most stable up-to-date release? I just tried upgrading to this version and I am having issues with the validator raising uncaught exceptions relating to the tp settings family.
jaredcorduan (Wed, 24 Jan 2018 15:10:25 GMT):
it ultimately comes down to a `KeyError` on this dictionary get: https://github.com/hyperledger/sawtooth-core/blob/master/validator/sawtooth_validator/execution/context_manager.py#L547
MMSolo (Wed, 24 Jan 2018 15:22:29 GMT):
thnx @amundson ! found the problem
amundson (Wed, 24 Jan 2018 15:57:04 GMT):
@jaredcorduan the best release to use is 1.0.0rc6. we haven't done a release of 1.1.x yet, though that's what is in master
jaredcorduan (Wed, 24 Jan 2018 15:57:24 GMT):
ok, thank you!
thohidulk (Wed, 24 Jan 2018 16:37:48 GMT):
Has joined the channel.
jaredcorduan (Wed, 24 Jan 2018 16:53:51 GMT):
I still get the uncaught exception in the validator on `1.0.0rc6`. I can't tell if this is a logic error, ie that get in the link I posted above should always have that item in the dictionary (and hence we want the KeyError there), or if that get needs to be guarded.
zac (Wed, 24 Jan 2018 16:54:06 GMT):
@AdamParker Blast from the past. I assume you found the proposal in Google Docs: https://docs.google.com/document/d/1NcHE1ecWAD3FvhftPoiR4w9c8TuUIrNN7MXtFdoYiy4/edit#
AdamParker (Wed, 24 Jan 2018 16:55:13 GMT):
Sure did
zac (Wed, 24 Jan 2018 16:55:46 GMT):
That was written before the identity transaction family. I was not involved in its creation, but I assume that family should be leveraged with, or instead of, settings
zac (Wed, 24 Jan 2018 16:56:03 GMT):
Next step would be reading over those specs and giving that a think:
zac (Wed, 24 Jan 2018 16:56:05 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc6/transaction_family_specifications/identity_transaction_family.html
zac (Wed, 24 Jan 2018 16:56:17 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc6/transaction_family_specifications/settings_transaction_family.html
zac (Wed, 24 Jan 2018 16:58:50 GMT):
On rereading it, I also wonder if the settings lists should just be JSON arrays instead of trying to reinvent the wheel with a custom syntax. I dunno.
zac (Wed, 24 Jan 2018 17:00:03 GMT):
It's a very nicely fleshed out proposal if I do say so myself, but it is six-months out of date at this point. I think there needs to be some redesign. Not sure if @Dan or @amundson want to weigh in on it.
zac (Wed, 24 Jan 2018 17:03:12 GMT):
----------------------------
@gshap Yes. That error is indicative of the build failing. One of the things required for the JS SDK to work properly is to create a JSON file from the protobufs, which seems to be missing for you. I've never tried to build the JS SDK from source on Windows. Is there a reason you can't just `npm install` it?
zac (Wed, 24 Jan 2018 17:05:32 GMT):
`npm install --save sawtooth-sdk@^1.0.0-rc` shoould get you the newest release candidate if you are looking for 1.0 instead of 0.8
amundson (Wed, 24 Jan 2018 18:53:25 GMT):
@zac JSON may be a poor choice for settings content if different serialization libraries produce slightly different results (you need byte-for-byte accuracy)
zac (Wed, 24 Jan 2018 18:54:57 GMT):
Yeah, that must be why we went with something else. Though JSON arrays are ordered. If you specified a JSON array with no whitespace, it should _probably_ be deterministic. Might need some more research though.
AlanDickman (Wed, 24 Jan 2018 19:44:01 GMT):
Has joined the channel.
yoni (Wed, 24 Jan 2018 22:06:53 GMT):
hi, having some problems with subscribing to special event from TP, is there any example of subscribing to specific event and not just to general state change event?
yoni (Wed, 24 Jan 2018 22:07:53 GMT):
tried following this example:https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc6/rest_api/state_delta_websockets.html?highlight=event but couldn't subscribe to the specific event sent from my transaction processor
zac (Wed, 24 Jan 2018 22:14:43 GMT):
What sort of "specific event" are you talking about?
yoni (Wed, 24 Jan 2018 22:21:37 GMT):
in transaction processor i used the context api addEvent with event_type="my_event" and some attributes, from debugging it seems event is being sent, now trying to subscribe to it from client side
eliotlandrum (Wed, 24 Jan 2018 22:40:59 GMT):
Has joined the channel.
zac (Wed, 24 Jan 2018 23:10:23 GMT):
ah
zac (Wed, 24 Jan 2018 23:10:34 GMT):
I don't think that's possible from the REST API
zac (Wed, 24 Jan 2018 23:11:04 GMT):
You'd have to subscribe directly via ZMQ
zac (Wed, 24 Jan 2018 23:12:44 GMT):
There are docs here: https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc6/app_developers_guide/event_subscriptions.html
zac (Wed, 24 Jan 2018 23:14:22 GMT):
What language are you using?
RiyazPanarwala (Thu, 25 Jan 2018 04:55:08 GMT):
@amundson i am trying to use smallbank family with our app. so doing some research on that
RiyazPanarwala (Thu, 25 Jan 2018 04:55:51 GMT):
@amundson right now i am developing an app using sawtooth latest 1.0.0rc6 release
RiyazPanarwala (Thu, 25 Jan 2018 04:57:16 GMT):
just curious to know about more in smallbank family if that supports ERC20 token type facility
amundson (Thu, 25 Jan 2018 05:05:03 GMT):
@RiyazPanarwala the spec is here if you haven't seen it already - https://sawtooth.hyperledger.org/docs/core/releases/1.0.0rc6/transaction_family_specifications/smallbank_transaction_family.html
amundson (Thu, 25 Jan 2018 05:06:23 GMT):
we use it for testing and benchmarking activities
amundson (Thu, 25 Jan 2018 05:06:23 GMT):
we use it for testing and performance activities
RiyazPanarwala (Thu, 25 Jan 2018 05:08:04 GMT):
means i need to encode .proto in javascript
RiyazPanarwala (Thu, 25 Jan 2018 05:08:25 GMT):
i have not used go before
RiyazPanarwala (Thu, 25 Jan 2018 05:09:42 GMT):
just try to send batches using javascript (with smallbank family). but i got some error in encoding
amundson (Thu, 25 Jan 2018 05:10:21 GMT):
we use Rust for generating load (the client) and Go for the transaction processor. I'm not super familiar with writing javascript clients though. what's the error?
RiyazPanarwala (Thu, 25 Jan 2018 05:19:36 GMT):
Actually i have not done proper encoding of payload
RiyazPanarwala (Thu, 25 Jan 2018 05:20:03 GMT):
like in go you have to pack payload using proto.marshall
RiyazPanarwala (Thu, 25 Jan 2018 05:20:20 GMT):
so transaction processor will decode using proto.unmarshall
RiyazPanarwala (Thu, 25 Jan 2018 05:22:32 GMT):
But i am using node so have to encode payload in javascript. Need to figure out how to do payload encoding in node js which will do same as proto.marshal
amundson (Thu, 25 Jan 2018 05:31:59 GMT):
you may want to reference sawtooth supply chain as it has some javascript code that does that. in particular, https://github.com/hyperledger/sawtooth-supply-chain/blob/master/fish_client/src/services/payloads.js and https://github.com/hyperledger/sawtooth-supply-chain/blob/master/fish_client/src/services/transactions.js
amundson (Thu, 25 Jan 2018 05:34:02 GMT):
this too - https://github.com/hyperledger/sawtooth-supply-chain/blob/master/fish_client/scripts/compile_protos.js
RiyazPanarwala (Thu, 25 Jan 2018 06:20:23 GMT):
thanks will look into this
yoni (Thu, 25 Jan 2018 07:46:44 GMT):
@zac thanks for the direction will try it now, using javascript for both sending and subscribing to the event
RiyazPanarwala (Thu, 25 Jan 2018 13:03:38 GMT):
@amundson thanks for providing documents.
RiyazPanarwala (Thu, 25 Jan 2018 13:05:17 GMT):
Sometimes in sawtooth 1.0.0rc6, when i submit batch requests the apply method of transaction processor doesn't get called.
RiyazPanarwala (Thu, 25 Jan 2018 13:06:26 GMT):
I have to down the validator using docker-compose and restart it again for this type of case.
grkvlt (Thu, 25 Jan 2018 13:19:00 GMT):
does the supply-chain demo app now support 1-0 sawtooth? i remember not being able to get it to work when i tried in december...
grkvlt (Thu, 25 Jan 2018 13:21:07 GMT):
@RiyazPanarwala if you want to support tokens you must write an implementation of an ERC-20 token that can be used by the https://github.com/hyperledger/sawtooth-seth transaction processor, which implements the EVM and allows solidity to be used
Dan (Thu, 25 Jan 2018 15:47:19 GMT):
@grkvlt I think @zac updated supply-chain recently to sawtooth1-0 api or is in progress on that.
Dan (Thu, 25 Jan 2018 15:48:14 GMT):
@askmish Shawn caught a little doc change that should go into https://github.com/hyperledger/sawtooth-core/pull/1367. Could you please add that and then we can get this into the master - > 1.0 test / backport process. thx.
AdamParker (Thu, 25 Jan 2018 16:26:19 GMT):
If SGX isn't available, how is PoeT running? Dev mode or something?
Dan (Thu, 25 Jan 2018 16:29:23 GMT):
3 consensus options: DevMode, Poet Simulated Enclave (partial BFT), PoET SGX (full BFT).
AdamParker (Thu, 25 Jan 2018 16:31:17 GMT):
I recently read some rumors about Raft support in 1-0. Did that make it?
Dan (Thu, 25 Jan 2018 16:31:37 GMT):
nope :( had to push that out .. probably not for another quarter
AdamParker (Thu, 25 Jan 2018 16:37:00 GMT):
:/ That's a shame. Alright, Simulated Enclave should stand in dev.
AdamParker (Thu, 25 Jan 2018 17:08:09 GMT):
Does this Amazon instance have PoET SGX support. This tool I'm running says SGX is not supported but I figured I'd ask.
AdamParker (Thu, 25 Jan 2018 17:08:09 GMT):
Does this Amazon instance have PoET SGX support? This tool I'm running says SGX is not supported but I figured I'd ask.
zac (Thu, 25 Jan 2018 17:34:11 GMT):
@yoni Sawtooth Supply Chain uses JavaScript to sync state updates with a database. These aren't custom events, but it should be a good example to follow regardless: https://github.com/delventhalz/sawtooth-supply-chain/tree/ledger-sync-distribute/ledger_sync
yoni (Thu, 25 Jan 2018 17:35:37 GMT):
thanks
zac (Thu, 25 Jan 2018 17:36:22 GMT):
Note that I linked to my fork, because right now the subscription is handled by the same process as the REST API. There is an outstanding PR from this branch which splits it of. So master will soon look like this, but not yet.
zac (Thu, 25 Jan 2018 17:38:19 GMT):
@grkvlt @Dan Yep, Supply Chain is all 1.0ed up
grkvlt (Thu, 25 Jan 2018 17:46:48 GMT):
as far as i know aws does not _yet_ support SGX on any of their instances - your best bet in the cloud is probably microsoft azure and https://azure.microsoft.com/en-gb/blog/introducing-azure-confidential-computing/
AdamParker (Thu, 25 Jan 2018 17:56:43 GMT):
Yea, that was my feeling. Good to get a second opinion.
Dan (Thu, 25 Jan 2018 18:46:46 GMT):
Yep, if you want SGX you're best bet right now is physical hosts. We use NUCs in testing (they're just cheap little computers).
AdamParker (Thu, 25 Jan 2018 18:47:40 GMT):
I had forgotten about NUCs. I have a proposed project that is looking for SBC style computers. NUC might just fit the bill. Time to go shopping.
Dan (Thu, 25 Jan 2018 18:49:35 GMT):
have fun :) https://www.google.com/search?q=nuc+lego+rack&rlz=1C1GGRV_enUS751US752&tbm=isch&tbo=u&source=univ&sa=X&ved=0ahUKEwi0nobP4_PYAhUF1GMKHcaUBbcQsAQINA&biw=970&bih=718&dpr=1.25
RyanBennett (Thu, 25 Jan 2018 19:01:23 GMT):
Has joined the channel.
bill.cawthra (Fri, 26 Jan 2018 01:29:57 GMT):
Any guides on how to enable `Poet Simulated Enclave`?
BhaskarKhadka (Fri, 26 Jan 2018 07:11:09 GMT):
Has joined the channel.
BhaskarKhadka (Fri, 26 Jan 2018 07:15:43 GMT):
Hi, I am new here. I instantiated a couple of sawtooth-supply-chain nodes, and trying to get them in a network... I've configured the validators to start up wiht the -peers, and --endpoints option. Now I get "RECEIVED A NETWORK_CONNECT, but no handler defined" error. Is there a guide I can use to set up a network?
Aleshia (Fri, 26 Jan 2018 16:17:49 GMT):
Has joined the channel.
Aleshia (Fri, 26 Jan 2018 16:21:15 GMT):
Morning Everyone, I thought I would finally Introduce myself because I've been lurking here for a while. I'm a M.S. Cyber Engineering student looking to incorporate Sawtooth into my thesis on aircraft maintenance records and I'll finally be working on the code today. Is this an appropriate place to ask specific questions If I have any?
AdamParker (Fri, 26 Jan 2018 16:23:26 GMT):
Aircraft Maintenance Records! As a man who used to correct maintenance records when management didn't want him on the flightline I can say that database will store a lot of fat finger corrections.
Aleshia (Fri, 26 Jan 2018 16:59:19 GMT):
@AdamParker Agreed, however a lot of mechanics I've interviewed are appalled by the idea. Nevertheless, it has been an interesting case study! Time has come to make a prototype ledger for it
Johnjam (Fri, 26 Jan 2018 17:00:57 GMT):
Hi all, can someone tell me what kind of string representation (buffer hash ? encoding ?) the rest-api returns for the transaction payloads ? e.g. when I request at GET /blocks, I got a payload like "CAESNwocc2F3dG9vdGguY29uc2Vuc3VzLmFsZ29yaXRobRIEcG9ldBoRMTUxNjk4NTYyOS44NDIxODI=" for a sawtooth_settings transaction. I would like to know if I can revert this string to a buffer to decode it in a protobuf object. Thanks =)
AdamParker (Fri, 26 Jan 2018 17:01:24 GMT):
Base64
AdamParker (Fri, 26 Jan 2018 17:01:24 GMT):
Base64 then your underlying encoding
Johnjam (Fri, 26 Jan 2018 18:58:36 GMT):
Thank you, I'll try !
bill.cawthra (Fri, 26 Jan 2018 22:48:28 GMT):
hi y'all, can anyone tell me about this particular pub key: https://github.com/hyperledger/sawtooth-core/blob/master/consensus/poet/simulator/packaging/simulator_rk_pub.pem ? how's it created, what's it used for, should it be unique to the particular validator network?
bill.cawthra (Fri, 26 Jan 2018 22:49:47 GMT):
i did find this link that helps... a little. https://github.com/hyperledger/sawtooth-core/blob/5094a9a1a7d086c14704e7055cfad9de77d1e6aa/consensus/poet/simulator/packaging/readme.txt
Dan (Fri, 26 Jan 2018 23:10:04 GMT):
Hi @bill.cawthra that key does not need to be unique per network. It's used to check the authenticity of an "attestation verification report".
Dan (Fri, 26 Jan 2018 23:11:29 GMT):
In the enclave simulator since there isn't real hardware attestation we just pick a key to act like the service that would verify attestations.
Dan (Fri, 26 Jan 2018 23:12:22 GMT):
In an actual TEE implementation like SGX, there would be a service that verifies the hardware attestations.
Dan (Fri, 26 Jan 2018 23:13:37 GMT):
The attestations themselves are used for admitting a node into the consensus population.
bill.cawthra (Fri, 26 Jan 2018 23:14:28 GMT):
thank you @Dan
rhaenni (Sat, 27 Jan 2018 06:13:55 GMT):
Has joined the channel.
rhaenni (Sat, 27 Jan 2018 06:18:02 GMT):
I just stumbled across sawtooth and done some reading on PoeT, I am a bit confused because some high level articles about sawtooth say it is permission based, but in the sawtooth docs itself it says it can work permissionless as well, I would like to figure out if sawtooth is usable in a public blockchain scenario (permissionless) and what the security implications would be, e.g. how easy is it for bad actors to become the elected validator in PoeT assuming that all participants are public?
BeeKay (Sat, 27 Jan 2018 06:36:32 GMT):
@Zac: how can I replicate STL-945?
neoscreenager (Sat, 27 Jan 2018 09:25:34 GMT):
Has joined the channel.
fjarino (Sat, 27 Jan 2018 19:19:21 GMT):
Has joined the channel.
romankrav4 (Sun, 28 Jan 2018 13:45:27 GMT):
Has joined the channel.
romankrav4 (Sun, 28 Jan 2018 13:49:16 GMT):
Hi for all. Is someone who test the transactions capacity of Sawtooth? Interested in at least the approximate values. In the official documentation, such information is not available.
jlazyj (Sun, 28 Jan 2018 18:56:23 GMT):
Has joined the channel.
jlazyj (Sun, 28 Jan 2018 18:58:00 GMT):
Not a coder but I would like to help bring sawtooth to my industry. Any advice?
Dan (Sun, 28 Jan 2018 19:26:03 GMT):
@rhaenni the design of PoET using SGX is meant to provide byzantine fault tolerance regardless of permissioned or public network deployment policies. PoET using the simulated enclave (no Hardware Trusted Execution Environment) provides only partial byzantine fault tolerance and is more suited to only permissioned networks.
Dan (Sun, 28 Jan 2018 19:29:12 GMT):
@romankrav4 we have not published any throughput numbers, in part because these are likely to be application specific and also because Hyperledger is working on defining throughput metrics generally.
My guidance would be to look at business problems for which public blockchain throughput is tolerable. Sawtooth should be able to exceed that requirement.
Dan (Sun, 28 Jan 2018 19:30:48 GMT):
@jlazyj Look for problems that require multiple companies to read and write from the same database. Anything where multiple companies have to agree on information. If you have a business problem like that, then Sawtooth can probably play a key role in a technical solution. In general blockchains are a piece of a technical solution not, however, by themselves a complete solution to all technical and business problems.
welstein (Mon, 29 Jan 2018 02:57:44 GMT):
Has joined the channel.
Jayamine (Mon, 29 Jan 2018 03:18:29 GMT):
Has joined the channel.
RiyazPanarwala (Mon, 29 Jan 2018 04:54:39 GMT):
@amundson @Dan can i have sawtooth-seth written in node.js?
RiyazPanarwala (Mon, 29 Jan 2018 04:55:43 GMT):
Also, what are the changes in sawtooth 1.0.0rc7 release? i am using 1.0.0rc6.
harshmaur (Mon, 29 Jan 2018 05:09:53 GMT):
Has joined the channel.
ahmedanees (Mon, 29 Jan 2018 14:25:46 GMT):
Has joined the channel.
ahmedanees (Mon, 29 Jan 2018 14:26:51 GMT):
Hi everyone , I'm following the sawtooth tutorial in the edx.org blockchain for business course and I'm wondering about how I could get 2 nodes on different machines to share transactions and blockchain state?
lujangusCollection (Mon, 29 Jan 2018 14:30:32 GMT):
Has joined the channel.
Dan (Mon, 29 Jan 2018 15:08:55 GMT):
Per the other thread @ahmedanees Ok just edit the sawtooth config files to point to each other's IP addresses. I'll point you to a recent thread ...
https://lists.hyperledger.org/pipermail/hyperledger-stl/2018-January/000155.html
amundson (Mon, 29 Jan 2018 15:09:16 GMT):
@RiyazPanarwala I'll have release notes for 1.0.0rc7 out later in the morning
ahmedanees (Mon, 29 Jan 2018 15:10:49 GMT):
ok thanks @Dan let me see
Dan (Mon, 29 Jan 2018 15:10:57 GMT):
@zac, @ahmedanees is referencing the edx material which turns out to be in this repo. https://github.com/hyperledger/education/tree/master/LFS171x/sawtooth-material/sawtooth-tuna. Do you think that's v0.8.? ? Maybe @tkuhrt knows? In the readme we should link to the right version of the docs.
zac (Mon, 29 Jan 2018 15:46:47 GMT):
@BeeKay You need to subscribe to events which is not _super_ straightforward. You can currently reproduce by cloning either Supply Chain or Marketplace and running `docker-compose up`:
https://github.com/hyperledger/sawtooth-supply-chain
https://github.com/hyperledger/sawtooth-marketplace
zac (Mon, 29 Jan 2018 15:46:47 GMT):
@BeeKay You need to subscribe to events which is not _super_ straightforward. You can reproduce by cloning Supply Chain and running `docker-compose up`:
https://github.com/hyperledger/sawtooth-supply-chain
zac (Mon, 29 Jan 2018 15:47:46 GMT):
That will start up a validator in very verbose mode (`-vv`) and start up an event subscriber, and send in some transactions.
zac (Mon, 29 Jan 2018 15:49:09 GMT):
You'll see some of the Validator logs are logging out the entire entire event.
zac (Mon, 29 Jan 2018 15:49:09 GMT):
You'll see some of the Validator logs are logging out the entire event object.
zac (Mon, 29 Jan 2018 15:49:09 GMT):
You'll see some of the Validator logs are logging out the entire event.
zac (Mon, 29 Jan 2018 15:49:38 GMT):
So there is a debug log in there somewhere, which is just logging out an event object. That should be changed to just its id or something.
zac (Mon, 29 Jan 2018 15:49:38 GMT):
So there is a debug logger in there somewhere, which is just logging out an event object. That should be changed to just its id or something.
zac (Mon, 29 Jan 2018 15:56:48 GMT):
@Dan Yeah, that's running on 0.8
AdamParker (Mon, 29 Jan 2018 15:59:28 GMT):
Can anyone shine some light on how the Consensus and Journal talk? Or how a consensus is loaded?
zac (Mon, 29 Jan 2018 16:39:15 GMT):
@Dan Although "running" might be the wrong word. It is two components which are coded against the 0.8 JS SDK. They don't have a docker-compose file in the repo, so someone might try to run it against 1.0 or something. It would break in that case.
AdamParker (Mon, 29 Jan 2018 16:39:38 GMT):
```adam@ubuntu:~/sawdost/tmp$ sawset proposal create -k /etc/sawtooth/keys/validator.priv -o sawset.batch sawtooth.consensus.algorithm=poet sawtooth.poet.initial_wait_timer=1 sawtooth.poet.target_wait_time=1 sawtooth.poet.minimum_wait_time=1 sawtooth.poet.population_estimate_sample_size=1 sawadm genesis sawset.batch
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_cli/sawset.py", line 652, in main_wrapper
main()
File "/usr/lib/python3/dist-packages/sawtooth_cli/sawset.py", line 636, in main
_do_config_proposal_create(args)
File "/usr/lib/python3/dist-packages/sawtooth_cli/sawset.py", line 89, in _do_config_proposal_create
for setting in settings]
File "/usr/lib/python3/dist-packages/sawtooth_cli/sawset.py", line 89, in
AdamParker (Mon, 29 Jan 2018 16:43:50 GMT):
Is:
```sawset proposal create \
-k
AdamParker (Mon, 29 Jan 2018 16:43:50 GMT):
Is:
```sawset proposal create \
-k
grkvlt (Mon, 29 Jan 2018 17:04:29 GMT):
yes, looks like it
AdamParker (Mon, 29 Jan 2018 17:04:45 GMT):
Even with that change I'm not sure what I'm doing here because I clean out the `/var/lib/sawtooth/` directory, go through those two commands and boot the validator and it crashes with
```[2018-01-29 10:58:51.757 ERROR cli] Unable to create genesis block, due to batch 4d45a2479d9c91ea4896429eec30cda6b54f8bd218612542bb9b5f5bcf0fa7dc2183af4bca5b2638b45769163ad1a2be559c5074b0ce88bf6a61fd5ea97b2c5b````
AdamParker (Mon, 29 Jan 2018 17:04:45 GMT):
Even with that change I'm not sure what I'm doing here because I clean out the `/var/lib/sawtooth/` directory, go through those two commands and boot the validator and it crashes with
```[2018-01-29 10:58:51.757 ERROR cli] Unable to create genesis block, due to batch 4d45a2479d9c91ea4896429eec30cda6b54f8bd218612542bb9b5f5bcf0fa7dc2183af4bca5b2638b45769163ad1a2be559c5074b0ce88bf6a61fd5ea97b2c5b```
AdamParker (Mon, 29 Jan 2018 17:06:46 GMT):
But I'll file a pull for that change I guess.
pschwarz (Mon, 29 Jan 2018 18:21:55 GMT):
@AdamParker You'll need to run `sawset genesis` before any settings:
```
$ sawset genesis \
-k
pschwarz (Mon, 29 Jan 2018 18:21:55 GMT):
@AdamParker You'll need to run `sawset genesis` before any settings:
```
$ sawset genesis \
-k
AdamParker (Mon, 29 Jan 2018 18:44:00 GMT):
That worked. Thanks, @pschwarz.
Dan (Mon, 29 Jan 2018 19:36:30 GMT):
@AdamParker also note in that list of sawtooth settings above, I've taken out minimum_wait_time in a recent PR. You'll see that in RC7.
AdamParker (Mon, 29 Jan 2018 19:36:57 GMT):
Would you like me to amend my commit for that?
AdamParker (Mon, 29 Jan 2018 19:38:10 GMT):
Oh wait, that's already changed in master. I didn't notice when I was doing my pull. I copied that from rc6.
amundson (Mon, 29 Jan 2018 20:05:03 GMT):
1.0.0rc7 release notes - https://lists.hyperledger.org/pipermail/hyperledger-stl/2018-January/000157.html
jmason900 (Mon, 29 Jan 2018 20:55:26 GMT):
Has joined the channel.
jmason900 (Mon, 29 Jan 2018 21:01:20 GMT):
Ubuntu - how to remove full sawtooth install from docker easily?
I’m following the edx Hyperledger course and failed on the Sawtooth install in docker-compose using the yaml file.
docker-compose -f sawtooth-default.yaml up
After correcting the docker-compose version, re-running default Sawtooth install fails. Is there a simple way to clear all of the items from docker across all the containers ?? thanks
AdamParker (Mon, 29 Jan 2018 21:08:52 GMT):
What's the status of the raft consensus? PoET makes cloud installs pretty expensive.
amundson (Mon, 29 Jan 2018 21:15:39 GMT):
@jmason900 I suspect that yaml file from the course is too old (from before we specified the major/minor version in the docker compose files). you might try modifying it such that all ":latest" strings are ":0.8"
jmason900 (Mon, 29 Jan 2018 21:41:58 GMT):
@amundson thanks .. that did the trick on the yaml file - set version "2.0" and changed the suffix from: :latest to :0.8 .. it all loads then starts up and runs ... end state is the initial blocks are created and the server started.. if I need to shut down the server and restart at some point, is there anything I need to do for the proper shutdown and restart of Sawtooth now that it's installed ?? thanks
Sutrannu (Mon, 29 Jan 2018 22:27:22 GMT):
Has joined the channel.
amundson (Mon, 29 Jan 2018 22:44:59 GMT):
@jmason900 everything runs inside docker containers, so you can docker-compose up and then ctrl-c when you are done, or docker-compose down, etc.
bill.cawthra (Tue, 30 Jan 2018 01:48:17 GMT):
if we want to run using a block_info injector, do we need to build our own docker container?
bill.cawthra (Tue, 30 Jan 2018 01:48:54 GMT):
after creating a genesis block with
```
sawset proposal create \
-k /etc/sawtooth/keys/validator.priv \
sawtooth.validator.batch_injectors=block_info \
'sawtooth.validator.block_validation_rules=NofX:1,block_info;XatY:block_info,0;local:0' \
-o config.batch && \
```
the validator will eventually error with...
```
MainThread publisher ERROR No module named 'sawtooth_block_info'
```
bill.cawthra (Tue, 30 Jan 2018 01:49:35 GMT):
it seems when y'all test this, you're volume mounting the project into the test container:
https://github.com/hyperledger/sawtooth-core/blob/v1.0.1/integration/sawtooth_integration/docker/test_block_info_injector.yaml
roblav96 (Tue, 30 Jan 2018 02:24:02 GMT):
Has joined the channel.
Dan (Tue, 30 Jan 2018 03:46:46 GMT):
@AdamParker probably a couple quarters out. Hard to say. Went back burner to tighten up 1.0
Dan (Tue, 30 Jan 2018 03:47:11 GMT):
What do you mean about cloud cost though?
AdamParker (Tue, 30 Jan 2018 03:49:04 GMT):
SGX access, IBM is the only "cloud" we've found with availability.
AdamParker (Tue, 30 Jan 2018 03:51:02 GMT):
Trouble is, it's 150/mo per machine.
Dan (Tue, 30 Jan 2018 04:04:11 GMT):
I see. I think azure also has sgx. Probably see it across CSPs soon. But meanwhile PoET sim will give
Dan (Tue, 30 Jan 2018 04:04:31 GMT):
You CFT on cloud without SGX.
Dan (Tue, 30 Jan 2018 04:04:42 GMT):
Raft is also CFT.
AdamParker (Tue, 30 Jan 2018 04:10:39 GMT):
Somehow I thought Raft was full BFT but no you appear to be right. I guess I don't need full BFT in a private network, right?
AdamParker (Tue, 30 Jan 2018 04:10:39 GMT):
Somehow I thought Raft was full BFT but no you appear to be right. I guess it's kind of alright. I'd like full BFT in the cloud but CFT can move forward.
glenik (Tue, 30 Jan 2018 04:41:57 GMT):
Has joined the channel.
glenik (Tue, 30 Jan 2018 04:43:43 GMT):
Hey all. Are validators meant to run at each "peer" organization with it's branches or remote servers serving as processors? I am trying to grasp the concept of validators/processors in the context of a use case.
RiyazPanarwala (Tue, 30 Jan 2018 04:58:21 GMT):
Thanks @amundson
Dan (Tue, 30 Jan 2018 04:58:42 GMT):
Each validator is like a "full node" . Transaction processors are like apps or smart contracts. Each validator should run all TPs that the network requires.
Dan (Tue, 30 Jan 2018 05:00:07 GMT):
@AdamParker PoET sim has partial bft. Eg if one validator starts claiming too many blocks the other nodes stop accepting them. See ztest.
glenik (Tue, 30 Jan 2018 05:00:47 GMT):
Okay. That said the concept of PoET is at the validator level (not the processor?)
Dan (Tue, 30 Jan 2018 05:01:11 GMT):
Yep
Dan (Tue, 30 Jan 2018 05:01:29 GMT):
PoET is a consensus protocol
glenik (Tue, 30 Jan 2018 05:01:39 GMT):
between the validators, got it.
glenik (Tue, 30 Jan 2018 05:05:08 GMT):
Is it correct to say that in a nakamoto consensus model, the validator and processor would both be the same abstraction ?
Dan (Tue, 30 Jan 2018 05:05:45 GMT):
Not really
glenik (Tue, 30 Jan 2018 05:06:25 GMT):
hmm okay, what would be the processor in the equivalent of a bitcoin core?
Dan (Tue, 30 Jan 2018 05:07:19 GMT):
Utxo
Dan (Tue, 30 Jan 2018 05:07:51 GMT):
Except instead of just utxo you can write any business rules
Dan (Tue, 30 Jan 2018 05:08:07 GMT):
And you can have many of them
AdamParker (Tue, 30 Jan 2018 05:09:28 GMT):
Do you have a rough latency number for PoET-SGX and PoET-Sim?
glenik (Tue, 30 Jan 2018 05:09:29 GMT):
got it. Gonna do some more reading now. Thanks for that clarification.
BeeKay (Tue, 30 Jan 2018 05:11:54 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=c5FdEB7TSrz89QLNa) @zac Thank you Zac. Let me see :)
Dan (Tue, 30 Jan 2018 05:12:07 GMT):
@AdamParker not really. It depends a lot on the app. We don't have an artificial block size limit like btc so you can stuff a lot in a block if you like. I normally test with 30s blocks
Dan (Tue, 30 Jan 2018 05:12:54 GMT):
And there shouldn't be any difference between with or without sgx.
AdamParker (Tue, 30 Jan 2018 05:13:49 GMT):
Hmmm, I've never really tested it. We have half an app at work with like 500 Byte payload that doesn't really care about latency. I have a personal project with a tiny payload but I'd want good latency on. Just going to have to test.
glenik (Tue, 30 Jan 2018 05:46:10 GMT):
deploying sawtooth on docker " writing file: /root/.sawtooth/keys/my_key.pub" is taking over 15 mins, is that normal?
amundson (Tue, 30 Jan 2018 05:52:12 GMT):
no, it is not
glenik (Tue, 30 Jan 2018 05:53:04 GMT):
okay thought so just wanted to double check before a kc it
glenik (Tue, 30 Jan 2018 05:53:14 GMT):
or ck it...
glenik (Tue, 30 Jan 2018 06:13:45 GMT):
reran it, still stuck, any thoughts?
krishnamvv (Tue, 30 Jan 2018 06:39:17 GMT):
Has joined the channel.
FrankCastellucci (Tue, 30 Jan 2018 11:28:10 GMT):
Mental block: Running macos 10.12.16 with docker. Cloned sawtooth-core and did a `bin/build_all -l python` and have written a simple TP. I know to setup a compose to include the TP but I am stuck on how to structure my project Dockerfile so that my python code accesses the python_sdk for either running my TP or debugging my TP. Any examples, insights or references would be helpful in getting past this one...
ahmedanees (Tue, 30 Jan 2018 12:33:37 GMT):
is there any reference links to write and application just like edx for 1.0.0rc7
https://github.com/hyperledger/education/tree/master/LFS171x/sawtooth-material/sawtooth-tuna
ahmedanees (Tue, 30 Jan 2018 12:33:37 GMT):
Here is the path /home/ahmed/work/pu/processor/handlers.js:126
class JSONHandler extends TransactionHandler {
^
TypeError: Class extends value undefined is not a function or null
at Object.
Dan (Tue, 30 Jan 2018 13:02:44 GMT):
https://www.coindesk.com/intels-hyperledger-blockchain-now-ready-business/
ahmedanees (Tue, 30 Jan 2018 13:17:33 GMT):
How to check latest version of sawtooth-sdk
ahmedanees (Tue, 30 Jan 2018 13:18:02 GMT):
i have install by using
npm install --save sawtooth-sdk
Sawtooth-tuna-chain-client@0.0.0 /path
└── sawtooth-sdk@0.8.13
ahmedanees (Tue, 30 Jan 2018 13:18:12 GMT):
it show .8.13
ahmedanees (Tue, 30 Jan 2018 13:18:23 GMT):
is this teh letest one?
ahmedanees (Tue, 30 Jan 2018 13:18:23 GMT):
is this teh latest one?
ahmedanees (Tue, 30 Jan 2018 13:24:43 GMT):
can anyone tell me
Module not found: Error: Can't resolve 'sawtooth-sdk/client
ahmedanees (Tue, 30 Jan 2018 13:26:33 GMT):
what is the actual path of client in └── sawtooth-sdk@1.0.1
Dan (Tue, 30 Jan 2018 14:03:39 GMT):
https://techcrunch.com/2018/01/30/hyperledger-releases-new-open-source-distributed-ledger-called-hyperledger-sawtooth/
zac (Tue, 30 Jan 2018 14:11:38 GMT):
@ahmedanees Unfortunately there is no client in the 1.0 JS SDK. We "feature gated" it, as he we have yet to arrive at an API we are satisfied with, and want to support going forward. It should be a part of a future release, but in the mean time, you'll have to build and sign the transactions manually. You can see this done in Sawtooth Supply Chain.
Transactions: https://github.com/hyperledger/sawtooth-supply-chain/blob/master/fish_client/src/services/transactions.js
Batches: https://github.com/hyperledger/sawtooth-supply-chain/blob/master/server/blockchain/batcher.js
zac (Tue, 30 Jan 2018 14:12:26 GMT):
Note that creating a `TransactionList` is unnecessary if you are building transactions and batches in the same process.
zac (Tue, 30 Jan 2018 14:14:09 GMT):
@FrankCastellucci Check out this Dockerfile: https://github.com/hyperledger/sawtooth-marketplace/blob/master/rest_api/Dockerfile#L23
ahmedanees (Tue, 30 Jan 2018 14:15:01 GMT):
thanks @zac let me see this
brankoterzic (Tue, 30 Jan 2018 14:15:19 GMT):
Has joined the channel.
zac (Tue, 30 Jan 2018 14:16:37 GMT):
That repo was `0.8` and got converted over. If it helps to see the diff, that commit is here: https://github.com/hyperledger/sawtooth-supply-chain/commit/a019c8ea9e260170660c0e079755d7babad6c12e
zac (Tue, 30 Jan 2018 14:17:14 GMT):
@Dan
> _"Long considered one of the most promising codebases hosted by the Hyperledger blockchain consortium, Intel's Sawtooth software is officially ready for enterprise use."_
zac (Tue, 30 Jan 2018 14:17:19 GMT):
Well now.
zac (Tue, 30 Jan 2018 14:17:32 GMT):
That's very nice of them to say.
Juanan_Tejero (Tue, 30 Jan 2018 14:38:26 GMT):
Has joined the channel.
ahmedanees (Tue, 30 Jan 2018 15:06:55 GMT):
handler.txt
ahmedanees (Tue, 30 Jan 2018 15:07:31 GMT):
handlers.js:126
class JSONHandler extends TransactionHandler {
^
TypeError: Class extends value undefined is not a function or null
at Object.
ahmedanees (Tue, 30 Jan 2018 15:08:05 GMT):
can any one guide me how to fix this issue
shanlusun (Tue, 30 Jan 2018 15:08:12 GMT):
Has joined the channel.
ahmedanees (Tue, 30 Jan 2018 15:28:31 GMT):
FIxed ^ issue by this const { TransactionHandler } = require('sawtooth-sdk/processor/handler') path setting
ahmedanees (Tue, 30 Jan 2018 15:29:18 GMT):
Now getting this issue
handler.versions.forEach(version => {
^
TypeError: handler.versions.forEach is not a function
ahmedanees (Tue, 30 Jan 2018 15:29:39 GMT):
sawtooth-sdk processor-index.js:161:26
ahmedanees (Tue, 30 Jan 2018 15:30:08 GMT):
@zac or anyone else please guide
amundson (Tue, 30 Jan 2018 15:35:14 GMT):
Sawtooth 1.0.1 release notes (more of a summary this time) - https://lists.hyperledger.org/pipermail/hyperledger-stl/2018-January/000159.html
zac (Tue, 30 Jan 2018 15:42:18 GMT):
@ahmedanees That's odd. Can you attach the source code where you set up the TransactionHandler and TransactionProcessor?
zac (Tue, 30 Jan 2018 15:48:55 GMT):
If I had to guess, I would say you passed in the version for your TransactionHandler as a string, it should be an array
pschwarz (Tue, 30 Jan 2018 15:49:14 GMT):
Does the constructor of your handler look something like this:
```
class IntegerKeyHandler extends TransactionHandler {
constructor () {
super(INT_KEY_FAMILY, ['1.0'], [INT_KEY_NAMESPACE])
}
...
```
pschwarz (Tue, 30 Jan 2018 15:49:14 GMT):
Does the constructor of your handler look something like this:
```js
class IntegerKeyHandler extends TransactionHandler {
constructor () {
super(INT_KEY_FAMILY, ['1.0'], [INT_KEY_NAMESPACE])
}
...
```
pschwarz (Tue, 30 Jan 2018 15:49:14 GMT):
Does the constructor of your handler look something like this:
```javascript
class IntegerKeyHandler extends TransactionHandler {
constructor () {
super(INT_KEY_FAMILY, ['1.0'], [INT_KEY_NAMESPACE])
}
...
```
zac (Tue, 30 Jan 2018 15:49:15 GMT):
An array wrapped around one or more strings specifically
zac (Tue, 30 Jan 2018 15:49:55 GMT):
What could possibly posses :rocket: to highlight a string like that?
Dan (Tue, 30 Jan 2018 15:55:35 GMT):
sweet mysteries of :rocket:
rjones (Tue, 30 Jan 2018 15:58:21 GMT):
it's probably a library they import. I went spelunking on some topic and found it's libraries _all the way down_
robinrob (Tue, 30 Jan 2018 16:09:19 GMT):
Has joined the channel.
mihaipruna (Tue, 30 Jan 2018 16:10:35 GMT):
Has joined the channel.
zac (Tue, 30 Jan 2018 16:26:54 GMT):
:turtle:
:turtle:
:turtle:
mihaipruna (Tue, 30 Jan 2018 16:28:33 GMT):
Is there an example of writing a transaction processor and client from scratch with Javascript?
zac (Tue, 30 Jan 2018 16:29:01 GMT):
"from scratch"?
zac (Tue, 30 Jan 2018 16:29:12 GMT):
Meaning without the JS SDK?
mihaipruna (Tue, 30 Jan 2018 16:30:56 GMT):
No, I plan to use the SDK :)
mihaipruna (Tue, 30 Jan 2018 16:32:04 GMT):
I'm interested in something simple like the tuna tracking example but with all the steps explained
RiyazPanarwala (Tue, 30 Jan 2018 16:38:03 GMT):
https://sawtooth.hyperledger.org/docs/seth/ this link is not working
RiyazPanarwala (Tue, 30 Jan 2018 16:38:56 GMT):
Need sawtooth-seth document. Is this available in JS SDK
zac (Tue, 30 Jan 2018 16:45:09 GMT):
@mihaipruna In that case, there are a few
zac (Tue, 30 Jan 2018 16:45:20 GMT):
Some transaction processors: https://github.com/hyperledger/sawtooth-core/tree/master/sdk/examples
zac (Tue, 30 Jan 2018 16:46:07 GMT):
Also, worth looking at Supply Chain: https://github.com/hyperledger/sawtooth-supply-chain
zac (Tue, 30 Jan 2018 16:46:25 GMT):
That's an app, similar to the fish client thing, with a number of JS components
zac (Tue, 30 Jan 2018 16:46:33 GMT):
The Transaction Processor is Python though
amundson (Tue, 30 Jan 2018 16:49:28 GMT):
@RiyazPanarwala we will publish seth docs shortly; in the meantime, the raw docs are at https://github.com/hyperledger/sawtooth-seth/tree/master/docs/source
amundson (Tue, 30 Jan 2018 16:51:00 GMT):
there is nothing javascript specific in the seth implementation; the transaction processor is in go and the web3 api is in rust, but client could talk to the api with javascript
amundson (Tue, 30 Jan 2018 16:51:20 GMT):
(similar to interacting with ethereum)
mihaipruna (Tue, 30 Jan 2018 16:54:07 GMT):
@zac Thank you
candidosg (Tue, 30 Jan 2018 17:42:21 GMT):
Has joined the channel.
Dan (Tue, 30 Jan 2018 19:33:26 GMT):
Regarding Javascript, here's an 'unofficial' example from @cianx on how to create a Javascript client which builds transactions that will be interpreted by a c++ transaction processor. https://github.com/cianx/cookie-maker
Dan (Tue, 30 Jan 2018 19:34:41 GMT):
I like how this separates the client from the server. Sometimes its fine to make both pieces with the same language, but I think increasingly you'll see a client language choice differ from the backend language choice.
jaredcorduan (Tue, 30 Jan 2018 20:16:38 GMT):
has anyone else had trouble with the block info inconsistently not showing up in the merkle tree in the newer versions? we are running with sawtooth code from December, and the block info works great. I was trying to upgrade to `1.0.1` today, and our integration test have missing block info about 10% of the time.
Dan (Tue, 30 Jan 2018 20:24:03 GMT):
Can you say a little more? Like the query fails randomly or you don't see the transaction processor connect correctly?
jaredcorduan (Tue, 30 Jan 2018 20:27:27 GMT):
yea. we deserialize the protobuff inside `'00b10c01' + ''.zfill(62)` so that we can get the `latest_block`. we then look at `BLOCK_INFO_PREFIX + hex(block_num)[2:].zfill(62)` to get the timestamp. but there is sometimes, like 10% of the time, nothing inside this second address
amundson (Tue, 30 Jan 2018 20:29:33 GMT):
we might want to augment 'sawadm block' so we can get more info out of the the block store
amundson (Tue, 30 Jan 2018 20:30:10 GMT):
like, enough so we can see which blocks don't have the expected transaction
amundson (Tue, 30 Jan 2018 20:30:37 GMT):
and with that, we could look through the logs to see if there are any hints as to what might have happened
amundson (Tue, 30 Jan 2018 20:31:12 GMT):
does the integration test use devmode or poet?
jsmitchell (Tue, 30 Jan 2018 20:31:21 GMT):
hmm
jaredcorduan (Tue, 30 Jan 2018 20:31:37 GMT):
it is using devmode
jsmitchell (Tue, 30 Jan 2018 20:31:49 GMT):
@pschwarz @adamludvik injector/unscheduler ^^
jaredcorduan (Tue, 30 Jan 2018 20:32:01 GMT):
injectifier :)
boydjohnson (Tue, 30 Jan 2018 20:32:04 GMT):
Something that sprang to mind that happened between December and now is unscheduling. The block info txns are sent through the scheduler aren't they?
jsmitchell (Tue, 30 Jan 2018 20:32:38 GMT):
yeah, and there is consideration for injected transactions remaining, but perhaps there is a bug
pschwarz (Tue, 30 Jan 2018 20:32:49 GMT):
Was just going to say that
amundson (Tue, 30 Jan 2018 20:32:51 GMT):
@jaredcorduan could we make that test generic enough to include in sawtooth-core?
jaredcorduan (Tue, 30 Jan 2018 20:33:46 GMT):
possibly, unfortunately right now the test is pretty complicated. but I bet we could just use intkey and check for timestamps over and over and we'd see it
pschwarz (Tue, 30 Jan 2018 20:34:25 GMT):
it should already be covered by `integration/sawtooth_integration/test_block_info_injector.py`
pschwarz (Tue, 30 Jan 2018 20:34:40 GMT):
That's the reason we had to preserve those batches in the first place
pschwarz (Tue, 30 Jan 2018 20:35:13 GMT):
It's possible that test isn't thorough enough
jaredcorduan (Tue, 30 Jan 2018 20:35:31 GMT):
fwiw, I get the same trouble with rc6 and rc7
amundson (Tue, 30 Jan 2018 20:35:43 GMT):
I think if I had the test and could repeat it, I'd want to use git bisect to figure out when the regression was introduced initially
amundson (Tue, 30 Jan 2018 20:36:13 GMT):
if you could determine which rcX it appears in, that would be helpful
pschwarz (Tue, 30 Jan 2018 20:36:18 GMT):
Unscheduling went into rc6, I think
jaredcorduan (Tue, 30 Jan 2018 20:36:28 GMT):
I could test rc5 real quick
oatmealraisin (Tue, 30 Jan 2018 20:54:41 GMT):
Hello! Congrats on 1.0
oatmealraisin (Tue, 30 Jan 2018 20:55:10 GMT):
Is there documentation on sawtooth storage? I'm standing up a blockchain in prod and need to understand what options I have
oatmealraisin (Tue, 30 Jan 2018 20:55:10 GMT):
@jsmitchell I'm just getting started with the documentation, and was looking for a manual for configurations such as the one you mentioned. I can just ask away here, but I feel like I'd be wasting your time with entry level questions :P
oatmealraisin (Tue, 30 Jan 2018 20:55:10 GMT):
@jsmitchell There's no information on where the data is stored? Or some information on sizing, backup, integration?
jaredcorduan (Tue, 30 Jan 2018 20:57:33 GMT):
block info is stable in `rc5`, I cannot reproduce the issue with it
jaredcorduan (Tue, 30 Jan 2018 20:58:22 GMT):
so yea, it seems this was introduced in `rc6`
jsmitchell (Tue, 30 Jan 2018 21:03:51 GMT):
@oatmealraisin what are your questions? State and blockchain data is stored in LMDB instances. By using the state delta export pattern, you can write an adapter to land your data into a database(sql, nosql, etc) to support more sophisticated querying/analytics
oatmealraisin (Tue, 30 Jan 2018 21:09:09 GMT):
oops, I was editing my last message i think
jsmitchell (Tue, 30 Jan 2018 21:09:17 GMT):
There are no alternative storage implementations, so there is nothing to configure
jsmitchell (Tue, 30 Jan 2018 21:10:06 GMT):
@pschwarz do we have an example state delta export somewhere?
pschwarz (Tue, 30 Jan 2018 21:11:40 GMT):
https://github.com/hyperledger/sawtooth-supply-chain has state delta export in JS
pschwarz (Tue, 30 Jan 2018 21:12:01 GMT):
https://github.com/hyperledger/sawtooth-marketplace has state delta export in Python
oatmealraisin (Tue, 30 Jan 2018 21:12:12 GMT):
wth, my messages keep getting put in my first one, i'm sorry
pschwarz (Tue, 30 Jan 2018 21:12:16 GMT):
Both of those go to a Rethink DB instance
oatmealraisin (Tue, 30 Jan 2018 21:12:38 GMT):
@jsmitchell There's no information on where the data is stored? Or some information on sizing, backup, integration?
jsmitchell (Tue, 30 Jan 2018 21:12:52 GMT):
@oatmealraisin oh, you can configure paths and stuff in a toml file
pschwarz (Tue, 30 Jan 2018 21:12:56 GMT):
Less official: https://github.com/peterschwarz/state-export-prototype in Clojure to a PostgreSQL db
oatmealraisin (Tue, 30 Jan 2018 21:13:08 GMT):
@pschwarz That's nifty, thanks!
jsmitchell (Tue, 30 Jan 2018 21:13:23 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/1.0.1/sysadmin_guide/configuring_sawtooth/path_configuration_file.html
jmason900 (Tue, 30 Jan 2018 21:13:23 GMT):
@zac sawltooth-material app in course LFS171x help.
I believe you built the tuna example in the sawtooth-material course demo?? If we get errors bringing up the app in docker-compose, is there auxillary doc anywhere on how to debug the issues ? the base Sawtooth example worked fine in my unbuntu setup for docker-compose .. no errors . After I corrected the sawtooth-default.yaml file to:
version “2.0”
replaced all “:latest” with “1.0”
running docker-compose again sawtooth-material yaml I get the errors below on the initial version of the file.
Making the same yaml changes that worked for the base sawtooth default app, did not fix the issues in this startup.
Any ideas on next steps or related documentation ?
I pulled the errors below from the startup log for sawtooth-material app
sawtooth-validator-default | usage: sawtooth [-h] [-v] [-V]
sawtooth-intkey-tp-python-default | intkey-tp-python: error: unrecognized arguments: tcp://validator:4004
sawtooth-validator-default | {batch,block,identity,keygen,peer,settings,state,transaction}
sawtooth-validator-default | ...
sawtooth-validator-default | sawtooth: error: argument command: invalid choice: 'admin' (choose from 'batch', 'block', 'identity', 'keygen', 'peer', 'settings', 'state', 'transaction')
….
sawtooth-validator-default exited with code 2
sawtooth-intkey-tp-python-default exited with code 2
pschwarz (Tue, 30 Jan 2018 21:17:10 GMT):
There was a change in arguments between 0.8 and 1.0, where it should be `--connect tcp://validator:4004` (or `-C` for the short arg)
oatmealraisin (Tue, 30 Jan 2018 21:29:00 GMT):
@jsmitchell Thank you :)
oatmealraisin (Tue, 30 Jan 2018 21:29:39 GMT):
Are there any plans in the future to allow other storage options, such as etcd (another k/v store)
oatmealraisin (Tue, 30 Jan 2018 21:29:39 GMT):
?
pschwarz (Tue, 30 Jan 2018 21:33:58 GMT):
@jaredcorduan Are you using the parallel scheduler or the default? Either way you could test it with the opposite one on 1.0.1 and see if it still occurs?
szan 1 (Tue, 30 Jan 2018 21:36:19 GMT):
Has joined the channel.
szan 1 (Tue, 30 Jan 2018 21:36:58 GMT):
Hi, i am from Intel, and trying to setup the demo on Intel Nuc and i am facing issue with asset tracking
szan 1 (Tue, 30 Jan 2018 21:37:56 GMT):
i could not get to http://localhost:8021
szan 1 (Tue, 30 Jan 2018 21:38:08 GMT):
can anyone help me setup this demo ? this is for upcming event
kelly_ (Tue, 30 Jan 2018 21:41:45 GMT):
@szan 1 can you post your error message
jsmitchell (Tue, 30 Jan 2018 22:04:48 GMT):
@oatmealraisin no current plans, but PRs would certainly be reviewed and considered!
Verticom (Tue, 30 Jan 2018 22:19:04 GMT):
Has joined the channel.
zac (Tue, 30 Jan 2018 22:50:38 GMT):
@jmason900 I would peg all the sawtooth images in that docker-compose file to `:0.8`
zac (Tue, 30 Jan 2018 22:51:07 GMT):
There are a number of steps you will have to take to update that edX code to 1.0
zac (Tue, 30 Jan 2018 22:53:03 GMT):
@tkuhrt Not sure if you know where the docker-compose file they are using for the edX comes from, but the 1.0 release today probably broke that course material. It should have `:latest` switched to `:0.8` for all the sawtooth components.
zac (Tue, 30 Jan 2018 22:53:40 GMT):
If we want the course to be up to date with the 1.0 API, there are some larger changes that would need to happen
tkuhrt (Tue, 30 Jan 2018 22:53:42 GMT):
Okay...this is in github.com/hyperledger/education
tkuhrt (Tue, 30 Jan 2018 22:54:21 GMT):
Let me update this @zac
zac (Tue, 30 Jan 2018 22:54:42 GMT):
cool
szan 1 (Tue, 30 Jan 2018 23:03:04 GMT):
docker exec -it supply-shell bash
Once inside the shell, you might try running the one of the update scripts to see live updates populate in an example web app. First navigate to the server directory:
cd server/
Then run one of the two provided npm scripts:
npm run update-sample-assets
npm run update-sample-fish
szan 1 (Tue, 30 Jan 2018 23:03:27 GMT):
not able to find the npm scripts in the following directories
szan 1 (Tue, 30 Jan 2018 23:03:46 GMT):
and is this the one way to populate sample data ?
tkuhrt (Tue, 30 Jan 2018 23:04:29 GMT):
@zac : Would you mind having a glance at this before I merge it: https://github.com/hyperledger/education/pull/19
zac (Tue, 30 Jan 2018 23:06:05 GMT):
Looks good to me
zac (Tue, 30 Jan 2018 23:06:54 GMT):
@szan 1 The base data is populated automatically
zac (Tue, 30 Jan 2018 23:07:13 GMT):
Those scripts run some live updates
zac (Tue, 30 Jan 2018 23:08:46 GMT):
You won't find any script files names "update-sample-assets". It's a script defined in `server/package.json`:
https://github.com/hyperledger/sawtooth-supply-chain/blob/master/server/package.json#L16
zac (Tue, 30 Jan 2018 23:09:43 GMT):
if you are in the server directory you should be able to run it with `npm run update-same-assets`
zac (Tue, 30 Jan 2018 23:09:43 GMT):
if you are in the server directory you should be able to run it with `npm run update-sample-assets`
zac (Tue, 30 Jan 2018 23:10:25 GMT):
This is a common way of setting up scripts in Node.js projects.
toddinpal (Wed, 31 Jan 2018 00:50:57 GMT):
Has joined the channel.
bill.cawthra (Wed, 31 Jan 2018 00:58:21 GMT):
anyone ever seen errors like:
```
Failed to create wait certificate: Cannot create wait certificate because timer has timed out
```
bill.cawthra (Wed, 31 Jan 2018 01:12:41 GMT):
actually, if anyone has any recommendations for the poet settings, i'm all ears. currently using:
```
sawset proposal create -k /etc/sawtooth/keys/validator.priv \
sawtooth.poet.target_wait_time=5 \
sawtooth.poet.initial_wait_time=25 \
sawtooth.publisher.max_batches_per_block=100 \
sawtooth.poet.population_estimate_sample_size=500 \
```
bill.cawthra (Wed, 31 Jan 2018 01:12:41 GMT):
actually, if anyone has any recommendations for the poet settings, i'm all ears. currently using:
```
sawset proposal create -k /etc/sawtooth/keys/validator.priv \
sawtooth.poet.target_wait_time=5 \
sawtooth.poet.initial_wait_time=25 \
sawtooth.publisher.max_batches_per_block=100 \
sawtooth.poet.population_estimate_sample_size=500 \
-o poet-settings.batch
```
jaredcorduan (Wed, 31 Jan 2018 01:45:10 GMT):
thank you for the idea, @pschwarz. I just tried it out on `1.0.1`, and unfortunately I get the error both when a launch the validator with `--scheduler parallel` and with `--scheduler serial`.
jaredcorduan (Wed, 31 Jan 2018 01:51:33 GMT):
strangely, it also seems like everytime the integration test fails due to missing block info, there are also missing settings from the settings txn family that we set.
RiyazPanarwala (Wed, 31 Jan 2018 05:29:16 GMT):
Thanks @amundson. So it is like same as web3 object. (sawtooth-seth) Also it will be more helpful after you publish seth docs.
ranjan008 (Wed, 31 Jan 2018 06:16:34 GMT):
Has joined the channel.
MaritereNieto (Wed, 31 Jan 2018 07:53:55 GMT):
Has joined the channel.
darrylpargeter (Wed, 31 Jan 2018 07:56:07 GMT):
Has joined the channel.
ahmedanees (Wed, 31 Jan 2018 08:52:38 GMT):
Hi @amundson
Cannot read property 'TransactionHeader' of undefined
on line const transactionHeaderBytes = protobuf.TransactionHeader.encode({
I am using
"sawtooth-sdk": "^1.0.1"
const {protobuf} = require('sawtooth-sdk/protobuf')
const transactionHeaderBytes = protobuf.TransactionHeader.encode({
familyName: 'intkey',
familyVersion: '1.0',
inputs: ['1cf1266e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7'],
outputs: ['1cf1266e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7'],
signerPublicKey: signer.getPublicKey().asHex(),
// In this example, we're signing the batch with the same private key,
// but the batch can be signed by another party, in which case, the
// public key will need to be associated with that key.
batcherPublicKey: signer.getPublicKey().asHex(),
// In this example, there are no dependencies. This list should include
// an previous transaction header signatures that must be applied for
// this transaction to successfully commit.
// For example,
// dependencies: ['540a6803971d1880ec73a96cb97815a95d374cbad5d865925e5aa0432fcf1931539afe10310c122c5eaae15df61236079abbf4f258889359c4d175516934484a'],
dependencies: [],
payloadSha512: createHash('sha512').update(payloadBytes).digest('hex')
}).finish()
const transaction = new TransactionEncoder(privateKey, {
inputs: [PREFIX],
outputs: [PREFIX],
familyName: FAMILY,
familyVersion: VERSION,
payloadEncoding: 'application/json',
payloadEncoder: p => Buffer.from(JSON.stringify(p))
}).create(payload)
ahmedanees (Wed, 31 Jan 2018 08:53:34 GMT):
can anyone guide me how to fix this issue
OSubachev (Wed, 31 Jan 2018 11:02:46 GMT):
Has joined the channel.
ZeeshanAnis (Wed, 31 Jan 2018 12:56:05 GMT):
Has joined the channel.
RiyazPanarwala (Wed, 31 Jan 2018 12:56:24 GMT):
@ahmedanees have you declared protobuf in client side ??
RiyazPanarwala (Wed, 31 Jan 2018 12:56:44 GMT):
If so then please declare it in server side
RiyazPanarwala (Wed, 31 Jan 2018 13:12:28 GMT):
@amundson Do you have any examples on event subscription in sawtooth 1.0.1
ahmedanees (Wed, 31 Jan 2018 13:17:39 GMT):
yes
ahmedanees (Wed, 31 Jan 2018 13:18:16 GMT):
@RiyazPanarwala const {protobuf} = require('sawtooth-sdk/protobuf')
ahmedanees (Wed, 31 Jan 2018 13:18:35 GMT):
here I declare
ahmedanees (Wed, 31 Jan 2018 13:19:32 GMT):
this is on clint side
RiyazPanarwala (Wed, 31 Jan 2018 13:22:25 GMT):
please declare it on server side
ahmedanees (Wed, 31 Jan 2018 13:23:07 GMT):
Ok let me try
ahmedanees (Wed, 31 Jan 2018 13:35:11 GMT):
detail.txt
ahmedanees (Wed, 31 Jan 2018 13:36:00 GMT):
@RiyazPanarwala I need to set
i) Payload
ii) Make transaction
ii) Send to
$.post({
url: `${API_URL}/batches?wait`,
data: batchBytes,
headers: {'Content-Type': 'application/octet-stream'},
processData: false,
// Any data object indicates the Batch was not committed
success: ({ data }) => cb(!data),
error: () => cb(false)
})
ahmedanees (Wed, 31 Jan 2018 13:37:23 GMT):
can you please tell me if i am doing something wrong
ZeeshanAnis (Wed, 31 Jan 2018 13:42:58 GMT):
Hello every one
ZeeshanAnis (Wed, 31 Jan 2018 13:42:58 GMT):
Hello every one.
ZeeshanAnis (Wed, 31 Jan 2018 13:42:58 GMT):
Hello every one.i am trying to publish blockchain nodes on the network.
ZeeshanAnis (Wed, 31 Jan 2018 13:42:58 GMT):
Hello every one.i am trying to publish blockchain nodes on the network.i have two systems running on network with both validator and API
ZeeshanAnis (Wed, 31 Jan 2018 13:55:26 GMT):
i am trying to publish blockchain nodes on the network
ahmedanees (Wed, 31 Jan 2018 13:56:07 GMT):
Can anyone tell me we are trying to peer to nodes on the same server to communicate data from one node to other nodes
Below logs appear on terminal is this mean we are csuccessfully connect?
[2018-01-31 05:52:12.576 DEBUG gossip] Peers are: ['tcp://192.168.10.9:8800']. Unpeered candidates are: []
[2018-01-31 05:52:13.579 DEBUG gossip] Number of peers (1) below minimum peer threshold (3). Doing topology search.
[2018-01-31 05:52:13.596 DEBUG gossip_handlers] Got peers response message from 01d3fdcde1b63a267d8e9ae2b6bca124fd492f4359f37b07d8019c13f679b205e75c2c80b5e5d692c5fb7c5c6c7502396daaa482d8aa266987d4631392206706. Endpoints: ['tcp://192.168.10.11:8800', 'tcp://192.168.10.9:8800']
ahmedanees (Wed, 31 Jan 2018 13:56:07 GMT):
Can anyone tell me we are trying to peer two nodes on the same server to communicate data from one node to other nodes
Below logs appear on terminal is this mean we are csuccessfully connect?
[2018-01-31 05:52:12.576 DEBUG gossip] Peers are: ['tcp://192.168.10.9:8800']. Unpeered candidates are: []
[2018-01-31 05:52:13.579 DEBUG gossip] Number of peers (1) below minimum peer threshold (3). Doing topology search.
[2018-01-31 05:52:13.596 DEBUG gossip_handlers] Got peers response message from 01d3fdcde1b63a267d8e9ae2b6bca124fd492f4359f37b07d8019c13f679b205e75c2c80b5e5d692c5fb7c5c6c7502396daaa482d8aa266987d4631392206706. Endpoints: ['tcp://192.168.10.11:8800', 'tcp://192.168.10.9:8800']
ZeeshanAnis (Wed, 31 Jan 2018 13:57:02 GMT):
i have two systems running on network with both validator and API
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
ZeeshanAnis (Wed, 31 Jan 2018 13:58:06 GMT):
validator.toml.txt
Dan (Wed, 31 Jan 2018 13:58:22 GMT):
@bill.cawthra that wait certificate timeout thing happens for 2 reasons I know of. Possibly one that I don't.
1. No transactions happened for ~30s. (I should correct the log message to `warning` rather than `error`
2. So much processing that the block couldn't be built in ~30s. That's a bad situation. You'd want to make smaller blocks if that's happening. Or make more efficient TPs.
3. Could be something else causing this. I've seen it in logs recently without good explanation but also without it causing obvious problems.
For params, it depends on how many nodes you are running. Lemme know and i can provide some better guidance.
Dan (Wed, 31 Jan 2018 14:00:12 GMT):
@ahmedanees that looks connected
ahmedanees (Wed, 31 Jan 2018 14:01:45 GMT):
Now this means if I have created some data on Node1 it will go to node2 now?
ahmedanees (Wed, 31 Jan 2018 14:01:45 GMT):
Now this means if I have created some data(Blocks) on Node1 it will go to node2 now?
Dan (Wed, 31 Jan 2018 14:09:09 GMT):
Yes. (Technically if you send a transaction to one of those nodes, then yes it will circulate the transaction to the other node. Both nodes will try to build a block with it. One of them will win and send the other the block.)
ahmedanees (Wed, 31 Jan 2018 14:10:30 GMT):
ok Thanks a lot , Let me build transaction on node 1 , will ask question if any
ahmedanees (Wed, 31 Jan 2018 14:14:07 GMT):
detail.txt
ahmedanees (Wed, 31 Jan 2018 14:15:20 GMT):
@dan I am follow https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html
and try to creat transactionHeaderBytes and gets error on line
ahmedanees (Wed, 31 Jan 2018 14:15:21 GMT):
const signer = CryptoFactory(context).newSigner(privateKey)
ahmedanees (Wed, 31 Jan 2018 14:15:34 GMT):
const signer = CryptoFactory(context).newSigner(privateKey)
^
TypeError: Class constructor CryptoFactory cannot be invoked without 'new'
ahmedanees (Wed, 31 Jan 2018 14:15:41 GMT):
Please guide
Dan (Wed, 31 Jan 2018 14:23:21 GMT):
Sorry there's a typo in the doc.
Should read `signer = new CryptoFactory(context).new_signer(private_key)`
cianx put a fix in to master yesterday. it won't be reflected in the 1.0 docs until we release our first 1.0 update.
ahmedanees (Wed, 31 Jan 2018 14:26:46 GMT):
ok let me try
ahmedanees (Wed, 31 Jan 2018 14:29:12 GMT):
const signer = new CryptoFactory(context).new_signer(privateKey)
^
TypeError: (intermediate value).new_signer is not a function
Resolved by this
const signer = new CryptoFactory(context).newSigner(privateKey)
gastonmorixe (Wed, 31 Jan 2018 14:34:53 GMT):
Has joined the channel.
ahmedanees (Wed, 31 Jan 2018 14:40:33 GMT):
also can tell me
http://192.168.10.11:8080/batch_statuses?id=8fc820311 show newly created batch with pending status
"status": "PENDING"
ahmedanees (Wed, 31 Jan 2018 14:40:55 GMT):
it should be active to list in
http://192.168.10.11:8080/batches
ahmedanees (Wed, 31 Jan 2018 14:40:56 GMT):
?
Dan (Wed, 31 Jan 2018 14:58:54 GMT):
@amundson @achenette what do you want to do about doc updates like above? Should we update the published docs independent of point release or only update on the point releases?
jaredcorduan (Wed, 31 Jan 2018 15:42:07 GMT):
@pschwarz, I'm starting to isolate the trouble with `block_info`. Before I should have probably mentioned that we are trying to read the block info from inside a transaction processor, not from the rest api. The rest api always looks good, there is always block info there. The trouble is attempting to write transaction processors which depend on block info.
I wrote transaction processor that only does the following: attempt to read block info config, get the latest block number, attempt to read the block info for the latest block, and log what happens.
if you send off <10 of these transactions to the rest api, all is lovely. but once you start sending ~15 transactions in rapid fire (not batch together), what happens is this for about one of those 15 txns: the first time the transaction processor attempts to use `apply`, block info config is there and has a latest block, but there is no block info data for that latest block at the associated address. The second time the transaction processor attempts to process the transaction (ie when it is doing the `apply` for consensus), the block info is there.
pschwarz (Wed, 31 Jan 2018 15:43:13 GMT):
Hmm, that sounds like it could be an issue with the context manager. What do you think, @boydjohnson ?
jaredcorduan (Wed, 31 Jan 2018 15:43:49 GMT):
you could easily test this yourself with intkey if you just make it attempt to read block info on the latest block
pschwarz (Wed, 31 Jan 2018 15:44:05 GMT):
:thumbsup:
FrankCastellucci (Wed, 31 Jan 2018 15:47:05 GMT):
@zac - Thank you, the `sawtooth-marketpace` is rich with "how to" and I'm already up and running because if it.
jaredcorduan (Wed, 31 Jan 2018 16:12:26 GMT):
ok, I've got some more clues. Every single time block_info is missing for `latest_block`, it's in the situation where the transaction processor sees the latest block as n, but the transaction actually ends up going into block n+1. whats weird is that all the transactions that successfully make it into block n are earlier transactions which do see info for block n.
Hatchi 1 (Wed, 31 Jan 2018 16:52:38 GMT):
Has joined the channel.
ShowBox 3 (Wed, 31 Jan 2018 17:40:31 GMT):
cant add participant server error
only once did i get in successfully
this is in is i
*this is in marketplace
ShowBox 3 (Wed, 31 Jan 2018 17:41:40 GMT):
no one answered this question in the forumn eithet
pschwarz (Wed, 31 Jan 2018 18:19:44 GMT):
@jaredcorduan Can you open a jira bug ticket on this issue?
pschwarz (Wed, 31 Jan 2018 18:20:31 GMT):
Or, actually, I'll open it, and you can fill in some more details for me.
pschwarz (Wed, 31 Jan 2018 18:23:03 GMT):
I still have a couple of more questions on it too: Do you specify a scheduler? Are you running poet simulator or just dev mode consensus?
pschwarz (Wed, 31 Jan 2018 18:43:20 GMT):
@jaredcorduan https://jira.hyperledger.org/browse/STL-1034
zac (Wed, 31 Jan 2018 18:48:17 GMT):
@ShowBox 3 Are you trying to create a user through the web app?
zac (Wed, 31 Jan 2018 18:48:40 GMT):
Is the server or the validator logging out anything interesting?
jaredcorduan (Wed, 31 Jan 2018 18:52:37 GMT):
@pschwarz thanks for opening that ticket, I'll add some context, thanks! I'm running in dev mode, but I'm happy to try software poet if you think that would be interesting. I've seen the issue in when launching the validator with `--scheduler parallel` and also with `--scheduler serial`.
pschwarz (Wed, 31 Jan 2018 18:54:04 GMT):
Devmode helps narrow it down. I would suggest trying it with PoET simulator. It may be an issue with devmode, which may have some timing issues
pschwarz (Wed, 31 Jan 2018 18:54:04 GMT):
Devmode helps narrow it down. I would suggest trying it with PoET simulator. It may be an issue with devmode, which may be causing some timing issues
jaredcorduan (Wed, 31 Jan 2018 18:58:44 GMT):
is this just a matter of starting the validator with the correct flags?
jaredcorduan (Wed, 31 Jan 2018 19:06:43 GMT):
ah, it's tp settings
zac (Wed, 31 Jan 2018 19:06:47 GMT):
@ShadowBox\ 3
zac (Wed, 31 Jan 2018 19:09:20 GMT):
@ShadowBox%203
zac (Wed, 31 Jan 2018 19:10:08 GMT):
@ShadowBox 3
zac (Wed, 31 Jan 2018 19:10:30 GMT):
Is there no way to ping a user with a space in their name?
zac (Wed, 31 Jan 2018 19:10:43 GMT):
:rocket: leaves much to be desired
bill.cawthra (Wed, 31 Jan 2018 19:23:23 GMT):
@rbuysse i'm going to talk here. feel like i'm DM'ing you too much. :)
bill.cawthra (Wed, 31 Jan 2018 19:23:55 GMT):
for the gallery, just want to verify, the validators ONLY talk on tcp port 8800? i believe some local services (rest_api i believe) use the validator TCP port 4004
romankrav4 (Wed, 31 Jan 2018 19:24:54 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=CLJhN9WRvavLWqKqY) @Dan thanks for clarify
rbuysse (Wed, 31 Jan 2018 19:25:23 GMT):
@bill.cawthra you're correct
bill.cawthra (Wed, 31 Jan 2018 19:26:08 GMT):
anyone here using software poet and testing on multiple validators? i'm seeing a lot of inconsistent behavior and messages/blocks not being published... just a ton of inconsistent behavior.
bill.cawthra (Wed, 31 Jan 2018 19:26:22 GMT):
and i'm trying to figure out how to `get good`
bill.cawthra (Wed, 31 Jan 2018 19:27:18 GMT):
example
- stood up a new validator network, with tp_config, tp_validator_registry, block_info TP, smoke_txns TP.
- send successful smoke messages. sent them once, twice, three times.
- on the 4th one, issues occurred.
the first few messages were fairly close together in time (within 5 minutes or so). the last message that failed happened after 15minutes from the cluster being started.
bill.cawthra (Wed, 31 Jan 2018 19:42:01 GMT):
@rbuysse i tried setting the wait setting to 80 (`sawtooth.poet.initial_wait_time`, was set at 800). now i see:
```
failed on-chain validation rules
```
bill.cawthra (Wed, 31 Jan 2018 19:42:08 GMT):
for any block
rbuysse (Wed, 31 Jan 2018 19:43:45 GMT):
hm
rbuysse (Wed, 31 Jan 2018 19:43:50 GMT):
@Dan
bill.cawthra (Wed, 31 Jan 2018 19:47:17 GMT):
think he's in meetings all day. going to hammer at it some more @rbuysse
bill.cawthra (Wed, 31 Jan 2018 19:47:22 GMT):
will let you know what i stumble on
boydjohnson (Wed, 31 Jan 2018 19:50:23 GMT):
@pschwarz @jaredcorduan If I understand this correctly, the transactions that miss block info eventually end up in block n+1 but for block n they are missing the block info. I would think this would be a scheduler - context manager interaction where while the txn is "in-flight" the unscheduling happens and the context id that the transaction processor is asking about doesn't exist and so it looks like there is no state.
jaredcorduan (Wed, 31 Jan 2018 19:51:26 GMT):
exactly. the context/state-store goes totally dark for these vagabonds
jaredcorduan (Wed, 31 Jan 2018 19:51:59 GMT):
tp settings values also dissapear
boydjohnson (Wed, 31 Jan 2018 19:52:25 GMT):
And the same thing happens that they end up in a later block?
jaredcorduan (Wed, 31 Jan 2018 19:53:35 GMT):
I mean for those transactions that are being moved around, tp setting values from long ago that havent changed and aren't changing are also missing from the context
jaredcorduan (Wed, 31 Jan 2018 19:54:42 GMT):
and yea, all is lovely once everything reaches consensus
boydjohnson (Wed, 31 Jan 2018 19:54:48 GMT):
Ah, yeah I would think so if my idea that the context id is gone after unscheduling.
jaredcorduan (Wed, 31 Jan 2018 19:55:01 GMT):
yea
jaredcorduan (Wed, 31 Jan 2018 19:55:39 GMT):
I was trying to figure out if settitngs and block info are special, or if you loose everything not in your own namespace
bill.cawthra (Wed, 31 Jan 2018 19:57:44 GMT):
@rbuysse set it to 800 and error is removed.
bill.cawthra (Wed, 31 Jan 2018 19:58:44 GMT):
but only for 1 transaction. error pops back up on the next smoke test message. bah.
alan (Wed, 31 Jan 2018 20:29:03 GMT):
Has joined the channel.
Dan (Wed, 31 Jan 2018 20:29:35 GMT):
@bill.cawthra initial_wait_time is a lie ;) It's actually the target initial local mean (I am going to the bad place for not relabeling that setting). Don't worry what that means, just always set it to your population * desired interblock time. After 50 to 500 blocks (or whatever you set population_estimate_sample_size to) its irrelevant. It's just a ramp parameter so the network reaches the right statistics.
Generally you are more interested in setting target_wait_time. This is the interblock time.
bill.cawthra (Wed, 31 Jan 2018 20:38:16 GMT):
@Dan what i keep struggling with is that the validators justseem to.... stop working. we have a smoke_txns processor that can send messages . then after X amount of time/messages, it stops....
bill.cawthra (Wed, 31 Jan 2018 20:39:39 GMT):
i've found that there's some combination of restarting the validator and tp_config seems to "unstick" things
bill.cawthra (Wed, 31 Jan 2018 20:43:50 GMT):
interesting. there it is. was working well as i was firing smoke tests. then i waited just over 2 minutes, sent a new smoke test, got the error:
```
[2018-01-31 20:42:13.195 ERROR poet_block_publisher] Failed to create wait certificate: Cannot create wait certificate because timer has timed out
```
accross all nodes
bill.cawthra (Wed, 31 Jan 2018 20:48:33 GMT):
all validators are missing the message as well.
Dan (Wed, 31 Jan 2018 20:49:03 GMT):
might be a red herring. was there something like a minute of idle before sending the last transaction?
bill.cawthra (Wed, 31 Jan 2018 20:49:17 GMT):
yes
bill.cawthra (Wed, 31 Jan 2018 20:49:29 GMT):
waited ~ 2minutes before sending
Dan (Wed, 31 Jan 2018 20:51:05 GMT):
ok, so that log message is expected (tho like I mentioned its probably mislabeled as an error). However it might also be a real problem in this case. The node should just create a new timer and try to put that transaction in a block.
bill.cawthra (Wed, 31 Jan 2018 20:51:47 GMT):
once i hit that state, where i've waited too long before sending a new message, i need to restart the validator and tp_config in order to get things going again.
bill.cawthra (Wed, 31 Jan 2018 20:51:59 GMT):
so.... what am i missing?
Dan (Wed, 31 Jan 2018 20:52:23 GMT):
so sending another transaction doesn't work? (it's bad if it loses the first transaction, but I would hope it would at least keep going with the subsequent transactions)
bill.cawthra (Wed, 31 Jan 2018 20:54:12 GMT):
here's what i do:
- send message `smoke 1`
- view message on all nodes (`smoke 1`). first test good.
- wait some time (lets say 2 minutes, haven't solved the actual number where things go bad)
- send message `smoke 2`
- view messages on all nodes. they all say `smoke 1` and not the new message.
jaredcorduan (Wed, 31 Jan 2018 20:54:56 GMT):
smoke is basically intkey, btw. we made the simplest txn processor we could for testing.
bill.cawthra (Wed, 31 Jan 2018 20:55:04 GMT):
if i choose to wait LESS than the `magical number` (again, still finding this), `smoke 2` will be seen on all nodes.
Dan (Wed, 31 Jan 2018 20:55:34 GMT):
the magic number is probably 30s + target_wait_time
bill.cawthra (Wed, 31 Jan 2018 20:56:01 GMT):
so how do i avoid the resulting affect of the `magical number`?
Dan (Wed, 31 Jan 2018 20:57:38 GMT):
First of all this is an unintended effect so I'll see if I can remedy it.
That said, you could help me figure out the effect a little bit. If without waiting long you could send a smoke 3 and that gets through or doesn't get through that will tell me something.
Dan (Wed, 31 Jan 2018 20:58:30 GMT):
i.e. send smoke 1. wait ~2min. Send Smoke 2. Wait 1 second. Send Smoke 3.
I expect that Smoke 2 and 3 will get in a block then.
bill.cawthra (Wed, 31 Jan 2018 20:59:01 GMT):
once i hit the magical number, all new smoke txns do not appear until i restart the validator and tp_config.
bill.cawthra (Wed, 31 Jan 2018 20:59:20 GMT):
so once my smoke view stops showing the correct smoke number, all new messages dont appear.
bill.cawthra (Wed, 31 Jan 2018 20:59:52 GMT):
but if i keep sending messages - `1,2,3,4,5,6,7,8,9.....` and don't pause too long, those messages appear on all nodes. it's once i STOP that things get all funky.
Dan (Wed, 31 Jan 2018 21:00:12 GMT):
Ok, that helps. thanks
bill.cawthra (Wed, 31 Jan 2018 21:00:42 GMT):
i'm fully willing to accept i have a bad config. just trying to figure out what i've done wrong with the software poet settings.
bill.cawthra (Wed, 31 Jan 2018 21:00:42 GMT):
i'm fully willing to accept i have a bad config and need to `learn 2 play noob`. just trying to figure out what i've done wrong with the software poet settings.
Dan (Wed, 31 Jan 2018 21:00:53 GMT):
Probably not your settings.
bill.cawthra (Wed, 31 Jan 2018 21:01:06 GMT):
cool.
jaredcorduan (Wed, 31 Jan 2018 21:10:05 GMT):
I've got my integration tests using PoET simulator, thanks to @bill.cawthra. I do _not_ have the same missing block info problem with PoET simulator. which is great!
twilson63 (Wed, 31 Jan 2018 21:41:42 GMT):
Has joined the channel.
pschwarz (Wed, 31 Jan 2018 22:33:24 GMT):
@jaredcorduan I added a comment to the Jira ticket that might explain things better.
jaredcorduan (Thu, 01 Feb 2018 00:50:59 GMT):
Ok, I see, the issue may still be there, just with a much lower probability when running PoET simulator. Thanks for the help troubleshooting this, @pschwarz!
alan (Thu, 01 Feb 2018 01:34:33 GMT):
any talk about Proof of Luck in here?
AdamParker (Thu, 01 Feb 2018 02:18:04 GMT):
Is that where you roll an N sided die?
alan (Thu, 01 Feb 2018 03:53:02 GMT):
https://arxiv.org/abs/1703.05435
alan (Thu, 01 Feb 2018 03:53:12 GMT):
https://dl.acm.org/citation.cfm?id=3007790
alan (Thu, 01 Feb 2018 03:53:49 GMT):
TEE random number generator to choose a consensus leader
JOYELIN (Thu, 01 Feb 2018 05:41:23 GMT):
Has joined the channel.
ShowBox 3 (Thu, 01 Feb 2018 06:17:33 GMT):
i still cant connect to demo marketplace not even with Firefox
ShowBox 3 (Thu, 01 Feb 2018 06:24:19 GMT):
the demo on your site
ShowBox 3 (Thu, 01 Feb 2018 06:40:05 GMT):
is it up?
ShowBox 3 (Thu, 01 Feb 2018 06:40:35 GMT):
check my connection from montreal..canada
ShowBox 3 (Thu, 01 Feb 2018 06:41:09 GMT):
if you log the cinnecti2ons and errors
sibil (Thu, 01 Feb 2018 07:45:24 GMT):
Has joined the channel.
ShowBox 3 (Thu, 01 Feb 2018 08:00:53 GMT):
i see the manager is the client that uses marketplace
ShowBox 3 (Thu, 01 Feb 2018 08:01:49 GMT):
marketplace still doesn't work on the link i provided
ShowBox 3 (Thu, 01 Feb 2018 08:11:19 GMT):
https://sawtooth.hyperledger.org/examples/marketplace.html
ZeeshanAnis (Thu, 01 Feb 2018 09:05:33 GMT):
No one answered my question.so asking again:
I am trying to publish blockchain nodes on the network.
I have two systems running on network with both validator and API.
Attched is my validator.toml file.
One more thing what should be my peering type :
1) static or
2) dynamic
ZeeshanAnis (Thu, 01 Feb 2018 09:05:33 GMT):
No one answered my question :( so asking again:
I am trying to publish blockchain nodes on the network.
I have two systems running on network with both validator and API.
Attched is my validator.toml file.
One more thing what should be my peering type :
1) static or
2) dynamic.
Both systems are using Ubuntu 16.04 and connected through wifi with same router using bridging option in ubuntu
ZeeshanAnis (Thu, 01 Feb 2018 09:06:23 GMT):
validator.toml.txt
gaurang (Thu, 01 Feb 2018 11:14:36 GMT):
I am able to run PoET simulator on two nodes. On node1, I was running my custom Transaction Processor. Node 2 was having just settings-tp + poet-validator-registry-tp
gaurang (Thu, 01 Feb 2018 11:16:16 GMT):
I was able to do transaction on node1, how ever as the node2 was not running the custom transaction processor. Those blocks were not propagated to my node2.
gaurang (Thu, 01 Feb 2018 11:16:55 GMT):
As soon as I attached my custom TP to node2, I was able to see the blocks were also on the node2.
gaurang (Thu, 01 Feb 2018 11:23:05 GMT):
Later I detached the custom TP from node2.
gaurang (Thu, 01 Feb 2018 11:23:37 GMT):
No new transactions were propagating again to node2
gaurang (Thu, 01 Feb 2018 11:23:57 GMT):
So, node1 and node2 both were showing different state.
gaurang (Thu, 01 Feb 2018 11:24:25 GMT):
As soon as I attach the TP to node2, both went in equilibrium state.
gaurang (Thu, 01 Feb 2018 11:24:47 GMT):
Is is expected like this only or It's a bug?
JitendraKumar (Thu, 01 Feb 2018 12:07:58 GMT):
Has joined the channel.
gaurang (Thu, 01 Feb 2018 12:32:00 GMT):
@ZeeshanAnis , Please look at https://github.com/hyperledger/sawtooth-core/tree/master/integration/sawtooth_integration/tests/poet_liveness_data
gaurang (Thu, 01 Feb 2018 12:32:22 GMT):
You will see five validators config. validator-0.toml is seed
gaurang (Thu, 01 Feb 2018 12:32:26 GMT):
and rest are peer.
gaurang (Thu, 01 Feb 2018 12:34:01 GMT):
If you want to put static IP, change the 'validator-*:8800' to your IP
gaurang (Thu, 01 Feb 2018 12:34:01 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Lc3zn5fza7h2Qdujj) @supersergiy Yes, I am also surprised as on multiple validator scenario it may be the case where some TP s/w is not up-to-date and they may not be able to validate the data OR may be generating different state.
gaurang (Thu, 01 Feb 2018 12:34:02 GMT):
=> endpoint = "tcp://validator-4:8800" , seeds = ["tcp://validator-0:8800"] ,
gaurang (Thu, 01 Feb 2018 12:34:23 GMT):
To endpoint = "tcp://1.2.3.4:8800" , seeds = ["tcp://2.3.4.5:8800"]
Dan (Thu, 01 Feb 2018 14:42:23 GMT):
@alan yes that's very much like PoET. We don't have an implementation of proof of luck in Sawtooth. Always interested to hear if there's some new features somewhere that would be cool to add to sawtooth though. We also have a #sawtooth-consensus channel for chatting about these topics.
Dan (Thu, 01 Feb 2018 14:42:50 GMT):
@bill.cawthra do you have time to see if the timeout issue is repeatable with rc5? I'm now wondering if the scheduler bug the other guys were talking about is actually killing this condition too.
Dan (Thu, 01 Feb 2018 14:46:00 GMT):
@gaurang yes, that sounds expected. If a node does not have a transaction processor installed it can't validate those transactions and hence can't update its state for those transitions. The behavior is part of the deployment/upgradeability features. We want nodes to be able to deploy and upgrade transaction processors asynchronously.
agunde (Thu, 01 Feb 2018 15:12:51 GMT):
@ZeeshanAnis From looking above at your original question, yes it looks like the nodes are peered. As far as for static vs dynamic, it depends how you are configuring your network. If you know all of the nodes on the network and want to control how they are peered use static and the peer option. This will peer you node to only those you specify. Dynamic is useful when you wish to join a network where you may not know all the participants but know at least one node, in this case use dynamic and the seeds option. This will request the peers from the seed and build out you possible peers until you are fully peered.
gentios (Thu, 01 Feb 2018 15:20:49 GMT):
Has joined the channel.
ornit17 (Thu, 01 Feb 2018 15:52:50 GMT):
Has joined the channel.
javrevasandeep (Thu, 01 Feb 2018 16:21:51 GMT):
Has joined the channel.
javrevasandeep (Thu, 01 Feb 2018 16:21:54 GMT):
hi guys
javrevasandeep (Thu, 01 Feb 2018 16:23:26 GMT):
I am using hyperledger fabric for a couple of months but now i want to explore swatooth as well. can anyone pls tell me how is it different from hyperledger fabric technically
DhavalShah (Thu, 01 Feb 2018 16:25:50 GMT):
@Dan Is it possible to run a single instance of a TP and register it with multiple validators?
AdamParker (Thu, 01 Feb 2018 16:34:16 GMT):
@DhavalShah the TransactionProcessor base class in Python only takes in one endpoint so I'd wager not. What's the angle?
DhavalShah (Thu, 01 Feb 2018 16:36:47 GMT):
@AdamParker I was just asking from architecture stand point, because if I could, then I would isolate all TPs on a VM, and make them connect to the various validator nodes. And rightly said about python, but in Java I could probably achive this by multi threading
AdamParker (Thu, 01 Feb 2018 16:39:01 GMT):
Oh yea, in Python I'd imagine you could instantiate multiple classes and hand them to threads. That's probably fine. Though I'd be nervous about having all my TPs on a single node. I'd personally like them distributed.
DhavalShah (Thu, 01 Feb 2018 16:44:06 GMT):
Good point :), I think it does depend on how you intend to use sawtooth, on a public network yes, maybe on private or managed network where you want to eradicate the headache of TP versions
javrevasandeep (Thu, 01 Feb 2018 16:59:48 GMT):
@DhavalShah @AdamParker could you pls tell me how sawtooth is different from hyperledger fabric from technical and business perspective and any scenarios difference where to use fabric and sawtooth.
bill.cawthra (Thu, 01 Feb 2018 17:02:17 GMT):
@Dan i can deploy rc5 stuff. sure , let me :hammer: at it
bill.cawthra (Thu, 01 Feb 2018 17:22:08 GMT):
@Dan parsing the debug logs, i see this:
```
2018-02-01T17:20:08.330 ThreadPoolExecutor-7_0 validation_rule_enforcer DEBUG Transaction at postion 0 is not of type block_info
```
bill.cawthra (Thu, 01 Feb 2018 18:49:25 GMT):
we also see this with block_info:
```
[2018-02-01 18:41:30.555 WARNING core] Invalid Transaction Block number must be one more than previous block's. Got 1 expected 2
```
jaredcorduan (Thu, 01 Feb 2018 18:50:24 GMT):
I wonder if ^^^ could be related the issue I was seeing with block info and the unscheduler. ie https://jira.hyperledger.org/browse/STL-1034
if block info tried to write block number `n`, but ended up getting unscheduled, maybe it's trying to put that block number `n` into block n+1?
jaredcorduan (Thu, 01 Feb 2018 18:54:06 GMT):
also, is it worrisome that `time.time()` is called here inside the block info txns: https://github.com/hyperledger/sawtooth-core/blob/master/families/block_info/sawtooth_block_info/processor/handler.py#L48 seems like that would cause any validator who is catching up on previous blocks from more than `tolerance` seconds ago would run into trouble.
MicBowman (Thu, 01 Feb 2018 19:00:40 GMT):
we are writing a couple transaction processors that require access to previously committed transactions... yes, the information could be stored in state but it would be... "unwieldy" at best and exceptionally inefficient for storage... other than going through the REST interface for the ledger, is there an api i can use to pull out the data in a transaction by transaction id from within a TP?
Dan (Thu, 01 Feb 2018 19:04:59 GMT):
@amundson @jsmitchell ^
Dan (Thu, 01 Feb 2018 19:08:35 GMT):
sprint planning https://zoom.us/j/4034983298
pschwarz (Thu, 01 Feb 2018 19:32:28 GMT):
@MicBowman There is not an api for that
MicBowman (Thu, 01 Feb 2018 19:46:41 GMT):
@pschwarz any problems with a TP going through the REST api to get that information?
MicBowman (Thu, 01 Feb 2018 19:47:10 GMT):
only problem i can see is that i might have to follow a fairly long chain to get the transaction that i want
Dan (Thu, 01 Feb 2018 19:49:13 GMT):
Maybe you could describe your use case a little bit and there's a pattern that does satisfy it, or people could see a gap for which a new API would be motivated.
MicBowman (Thu, 01 Feb 2018 19:52:01 GMT):
@Dan fine :-)
MicBowman (Thu, 01 Feb 2018 19:53:03 GMT):
A PDO (private data object) goes through a series of state updates that are recorded as transactions... every state is identified by a contract/object id, state hash pair
MicBowman (Thu, 01 Feb 2018 19:53:44 GMT):
a given state update can describe dependencies on the state of other contracts
MicBowman (Thu, 01 Feb 2018 19:54:06 GMT):
so... don't commit Ci:Sj unless Ck:Sl has been committed
MicBowman (Thu, 01 Feb 2018 19:54:33 GMT):
so i need to go through the history of contract Ck to see if any previous transaction has committed that state version
MicBowman (Thu, 01 Feb 2018 19:55:04 GMT):
the commit predicates are on "history"
MicBowman (Thu, 01 Feb 2018 19:55:42 GMT):
so either history has to be captured in state (which could be exceptionally inefficient) or, far better, we use the history that already exist in the ledger (this is a blockchain afterall)
pschwarz (Thu, 01 Feb 2018 20:23:22 GMT):
As long as the rest api is returning something deterministic, then it should be fine (it might just be slow). The deterministic part is the harder to guarantee, in most cases. In Sawtooth's case, the deeper in the chain the transaction is, the more likely that it's committed, therefore more trustworthy. But in most recent blocks, you may have some strange behaviour about that transaction, due to possible short-lived forks
pschwarz (Thu, 01 Feb 2018 20:23:55 GMT):
Sawtooth's REST API case
pschwarz (Thu, 01 Feb 2018 20:23:55 GMT):
Sawtooth's REST API case, I mean
pschwarz (Thu, 01 Feb 2018 20:24:39 GMT):
With third party API's determinism would be impossible to guarantee
Dan (Thu, 01 Feb 2018 20:36:15 GMT):
by state, do you mean a global state root hash, or do you mean a hash of the serialized object this transaction family is storing in global state?
pschwarz (Thu, 01 Feb 2018 20:39:57 GMT):
@jaredcorduan block_info transactions should never get unscheduled
Dan (Thu, 01 Feb 2018 20:40:57 GMT):
@MicBowman let me rephrase.. I understand you to mean that the TP logic needs to reference earlier versions of the object. And those objects are described with an object ID and a hash of the serialized contents of that object at each commit.
Dan (Thu, 01 Feb 2018 20:40:57 GMT):
@MicBowman let me rephrase.. I understand you to mean that the TP logic needs to reference earlier versions of the object. And those objects are described with an object ID (probably a radix addr or mappable to one) and a hash of the serialized contents of that object at each commit. A
Dan (Thu, 01 Feb 2018 20:41:41 GMT):
@EugeneYYY I believe this is pertinent to you too ^
EugeneYYY (Thu, 01 Feb 2018 20:41:41 GMT):
Has joined the channel.
jaredcorduan (Thu, 01 Feb 2018 20:50:14 GMT):
ok, thanks. But you understand why a transactions context could have no block info in the event that it push to the next block?
jaredcorduan (Thu, 01 Feb 2018 20:50:14 GMT):
ok, thanks. But you understand why a transactions context could have no block info in the event that it is pushed to the next block?
amrit.gautam (Thu, 01 Feb 2018 20:57:04 GMT):
Has joined the channel.
pschwarz (Thu, 01 Feb 2018 20:59:59 GMT):
Not exactly yet
pschwarz (Thu, 01 Feb 2018 21:00:05 GMT):
Still trying to figure that part out
jaredcorduan (Thu, 01 Feb 2018 21:01:37 GMT):
ok, thanks!
MicBowman (Thu, 01 Feb 2018 21:03:33 GMT):
@pschwarz in theory... the ledger should be deterministic... at least the history leading up to validating a particular transaction... that kind of is the point of a blockchain :)
MicBowman (Thu, 01 Feb 2018 21:04:04 GMT):
@dan when I say state... i mean the state of an off chain contract, what is going on chain is just a hash
pschwarz (Thu, 01 Feb 2018 21:04:11 GMT):
Right, that part I agree with
oatmealraisin (Thu, 01 Feb 2018 21:04:19 GMT):
Hello! I've stood up sawtooth in OpenShift/Kubernetes based off of the docker compose files
MicBowman (Thu, 01 Feb 2018 21:04:20 GMT):
or really a hash of the previous state and a hash of the current state
oatmealraisin (Thu, 01 Feb 2018 21:04:20 GMT):
https://gist.github.com/oatmealraisin/2cf6772e023b2abd2d6616a29d915679
oatmealraisin (Thu, 01 Feb 2018 21:04:39 GMT):
I'm having an issue getting the transaction processors to connect to the validator
MicBowman (Thu, 01 Feb 2018 21:05:02 GMT):
the TP state is not a good place to store a complete record of the history of an object
oatmealraisin (Thu, 01 Feb 2018 21:05:34 GMT):
In kubernetes, different containers are resolved by their service names. So in this case, the validator is 'validator.svc.cluster.local'. Would this change any of the commands for the validator itself?
pschwarz (Thu, 01 Feb 2018 21:07:48 GMT):
@jaredcorduan the usage of `time.time()` is intended to be used to validate that the block info transaction occurred in the past (i.e. no future times should be considered). The way that it's checked, implies otherwise. That may be another bug
zac (Thu, 01 Feb 2018 21:08:08 GMT):
@oatmealraisin Did you change the validator url? Typically it's `-C tcp://validator:4004`
oatmealraisin (Thu, 01 Feb 2018 21:09:58 GMT):
I was wondering about that one. If its new dns name is validator.svc.cluster.local, would the command become `-C tcp://validator.svc.cluster.local:4004`?
pschwarz (Thu, 01 Feb 2018 21:12:08 GMT):
That's the correct name
jaredcorduan (Thu, 01 Feb 2018 21:13:37 GMT):
ah, ok, so you probably want `time.time() + tolerance >= timestamp`
jaredcorduan (Thu, 01 Feb 2018 21:15:31 GMT):
I can file a ticket for ^^ if that would be helpful
oatmealraisin (Thu, 01 Feb 2018 21:22:43 GMT):
@zac Aside from changing the flags for the transaction processors, are there any flags that need to be changed for the validator?
oatmealraisin (Thu, 01 Feb 2018 21:22:58 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/docker/compose/sawtooth-default.yaml is the file I based the kube infra off of
zac (Thu, 01 Feb 2018 21:25:13 GMT):
You'll probably want to change the `--bind rest-api:8008` for the REST API, and the `--endpoint tcp://validator:8800` for the validator.
zac (Thu, 01 Feb 2018 21:25:54 GMT):
those are both local, so I'm not sure what the kubernetes convention for that is
zac (Thu, 01 Feb 2018 21:26:20 GMT):
on your host machine is would be `--bind localhost:8008` and `--endpoint tcp://localhost:8800`
pschwarz (Thu, 01 Feb 2018 21:36:35 GMT):
That would be really useful :)
oatmealraisin (Thu, 01 Feb 2018 21:40:03 GMT):
@zac Cool that makes sense, thanks. I'm hoping there's not an issue with binding to eth0. That wasn't an issue before the update a few days ago, though
zac (Thu, 01 Feb 2018 21:41:08 GMT):
I don't really know what those bindings do exactly, but I've never had to modify them when doing docker deploys versus deploying on my host machine or in vagrant.
oatmealraisin (Thu, 01 Feb 2018 21:42:06 GMT):
@zac Should the tp's be connecting to 8800? What is that port used for on the validator?
oatmealraisin (Thu, 01 Feb 2018 21:42:17 GMT):
It doesn't seem to get exposed in the docker compose files
zac (Thu, 01 Feb 2018 21:44:26 GMT):
also not clear to me
zac (Thu, 01 Feb 2018 21:44:42 GMT):
it get's used for something obscure
zac (Thu, 01 Feb 2018 21:45:01 GMT):
it's different from the 4004 binding though, which is what the TPs should use
oatmealraisin (Thu, 01 Feb 2018 21:45:55 GMT):
Right, I thought so
jaredcorduan (Thu, 01 Feb 2018 21:46:10 GMT):
ok, I made this ticket for the time.time() issue: https://jira.hyperledger.org/browse/STL-1048
oatmealraisin (Thu, 01 Feb 2018 21:46:30 GMT):
Is there a url I could curl to make sure that the container running the tp can connect to the validator? like /healthz?
pschwarz (Thu, 01 Feb 2018 21:46:46 GMT):
I made this issue for one of @bill.cawthra mentioned items https://jira.hyperledger.org/browse/STL-1049
oatmealraisin (Thu, 01 Feb 2018 21:46:51 GMT):
Right now I know that kube dns is working, I can trace to the ip of the container
amundson (Thu, 01 Feb 2018 21:51:18 GMT):
@pschwarz @MicBowman the rest api suggestion is exceptionally bad. please don't do that.
amundson (Thu, 01 Feb 2018 21:54:04 GMT):
@MicBowman transaction processors implement state transition. we implement a pure S1 = T(S0) function, where T is the transaction processor (S1 being end state, S0 beginning state). We do not implement or support any auxillary information, including S1 = T(S0, B) (where B is previous block chain information).
amundson (Thu, 01 Feb 2018 21:54:04 GMT):
@MicBowman transaction processors implement state transition. we implement a pure S1 = T(S0) function, where T is the transaction processor (S1 being end state, S0 beginning state). We do not implement or support any auxillary information, including S1 = T(S0, B ) (where B is previous block chain information).
amundson (Thu, 01 Feb 2018 21:54:54 GMT):
further, you should make no assumptions that you have the entire chain present. that will likely relatively soon not be the case -- you might only have the last N blocks, for example.
zac (Thu, 01 Feb 2018 21:55:38 GMT):
@oatmealraisin That would be really nice wouldn't it? I don't believe there is any easy way to ping the validator though.
amundson (Thu, 01 Feb 2018 21:59:20 GMT):
@MicBowman kind of related - we have the block info transaction family, which keeps some previous block information on the chain, and to support that we have a (currently internal to the validator) capability to inject relevant transactions into the block (currently at the beginning) to change state such that block number and block hash (with some finite history) are present in state. this is used by Seth to implement the EVM's op code which rely on block information.
oatmealraisin (Thu, 01 Feb 2018 22:04:21 GMT):
@zac Not sure what is happening behind the scenes, but `eth0` might not be a device in the container. Could that be set to anything else, such as 0.0.0.0?
amundson (Thu, 01 Feb 2018 22:04:36 GMT):
a roadmap feature is to externalize the block injector capability to allow arbitrary injection
MicBowman (Thu, 01 Feb 2018 22:07:14 GMT):
@amundson.... we are talking about different states
MicBowman (Thu, 01 Feb 2018 22:07:29 GMT):
i have an off chain contract
amundson (Thu, 01 Feb 2018 22:07:39 GMT):
ok, I'm talking about global state within sawtooth
MicBowman (Thu, 01 Feb 2018 22:07:41 GMT):
i ask an enclave to apply a method to the current state
MicBowman (Thu, 01 Feb 2018 22:08:07 GMT):
the enclave signs a transaction that it invoked method M on input state SI and generated output state SO
MicBowman (Thu, 01 Feb 2018 22:08:19 GMT):
the transaction
MicBowman (Thu, 01 Feb 2018 22:08:46 GMT):
so the current state of the contract is Si
MicBowman (Thu, 01 Feb 2018 22:08:53 GMT):
sorry... So
MicBowman (Thu, 01 Feb 2018 22:09:17 GMT):
we may also add to the transaction a set of dependencies that are references to the state of other contracts
MicBowman (Thu, 01 Feb 2018 22:09:33 GMT):
again... this is not the ledger state...
MicBowman (Thu, 01 Feb 2018 22:09:54 GMT):
the ledger state for the contract just says that So (or actually the hash of So) is the current state
MicBowman (Thu, 01 Feb 2018 22:10:30 GMT):
the predicates that we need to enforce for the dependencies are of the form "at some point in the past, state Sj was committed for contract C)
MicBowman (Thu, 01 Feb 2018 22:10:43 GMT):
again... its really hash(Sj)
MicBowman (Thu, 01 Feb 2018 22:11:03 GMT):
so... either i need to record the hash of every state ever committed to contract C
MicBowman (Thu, 01 Feb 2018 22:11:18 GMT):
or i just walk the ledger and find the transactions that i need
MicBowman (Thu, 01 Feb 2018 22:11:24 GMT):
that handled the transitions
MicBowman (Thu, 01 Feb 2018 22:11:37 GMT):
the ledger is *designed* to store history
MicBowman (Thu, 01 Feb 2018 22:11:46 GMT):
so i would MUCH rather look through the ledger
amundson (Thu, 01 Feb 2018 22:13:32 GMT):
"the predicates that we need to enforce for the dependencies" -- is this within the transaction processor code?
MicBowman (Thu, 01 Feb 2018 22:14:12 GMT):
yes
MicBowman (Thu, 01 Feb 2018 22:14:25 GMT):
if you think of it this way... we're building a graph
MicBowman (Thu, 01 Feb 2018 22:14:30 GMT):
and there are predicates on the graph
MicBowman (Thu, 01 Feb 2018 22:14:59 GMT):
btw... we also enforce that the transaction dependencies subsume the contract dependencies
amundson (Thu, 01 Feb 2018 22:15:05 GMT):
when you do that check, is there a natural key to lookup what you need (So or Si?) or is it literally necessary to scan through everything in history?
MicBowman (Thu, 01 Feb 2018 22:15:09 GMT):
so we need the full transaction
MicBowman (Thu, 01 Feb 2018 22:15:22 GMT):
we need to scan
MicBowman (Thu, 01 Feb 2018 22:15:39 GMT):
we can use the transaction dependencies to optimize the scan
MicBowman (Thu, 01 Feb 2018 22:16:06 GMT):
not sure if i can paste a picture here
MicBowman (Thu, 01 Feb 2018 22:16:13 GMT):
but i can send you stuff separately
amundson (Thu, 01 Feb 2018 22:16:15 GMT):
I think I get it
MicBowman (Thu, 01 Feb 2018 22:16:38 GMT):
Clipboard - February 1, 2018 2:16 PM
MicBowman (Thu, 01 Feb 2018 22:16:52 GMT):
the gray boxes are the contract dependencies
MicBowman (Thu, 01 Feb 2018 22:17:06 GMT):
the transaction specifies dependencies for the validator that must subsume those
MicBowman (Thu, 01 Feb 2018 22:17:16 GMT):
the TP must enforce the subsumes ordering
MicBowman (Thu, 01 Feb 2018 22:17:30 GMT):
so then we can walk history through the transaction dependencies
MicBowman (Thu, 01 Feb 2018 22:17:35 GMT):
fairly efficiently
MicBowman (Thu, 01 Feb 2018 22:18:05 GMT):
in my 0.4 implementation... i just make the chain available to the TPs
MicBowman (Thu, 01 Feb 2018 22:18:13 GMT):
it is immutable so there is no sharing issue
amundson (Thu, 01 Feb 2018 22:20:31 GMT):
you should store the information you need in global state and put some thought in how the addressing works so you got some balance of information per-node and the number of nodes you (usually) need to access.
MicBowman (Thu, 01 Feb 2018 22:21:03 GMT):
we may have thousands of previous states per contract
MicBowman (Thu, 01 Feb 2018 22:21:13 GMT):
which would have to be copied each time
MicBowman (Thu, 01 Feb 2018 22:21:23 GMT):
that doesn't strike me as a very good use of disk space
MicBowman (Thu, 01 Feb 2018 22:21:44 GMT):
is there a reason to not make the chain available?
MicBowman (Thu, 01 Feb 2018 22:22:21 GMT):
i mean there is the obvious "its not implemented" which i completely get
MicBowman (Thu, 01 Feb 2018 22:22:36 GMT):
but the "its not a good idea" is something i don't understand
amundson (Thu, 01 Feb 2018 22:23:27 GMT):
accessing state is not less efficient than accessing the block chain, and the data structure behind it is copy-on-write, so if you break it up so you aren't overwriting the same nodes continually it will act reasonably
amundson (Thu, 01 Feb 2018 22:23:49 GMT):
re: reason for the pure state transition - yes, I'll attempt to explain
MicBowman (Thu, 01 Feb 2018 22:23:58 GMT):
i need to append a string to a list on every commit
MicBowman (Thu, 01 Feb 2018 22:24:17 GMT):
so the field associated with state (which may have thousands of entries) gets copied
MicBowman (Thu, 01 Feb 2018 22:24:21 GMT):
since it was written
zac (Thu, 01 Feb 2018 22:24:55 GMT):
Why not do each entry at its own address?
MicBowman (Thu, 01 Feb 2018 22:25:02 GMT):
what entry?
MicBowman (Thu, 01 Feb 2018 22:25:09 GMT):
every contract already has an entry
zac (Thu, 01 Feb 2018 22:25:09 GMT):
In your list
MicBowman (Thu, 01 Feb 2018 22:25:13 GMT):
then every update
MicBowman (Thu, 01 Feb 2018 22:25:25 GMT):
i would have to enumerate all entires
MicBowman (Thu, 01 Feb 2018 22:25:34 GMT):
which wasn't possible last time i looked
MicBowman (Thu, 01 Feb 2018 22:25:44 GMT):
enumerate in order
zac (Thu, 01 Feb 2018 22:27:05 GMT):
I am jumping in part way through, so I might be missing something crucial, but we've done apps that split lists over multiple nodes in state.
zac (Thu, 01 Feb 2018 22:27:51 GMT):
In particular because we didn't want to have to read/write thousands of entries all the time.
MicBowman (Thu, 01 Feb 2018 22:28:02 GMT):
i need an ordered list that is appended on every transaction for that object and the list last "for ever" (so it is not uncommon to have 1000's of entries in the list)
MicBowman (Thu, 01 Feb 2018 22:29:09 GMT):
and... i'm sure i could encode it... but why not just use the log for what its good for?
MicBowman (Thu, 01 Feb 2018 22:29:31 GMT):
the point of having a blockchain is that its an immutable log
amundson (Thu, 01 Feb 2018 22:33:24 GMT):
there are a few reasons why we have enforced pure state transition (it is not an unimplemented feature, quite the reverse). 1) the schedulers make assumptions about state changes and state accesses. they do not know anything about block information. this allows cross-block parallelism (not implemented, but in a future journal implementation it will). 2) we plan to implement state checkpointing. when we do that, we literally will throw away old chain and state. further, some nodes may state at the checkpoint and move forward from there, never having seen the entire chain. 3) we don't currently use old chain information as we are running (or even during restarts), except for fork resolution; we assume if we validated it once, it's good. that leaves us the option of purging old blocks out of local validator history (unclear the rules with respect to consensus that fork -- ideally some limit on how far back we will fork (which might require state checkpointing), but easy for consensus with finality); this will potentially allow us to constrain disk space to what is needed to process transactions against current state.
zac (Thu, 01 Feb 2018 22:33:32 GMT):
Well, the addresses are "ordered" (00...ff), so that's totally doable. I don't have as much of an opinion on whether or not you should.
MicBowman (Thu, 01 Feb 2018 22:35:20 GMT):
pure state transition is great if you have finality... but that also means that you lose decentralization. that's a choice certainly. though it seems that its a choice to move away from sawtooth's greatest strenghts
MicBowman (Thu, 01 Feb 2018 22:35:40 GMT):
the other approach is to garbage collect old state because it can be replayed through the log
MicBowman (Thu, 01 Feb 2018 22:35:50 GMT):
thats the approach we've taken in the research code
MicBowman (Thu, 01 Feb 2018 22:35:56 GMT):
so the log win
MicBowman (Thu, 01 Feb 2018 22:35:58 GMT):
wins
MicBowman (Thu, 01 Feb 2018 22:36:35 GMT):
and fork resolution doesn't really affect access since each transaction is evaluated in the context of whatever the current chain is
MicBowman (Thu, 01 Feb 2018 22:36:47 GMT):
so the history is immutable from that transactions perspective
MicBowman (Thu, 01 Feb 2018 22:37:14 GMT):
to be clear... we've been purging old blocks for a long time
amundson (Thu, 01 Feb 2018 22:37:18 GMT):
@MicBowman in sawtooth supply chain, we keep a time series database in-state (essentially), and for that we chose to use a ring buffer. you could use a similar incrementing address mechanism.
MicBowman (Thu, 01 Feb 2018 22:38:24 GMT):
and... let me just verify my other assumption... you don't garbage collect old state right now, right?
amundson (Thu, 01 Feb 2018 22:38:54 GMT):
not yet, but soon
MicBowman (Thu, 01 Feb 2018 22:39:40 GMT):
uggh
amundson (Thu, 01 Feb 2018 22:40:19 GMT):
(very soon)
MicBowman (Thu, 01 Feb 2018 22:40:20 GMT):
a lot of what we're trying to do moves almost all validation off chain... validators are dirt simple
MicBowman (Thu, 01 Feb 2018 22:40:34 GMT):
no semantics other than graph validation
jsmitchell (Thu, 01 Feb 2018 22:40:41 GMT):
sounds like a client?
MicBowman (Thu, 01 Feb 2018 22:40:46 GMT):
client?
MicBowman (Thu, 01 Feb 2018 22:40:53 GMT):
no
jsmitchell (Thu, 01 Feb 2018 22:40:58 GMT):
yeah, not a transaction processor
MicBowman (Thu, 01 Feb 2018 22:40:59 GMT):
its an off chain contract
amundson (Thu, 01 Feb 2018 22:41:07 GMT):
a client from a sawtooth validator perspective, and I think that's what Mic is saying
MicBowman (Thu, 01 Feb 2018 22:41:22 GMT):
the off chain contract processor is a client
amundson (Thu, 01 Feb 2018 22:41:24 GMT):
it's executed and then the transaction contains the result
MicBowman (Thu, 01 Feb 2018 22:41:31 GMT):
it just uses the ledger as a registry of enclaves
MicBowman (Thu, 01 Feb 2018 22:41:42 GMT):
and then records an anonymized state transition
jsmitchell (Thu, 01 Feb 2018 22:41:52 GMT):
clients are not restricted in terms of only querying state
MicBowman (Thu, 01 Feb 2018 22:42:09 GMT):
true.. but the TP has to enforce graph primitives
MicBowman (Thu, 01 Feb 2018 22:42:18 GMT):
so think of the transactions as adding nodes to a graph
MicBowman (Thu, 01 Feb 2018 22:42:27 GMT):
there are predicates on the structure of the graph
MicBowman (Thu, 01 Feb 2018 22:42:31 GMT):
that have to be enforced
MicBowman (Thu, 01 Feb 2018 22:42:41 GMT):
which mean i need to be able to walk the graph
jsmitchell (Thu, 01 Feb 2018 22:42:41 GMT):
yep, that graph would need to exist in state
MicBowman (Thu, 01 Feb 2018 22:42:56 GMT):
the transaction log works perfectly fine (our state is extremely small)
MicBowman (Thu, 01 Feb 2018 22:42:59 GMT):
i mean TP state
jsmitchell (Thu, 01 Feb 2018 22:43:03 GMT):
considering that TPs are state transition functions
MicBowman (Thu, 01 Feb 2018 22:43:05 GMT):
and we just use the chain
jsmitchell (Thu, 01 Feb 2018 22:43:14 GMT):
not state + universe transition functions
MicBowman (Thu, 01 Feb 2018 22:43:24 GMT):
huh?
MicBowman (Thu, 01 Feb 2018 22:43:57 GMT):
i'm transitioning the state of a graph
MicBowman (Thu, 01 Feb 2018 22:44:17 GMT):
but a flat state is not a particularly efficient represntation... the transaction log is
amundson (Thu, 01 Feb 2018 22:44:41 GMT):
flat state?
MicBowman (Thu, 01 Feb 2018 22:44:46 GMT):
the transaction log works well for capturing the links between nodes
amundson (Thu, 01 Feb 2018 22:45:03 GMT):
it's a radix tree with copy-on-write properties
MicBowman (Thu, 01 Feb 2018 22:45:04 GMT):
a lot like UTXO
MicBowman (Thu, 01 Feb 2018 22:45:08 GMT):
i know that
MicBowman (Thu, 01 Feb 2018 22:45:27 GMT):
but it is not particularly good at storing dynamic nodes
MicBowman (Thu, 01 Feb 2018 22:45:48 GMT):
where nodes ref other nodes & need to follow paths through those nodes
MicBowman (Thu, 01 Feb 2018 22:46:21 GMT):
although... that might work
MicBowman (Thu, 01 Feb 2018 22:46:44 GMT):
make every
MicBowman (Thu, 01 Feb 2018 22:46:50 GMT):
with references to others
jsmitchell (Thu, 01 Feb 2018 22:46:56 GMT):
there is nothing about the design of state that says that you have to stick everything at a single address
MicBowman (Thu, 01 Feb 2018 22:46:57 GMT):
no way i could enumerate the read set
jsmitchell (Thu, 01 Feb 2018 22:47:08 GMT):
you can partition the addresses
MicBowman (Thu, 01 Feb 2018 22:47:14 GMT):
but i know that all nodes in the current graph are always immutable
MicBowman (Thu, 01 Feb 2018 22:47:42 GMT):
do i still need to pre-fetch everything i'm going to use? or can i follow links?
MicBowman (Thu, 01 Feb 2018 22:48:11 GMT):
so if one
amundson (Thu, 01 Feb 2018 22:50:47 GMT):
if you really want block access semantics, then derive your node address from the block number or block hash. it would be very similar storage-wise to the block chain itself. you are only incurring write penalties, reads are similar to the block store itself.
MicBowman (Thu, 01 Feb 2018 22:51:08 GMT):
i don't want block semantics
MicBowman (Thu, 01 Feb 2018 22:51:20 GMT):
that's not what i'm asking
MicBowman (Thu, 01 Feb 2018 22:51:29 GMT):
i want to be able to fetch a transaction by id
MicBowman (Thu, 01 Feb 2018 22:51:37 GMT):
as an alternative..
MicBowman (Thu, 01 Feb 2018 22:52:02 GMT):
i could image having one address in the TP state for each
MicBowman (Thu, 01 Feb 2018 22:52:34 GMT):
and then add values to that which are references to other addresses (which correspond to the dependent
MicBowman (Thu, 01 Feb 2018 22:52:47 GMT):
so each address corresponds to a node in the graph
MicBowman (Thu, 01 Feb 2018 22:52:59 GMT):
but that means i have to walk the connections between them
MicBowman (Thu, 01 Feb 2018 22:53:13 GMT):
i KNOW that all of the other addresses are immutable
MicBowman (Thu, 01 Feb 2018 22:53:23 GMT):
so everything is read only
MicBowman (Thu, 01 Feb 2018 22:53:33 GMT):
other than the current node
amundson (Thu, 01 Feb 2018 22:54:28 GMT):
ok, I thought you had to scan and couldn't look up graph nodes directly by an index
amundson (Thu, 01 Feb 2018 22:55:23 GMT):
re:caching that's going to be very very complex if you need to know whether something _doesn't_ exist in the current context
amundson (Thu, 01 Feb 2018 22:55:57 GMT):
seems open to issues, but might be solvable with great care
MicBowman (Thu, 01 Feb 2018 22:56:52 GMT):
bad news is that i cannot enumerate what i will need to read
amundson (Thu, 01 Feb 2018 22:57:12 GMT):
you can set a wildcard on that namespace
amundson (Thu, 01 Feb 2018 22:57:20 GMT):
read wildcards aren't that bad
MicBowman (Thu, 01 Feb 2018 22:57:26 GMT):
the wildcard might be more or less "all nodes"
oatmealraisin (Thu, 01 Feb 2018 22:57:27 GMT):
on 1.0.1, is `sawadm` a thing?
amundson (Thu, 01 Feb 2018 22:58:07 GMT):
yes, you can just specify a prefix (namespace) for the input field
jsmitchell (Thu, 01 Feb 2018 22:58:18 GMT):
@MicBowman can't the transaction processor just confirm the incremental dependencies, and rely on the prior iteration having done the same?
MicBowman (Thu, 01 Feb 2018 22:58:25 GMT):
no
MicBowman (Thu, 01 Feb 2018 22:58:45 GMT):
let me see if i can show you more...
MicBowman (Thu, 01 Feb 2018 22:58:58 GMT):
Clipboard - February 1, 2018 2:58 PM
MicBowman (Thu, 01 Feb 2018 22:59:10 GMT):
so thats an example of a fair exchange protocol
MicBowman (Thu, 01 Feb 2018 22:59:23 GMT):
two participants
MicBowman (Thu, 01 Feb 2018 22:59:35 GMT):
each holds a container for blue marbles and a container for red marbles
amundson (Thu, 01 Feb 2018 22:59:44 GMT):
another roadmap feature (maybe further out) is to record inputs/outputs that were done during publishing, so we can get 100% parallelization efficiency when processing the block in non-publishing contexts.
MicBowman (Thu, 01 Feb 2018 23:00:13 GMT):
there are dependencies on the various contract transitions that are necessary to ensure that the givers are escrowed prior to being exchanged
amundson (Thu, 01 Feb 2018 23:00:14 GMT):
seth, for example, provides no real input/output hints, and so everything is serial
amundson (Thu, 01 Feb 2018 23:00:23 GMT):
(within it's namespace)
zac (Thu, 01 Feb 2018 23:00:30 GMT):
@oatmealraisin yes, `sawadm`, `sawset`, and . . . I wanna say `sawnet`
MicBowman (Thu, 01 Feb 2018 23:01:28 GMT):
what goes into the TP is something like:
MicBowman (Thu, 01 Feb 2018 23:02:05 GMT):
which only gets committed if the current state of contract I is hash(Sj) and that hash(Sk) is somewhere in the history of Contract J
MicBowman (Thu, 01 Feb 2018 23:02:18 GMT):
other predicates are more expressive (we can add tags to nodes)
MicBowman (Thu, 01 Feb 2018 23:03:04 GMT):
anyway... let me talk to @EugeneYYY about changing the addressing... it might get ugly... or it might not
MicBowman (Thu, 01 Feb 2018 23:03:18 GMT):
would still prefer gettransaction(ID)
MicBowman (Thu, 01 Feb 2018 23:03:20 GMT):
;-)
jsmitchell (Thu, 01 Feb 2018 23:03:22 GMT):
how big are your hashes?
oatmealraisin (Thu, 01 Feb 2018 23:03:28 GMT):
@zac thanks, I just found out I was using 1.0.0 instead of 1.0.1
MicBowman (Thu, 01 Feb 2018 23:03:28 GMT):
256
jsmitchell (Thu, 01 Feb 2018 23:08:08 GMT):
so it ends up being an existence check for a hash associated with a contract
zac (Thu, 01 Feb 2018 23:08:28 GMT):
Any 1.0.x should have those CLI commands
jsmitchell (Thu, 01 Feb 2018 23:08:55 GMT):
you could partition the namespace by contract and then subdivide the remainder of the address space under that contract by the highest order bytes of the hash
jsmitchell (Thu, 01 Feb 2018 23:09:08 GMT):
so you would have a set of hash pages that would be relatively infrequently written to
oatmealraisin (Thu, 01 Feb 2018 23:14:34 GMT):
@zac Would the order of the flags change anything?
MicBowman (Thu, 01 Feb 2018 23:21:12 GMT):
@jsmitchell a bit more complicated than that... but yes. biggest problem is that there might be thousands of those hashes for a given contract
oatmealraisin (Thu, 01 Feb 2018 23:26:47 GMT):
@zac thanks so much for all the help, I've figured out the issues
oatmealraisin (Thu, 01 Feb 2018 23:27:31 GMT):
The way I was starting the tp's was with a `bash -c intkey-tp-python ...`, which was tokenized in the Kubernetes Deployments into `bash` `-c` `intkey-tp-python` `-C` ..
jsmitchell (Thu, 01 Feb 2018 23:43:49 GMT):
@MicBowman thousands of hashes representing the contract's history, but only one hash write per update, right?
jsmitchell (Thu, 01 Feb 2018 23:45:20 GMT):
with enough bits representing the pages, and a decent estimate of the number of versions (hashes) over the lifetime of the contract, you could be fairly sure that no single page would get unreasonable large
jsmitchell (Thu, 01 Feb 2018 23:45:20 GMT):
with enough bits representing the pages, and a decent estimate of the number of versions (hashes) over the lifetime of the contract, you could be fairly sure that no single page would get unreasonably large
jsmitchell (Thu, 01 Feb 2018 23:45:31 GMT):
where each page contains a sorted list of the full hashes
jsmitchell (Thu, 01 Feb 2018 23:45:54 GMT):
plus, with an encoding scheme like this, the client could construct the full input address that the TP would need to read
adokce (Fri, 02 Feb 2018 01:15:56 GMT):
Has joined the channel.
bill.cawthra (Fri, 02 Feb 2018 01:21:52 GMT):
@oatmealraisin you're running in kubernetes?
bill.cawthra (Fri, 02 Feb 2018 01:21:57 GMT):
that's bad ass :)
A0107400 (Fri, 02 Feb 2018 01:55:15 GMT):
Hi all, I am running into this while taking the hyperledger course on edx:
sawtooth-rest-api-default | [2018-02-01 22:09:42.266 WARNING route_handlers] Timed out while waiting for validator response
while trying to verify the connection with curl http://rest-api:8080/blocks
A0107400 (Fri, 02 Feb 2018 01:55:19 GMT):
any ideas?
vjuge (Fri, 02 Feb 2018 08:01:44 GMT):
Has joined the channel.
bogomazov (Fri, 02 Feb 2018 08:50:38 GMT):
Has joined the channel.
bogomazov (Fri, 02 Feb 2018 09:09:24 GMT):
Hey guys, I am having two issues:
1. Every time I restart running containers using Docker compose with `sawtooth-default.yaml`, sawtooth-shell and sawtooth-validator containers try to write new pub and priv keys using sawtooth keygen in entrypount. So it throws an exception and prompts to run it with --force flag. So I did it to fix the issue temporarily, however, it should not throw an exception out of the program scope or example entrypoint should handle this situation properly, since overwriting pub and private key every time container restarted is not a good thing.
2. I am trying to play with xo game, however it calls rest-api (which is located in separate container) using localhost:8008 which is inaccessible from shell container. I assume that such behaviour specified in core sawtooth, so I would rather adopt docker in `sawtooth-default.yaml` then change core sawtooth handler. Please help :)
bogomazov (Fri, 02 Feb 2018 09:09:24 GMT):
Hey guys, I am having two issues:
1. Every time I restart running containers using Docker compose with `sawtooth-default.yaml`, sawtooth-shell and sawtooth-validator containers try to write new pub and priv keys using sawtooth keygen in entrypount. So it throws an exception and prompts to run it with --force flag. So I did it to fix the issue temporarily, however, it should not throw an exception out of the program scope or example entrypoint should handle this situation properly, since overwriting pub and private key every time container is restarted - not a good thing.
2. I am trying to play with xo game, however it calls rest-api (which is located in separate container) using localhost:8008 which is inaccessible from the shell container. I assume that logic is specified in core sawtooth, so I would rather adopt docker settings in `sawtooth-default.yaml` then change core sawtooth handler. Please help :)
bogomazov (Fri, 02 Feb 2018 09:09:24 GMT):
Hey guys, I am having two issues:
1. Every time I restart running containers using Docker compose with `sawtooth-default.yaml`, sawtooth-shell and sawtooth-validator containers try to write new pub and priv keys using sawtooth keygen in entrypount. So it throws an exception and prompts to run it with --force flag. So I did it to fix the issue temporarily, however, it should not throw an exception out of the program scope or example entrypoint should handle this situation properly, since overwriting pub and private key every time container is restarted - not a good thing.
2. I am trying to play with xo game, however it calls rest-api (which is located in separate container) using 127.0.0.1:8008 which is inaccessible from the shell container. I assume that logic is specified in core sawtooth, so I would rather adopt docker settings in `sawtooth-default.yaml` then change core sawtooth handler. Please help :)
ForwardMomentum (Fri, 02 Feb 2018 09:45:56 GMT):
Has joined the channel.
ForwardMomentum (Fri, 02 Feb 2018 10:12:23 GMT):
Hi, @bogomazov, mb it will be useful for you - about 2: I tried to use --url to set validator api address (like ```xo create game --username jack --url localhost:222```) then xo script started requesting for specified address
ForwardMomentum (Fri, 02 Feb 2018 10:12:23 GMT):
Hi, @bogomazov, mb it will be useful for you - about 2: I tried to use --url to set validator api address like ```xo create game --username jack --url localhost:222``` then xo script started requesting for specified address, in your docker-compose case it can be like 'rest-api:8008')
but I don't know how much this way is correct, maybe it should be configured from compose file
tristanperalta (Fri, 02 Feb 2018 10:38:13 GMT):
is it possible that we list all previous transactions for a particular account?
bogomazov (Fri, 02 Feb 2018 12:36:38 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=vtFCACkCG26dxcLNC) @ForwardMomentum the url is set in regards to the validator's url as far as I am concerned, however, rest-api is different container, thanks though
ZeeshanAnis (Fri, 02 Feb 2018 12:41:42 GMT):
@gaurang Got it. Thanks for the answer
ZeeshanAnis (Fri, 02 Feb 2018 12:41:42 GMT):
@gaurang Thanks for the answer
ZeeshanAnis (Fri, 02 Feb 2018 12:42:09 GMT):
@agunde Thanks for the reply
ZeeshanAnis (Fri, 02 Feb 2018 12:42:09 GMT):
@agunde Got it. Thanks for the reply
RadW2020 (Fri, 02 Feb 2018 12:52:08 GMT):
Has joined the channel.
ZeeshanAnis (Fri, 02 Feb 2018 12:58:24 GMT):
I am following below url:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html#creating-a-private-key-and-signer
ZeeshanAnis (Fri, 02 Feb 2018 12:58:24 GMT):
I am following below url:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html#creating-a-private-key-and-signer
And after Submitting Batches to the Validator
when i click the link to check batch_statuses like below
http://x.x.x.x:8080/batch_statuses?id=b3ab76462....
it shows me data with pending status
status "PENDING"
how its status will change
ZeeshanAnis (Fri, 02 Feb 2018 12:58:24 GMT):
I am following below url:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html#creating-a-private-key-and-signer
And after Submitting Batches to the Validator
when i click the link to check batch_statuses like below
http://x.x.x.x:8080/batch_statuses?id=b3ab76462....
it shows me data with pending status
status "PENDING"
how its status will change and when this batch will be added to the batch list
http://x.x.x.x:8080/batches
ZeeshanAnis (Fri, 02 Feb 2018 12:58:24 GMT):
I am following below url:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html#creating-a-private-key-and-signer
And after Submitting Batches to the Validator
when i click the link to check batch_statuses like below
http://x.x.x.x:8080/batch_statuses?id=b3ab76462....
it shows me data with pending status
status "PENDING"
how its status will change and when this batch will be added to the batch list
http://x.x.x.x:8080/batches
ZeeshanAnis (Fri, 02 Feb 2018 12:58:24 GMT):
I am following below url:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html#creating-a-private-key-and-signer
And after Submitting Batches to the Validator
when i click the link to check batch_statuses like below
http://x.x.x.x:8080/batch_statuses?id=b3ab76462....
it shows me data with pending status
status "PENDING"
how its status will change and when this batch will be added to the batch list
http://x.x.x.x:8080/batches
ZeeshanAnis (Fri, 02 Feb 2018 12:58:24 GMT):
I am following below url:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html#creating-a-private-key-and-signer
And after Submitting Batches to the Validator
when i click the link to check batch_statuses like below
http://x.x.x.x:8080/batch_statuses?id=b3ab76462....
it shows me data with pending status
status "PENDING"
how its status will change and when this batch will be added to the batch list
http://x.x.x.x:8080/batches
ZeeshanAnis (Fri, 02 Feb 2018 13:09:44 GMT):
One more question after connecting two machines on network.I got peers added message but with below message:
Number of peers (1) below minimum peer threshold (3). Doing topology search.
Is this OK or should i need minimum 3 peers on network to move forward
denofernandes (Fri, 02 Feb 2018 13:36:11 GMT):
Has joined the channel.
Dan (Fri, 02 Feb 2018 13:44:44 GMT):
@ZeeshanAnis if you only have a couple nodes then its better to do static peering. Check out https://sawtooth.hyperledger.org/docs/core/releases/latest/sysadmin_guide/configuring_sawtooth/validator_configuration_file.html
Dan (Fri, 02 Feb 2018 13:45:21 GMT):
you can also set the peering mode using command line options when starting sawtooth. The config file is probably better though.
Dan (Fri, 02 Feb 2018 13:47:42 GMT):
so that's `peering = "static"` and `peers = ["tcp://127.0.0.1:8801"]` where you use the IP address of the other node. If you have 3 nodes, then you add a comma and list another URL within the []s.
Dan (Fri, 02 Feb 2018 13:47:42 GMT):
so that's `peering = "static"` and `peers = ["tcp://127.0.0.1:8801"]` where you use the IP address and port of the other node. If you have 3 nodes, then you add a comma and list another quoted URL within the []s.
Dan (Fri, 02 Feb 2018 13:47:42 GMT):
so that's `peering = "static"` and `peers = ["tcp://127.0.0.1:8801"]` where you use the IP address of the other node. If you have 3 nodes, then you add a comma and list another quoted URL within the []s.
ForwardMomentum (Fri, 02 Feb 2018 13:56:15 GMT):
Guys, I've made some questions in post on stackoverflow - please check out - https://stackoverflow.com/questions/48584181/transaction-processor-gossip-in-hyperledger-sawtooth-distibuted-mode
ForwardMomentum (Fri, 02 Feb 2018 13:57:05 GMT):
It's about manipulatoins with transaction processors on working network
RishiKr (Fri, 02 Feb 2018 14:06:41 GMT):
Has joined the channel.
benoit.razet (Fri, 02 Feb 2018 14:13:26 GMT):
I see a typo in the doc about the `block_info` transaction family: https://sawtooth.hyperledger.org/docs/core/releases/latest/transaction_family_specifications/blockinfo_transaction_family.html
benoit.razet (Fri, 02 Feb 2018 14:13:51 GMT):
`'00b10c01' + hex(block_num)[2:].zfill(62))`
benoit.razet (Fri, 02 Feb 2018 14:13:57 GMT):
should be
benoit.razet (Fri, 02 Feb 2018 14:14:10 GMT):
`'00b10c00' + hex(block_num)[2:].zfill(62))`
benoit.razet (Fri, 02 Feb 2018 14:14:41 GMT):
If I did not misread the code of the `block_info`
Dan (Fri, 02 Feb 2018 14:31:33 GMT):
I think you are right
Dan (Fri, 02 Feb 2018 14:31:33 GMT):
I think that's ok. `00` == `metadata namespace` and `01` == `block info namespace`
However I was just speaking with someone yesterday about the overall readability. I think the language above that refers to a modular operation which isn't then reflected in the example.
ZeeshanAnis (Fri, 02 Feb 2018 15:37:21 GMT):
Thanks @Dan .
One more thing need to ask
I am following below url:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html#creating-a-private-key-and-signer
And after Submitting Batches to the Validator
when i click the link to check batch_statuses like below
http://x.x.x.x:8080/batch_statuses?id=b3ab76462....
it shows me data with pending status
status "PENDING"
how its status will change and when this batch will be added to the batch list
http://x.x.x.x:8080/batches
pschwarz (Fri, 02 Feb 2018 15:40:56 GMT):
The status will show as COMMITTED
zac (Fri, 02 Feb 2018 15:48:28 GMT):
@bogomazov Our Docker approach continues to evolve. Checkout what Boyd implemented for Sawtooth Marketplace: https://github.com/hyperledger/sawtooth-marketplace/blob/master/docker-compose.yaml#L160
zac (Fri, 02 Feb 2018 15:49:08 GMT):
Basically he just added an `if` so we can `up` after a container already exists without `--force`.
ZeeshanAnis (Fri, 02 Feb 2018 16:06:35 GMT):
@pschwarz Sorry could not get your answer
ZeeshanAnis (Fri, 02 Feb 2018 16:06:35 GMT):
@pschwarz Sorry could not get your answer
Can you explain a little?
pschwarz (Fri, 02 Feb 2018 16:07:46 GMT):
Once a batch has a status of COMMITTED, it has been included in a block, and therefore will show up in the list of batches returned by that endpoint.
pschwarz (Fri, 02 Feb 2018 16:10:31 GMT):
`/batches` only returns the batches that have been committed in the chain. `/batch_statuses` deals with batches that have been submitted, are pending, committed or rejected (the last state is only valid until the rejected batch falls out of a timed bucket of rejected batches - once that happens, the batch will be considered unknown).
pschwarz (Fri, 02 Feb 2018 16:12:13 GMT):
You can add the parameter `wait=
pschwarz (Fri, 02 Feb 2018 16:12:55 GMT):
More information on the REST API can be found here: https://sawtooth.hyperledger.org/docs/core/releases/1.0.1/rest_api/endpoint_specs.html
pschwarz (Fri, 02 Feb 2018 16:12:55 GMT):
More information on the REST API can be found here: https://sawtooth.hyperledger.org/docs/core/releases/latest/rest_api/endpoint_specs.html
ZeeshanAnis (Fri, 02 Feb 2018 16:27:10 GMT):
@pschwarz Thanks
qqdd (Fri, 02 Feb 2018 17:15:33 GMT):
Has joined the channel.
qqdd (Fri, 02 Feb 2018 17:17:15 GMT):
Hello, I have a question about the RESTful API. Is it extendable? Can i define my own routes?
jsmitchell (Fri, 02 Feb 2018 17:28:45 GMT):
@qqdd yes. in fact, a great pattern is to build a set of application specific endpoints which talk to the zmq interface directly
jsmitchell (Fri, 02 Feb 2018 17:28:52 GMT):
here is an example from sawtooth marketplace: https://github.com/hyperledger/sawtooth-marketplace/tree/master/rest_api/api
qqdd (Fri, 02 Feb 2018 17:33:24 GMT):
thus effectively I can extend the yaml file accordingly to the OpenAPI standard. How do I let Sawtooth know which yaml file to parse?
jsmitchell (Fri, 02 Feb 2018 17:34:13 GMT):
@zac ^
zac (Fri, 02 Feb 2018 17:40:40 GMT):
@qqdd To be clear, you can build your _own_ REST API
zac (Fri, 02 Feb 2018 17:40:59 GMT):
You could also get into the Python code and modify it of course
qqdd (Fri, 02 Feb 2018 17:41:11 GMT):
Yes, that's cool I realized that by looking at the example! it's great.
zac (Fri, 02 Feb 2018 17:41:16 GMT):
There is no mechanism to turn the YAML spec into routes automatically though
zac (Fri, 02 Feb 2018 17:41:23 GMT):
(though it does get turned into docs)
zac (Fri, 02 Feb 2018 17:41:45 GMT):
Awesome! Glad you like it.
zac (Fri, 02 Feb 2018 17:43:11 GMT):
If you want some examples of more specific REST APIs, you can checkout some of our example projects:
Marketplace (Python Sanic): https://github.com/hyperledger/sawtooth-marketplace
Supply Chain(JavaScript Node.js): https://github.com/hyperledger/sawtooth-supply-chain
qqdd (Fri, 02 Feb 2018 17:46:15 GMT):
thanks, I am going to have a closer look
zac (Fri, 02 Feb 2018 17:51:38 GMT):
If you look at the docker compose files, you'll notice those projects "extend" the default REST API, by just running it in a Docker container
zac (Fri, 02 Feb 2018 17:52:10 GMT):
So it runs as is, and there is a separate API with its own routes
zac (Fri, 02 Feb 2018 17:53:21 GMT):
Of course, in this case the default REST API is only there for debugging purposes. The apps don't use it. But in theory you could hook it up with some proxying and make it look like a single API.
qqdd (Fri, 02 Feb 2018 18:02:20 GMT):
All right, my goal is to get some custom routes for starters.
Another thing: with the subscription model, is there any way to enforce authz? say I do not want to allow subscribe anyone on changes in some part of the state tree.
zac (Fri, 02 Feb 2018 18:05:51 GMT):
Not that I know of
zac (Fri, 02 Feb 2018 18:06:05 GMT):
But I am not generally familiar with the way on-chain permissioning works
zac (Fri, 02 Feb 2018 18:06:19 GMT):
it's possible that would apply to event subscriptions as well
zac (Fri, 02 Feb 2018 18:07:53 GMT):
Generally info on the blockchain is publicly available
zac (Fri, 02 Feb 2018 18:08:01 GMT):
At least to anyone in possession of the blockchain
zac (Fri, 02 Feb 2018 18:08:26 GMT):
A lot of these are going to be deployed in permissioned networks, so only certain parties will have access
qqdd (Fri, 02 Feb 2018 18:08:43 GMT):
Yes that's true, but say in case of a consortium blockchain such a use-case is quite likely
zac (Fri, 02 Feb 2018 18:08:44 GMT):
But _all_ of those certain parties will have access to _everything_ on-hcian
qqdd (Fri, 02 Feb 2018 18:08:57 GMT):
true
zac (Fri, 02 Feb 2018 18:09:24 GMT):
You can limit who submits new transactions with some of Sawtooth's on-chain permissioning
zac (Fri, 02 Feb 2018 18:09:45 GMT):
But I don't think you'll be able who gets to read data, whether from subscriptions or otherwise
zac (Fri, 02 Feb 2018 18:09:45 GMT):
But I don't think you'll be able to limit who gets to read data, whether from subscriptions or otherwise
qqdd (Fri, 02 Feb 2018 18:10:38 GMT):
for example, i got two parties maintaining a common blockchain. I do not want clients of the first party to be real-time aware how the txs of the clients of the 2nd party are doing.
zac (Fri, 02 Feb 2018 18:12:29 GMT):
Other people should chime in if I am saying dumb things, but I don't think that would be possible. Both parties have access to the blockchain, and can do whatever they like with that data. This is kind of fundamental to how a blockchain works. You can't validate each other's data without having access to it.
zac (Fri, 02 Feb 2018 18:13:04 GMT):
And if the other party has access, you can't stop them from publishing it to their clients however they like.
zac (Fri, 02 Feb 2018 18:13:28 GMT):
At least not with any mechanism on the blockchain. You could probably sign a legal contract or something.
qqdd (Fri, 02 Feb 2018 18:13:42 GMT):
OK, i get the message and it makes sense.
qqdd (Fri, 02 Feb 2018 18:14:05 GMT):
thanks
tkuhrt (Fri, 02 Feb 2018 19:00:56 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=WLFFexFLmgPRvaNcG) Sorry...just seeing this message after my travels. Yes, this is based on 0.8. We could add something to the README and add link to the 0.8 documentation.
tkuhrt (Fri, 02 Feb 2018 19:03:27 GMT):
Recently, someone reached out about the following link: https://sawtooth.hyperledger.org/docs/core/releases/latest/solidity_developers_guide/seth_rpc.html, which they found on the Internet somewhere. Obviously, this is from when the SETH work was still part of Sawtooth Core repo. I was asked if there was anyway we could redirect this page to the new documentation that exists under the sawtooth-seth repo. Would the Sawtooth community object to a PR for creating a document in the sawtooth-core repo that points to the new documentation?
amundson (Fri, 02 Feb 2018 19:11:10 GMT):
@tkuhrt the intent is to do it with apache redirects and we haven't established the pattern for that quite yet. this can be our example URL though to figure it out.
tkuhrt (Fri, 02 Feb 2018 19:12:03 GMT):
okay...anything that I can do to help, @amundson ?
amundson (Fri, 02 Feb 2018 19:13:24 GMT):
probably not on that specifically, but we have also had folks from the class using a stale docker-compose file that uses :latest tags instead of :0.8 and I'm wondering if the current class includes that stale file
tkuhrt (Fri, 02 Feb 2018 19:22:30 GMT):
I did update that recently.
amundson (Fri, 02 Feb 2018 19:22:46 GMT):
oh, cooll
tkuhrt (Fri, 02 Feb 2018 19:22:53 GMT):
Zac called it out earlier this week after 1.0 went out
tkuhrt (Fri, 02 Feb 2018 19:23:13 GMT):
So hopefully that will help. Also going to update the README that is part of the class to be very specific that they are using 0.8
amundson (Fri, 02 Feb 2018 19:31:17 GMT):
that's a good idea
zac (Fri, 02 Feb 2018 19:35:54 GMT):
Yeah, the docker-file fix went out the day 1.0 dropped
KevinI (Fri, 02 Feb 2018 21:12:00 GMT):
Has joined the channel.
vijayin26 (Fri, 02 Feb 2018 22:42:05 GMT):
Has joined the channel.
vijayin26 (Fri, 02 Feb 2018 22:44:05 GMT):
In Sawtooth 1.0 it mentioned Sawtooth also uniquely offers “global state agreement,” an assurance that each node has
cryptographically identical copies of the blockchain database. Could someone explain how it works?
kakuzu (Fri, 02 Feb 2018 23:16:37 GMT):
Has joined the channel.
mihaipruna (Sat, 03 Feb 2018 00:56:06 GMT):
I cannot get it to play tic tac toe: xo init
usage: xo [-h] [-v] [-V] {create,list,show,take,delete} ...
xo: error: argument command: invalid choice: 'init' (choose from 'create', 'list', 'show', 'take', 'delete')
mogamboizer (Sat, 03 Feb 2018 01:28:50 GMT):
Has joined the channel.
pandasa (Sat, 03 Feb 2018 03:53:55 GMT):
Has joined the channel.
pandasa (Sat, 03 Feb 2018 03:54:16 GMT):
Hey guys, quick question: mktplace.sawtooth.me isn't letting me demo the marketplace
vs0901 (Sat, 03 Feb 2018 07:37:58 GMT):
Has joined the channel.
aleksfarrier (Sat, 03 Feb 2018 10:14:22 GMT):
Has joined the channel.
aleksfarrier (Sat, 03 Feb 2018 10:19:24 GMT):
Hi guys. Please explain the simple question. I've installed Sawtooth to computer N 1. And I've run validator, transaction proccessors, REST API. I can make request like curl http://localhost:8080/blocks.
Now I want create copy of this blockchain on computer N 2. What way they it should be replicated? What protocol is used - REST or something else? I cannot find clear explanation of this. Help please.
atonit (Sat, 03 Feb 2018 12:25:38 GMT):
Has joined the channel.
ualtinay (Sat, 03 Feb 2018 14:58:26 GMT):
Has joined the channel.
kakuzu (Sat, 03 Feb 2018 15:31:08 GMT):
hi
aleksfarrier (Sat, 03 Feb 2018 15:35:58 GMT):
Saw the documentation about blockchain product - https://sawtooth.hyperledger.org/docs/core/releases/latest/contents.html
There's nothing about replication of ledger between peer nodes and clones blockchain between participants of network. This is very weird. How could that be?
pierfrancopasero (Sat, 03 Feb 2018 15:44:13 GMT):
Has joined the channel.
grkvlt (Sat, 03 Feb 2018 16:08:18 GMT):
@aleksfarrier they use the ZeroMQ (or 0MQ) messaging/gossip protocol to communicate on port 4004 between nodes, this lets the validators process transaction batches and achieve consensus
grkvlt (Sat, 03 Feb 2018 16:09:55 GMT):
so, start another validator and configure it to use the first one as a peer in the list of seeds - i think there are examples of this in the Docker Compose YAML files for the tests
mihaipruna (Sat, 03 Feb 2018 21:48:26 GMT):
how do I install xo-tp-javascript transaction processor?
mihaipruna (Sat, 03 Feb 2018 21:48:32 GMT):
Ubuntu 16.04
joshuaherman (Sat, 03 Feb 2018 23:06:20 GMT):
Has joined the channel.
joshuaherman (Sat, 03 Feb 2018 23:06:22 GMT):
hi
joshuaherman (Sat, 03 Feb 2018 23:06:32 GMT):
i am trying out the demo on safari and i have an error
joshuaherman (Sat, 03 Feb 2018 23:08:19 GMT):
https://pastebin.com/raw/i5tcMkSE
joshuaherman (Sat, 03 Feb 2018 23:09:11 GMT):
I get the error unable to submit a transaction
joshuaherman (Sat, 03 Feb 2018 23:09:21 GMT):
https://mktplace.sawtooth.me/#/intro
joshuaherman (Sat, 03 Feb 2018 23:10:41 GMT):
@pandasa i noticed that too
SamuelDare (Sun, 04 Feb 2018 12:15:01 GMT):
Has joined the channel.
SamuelDare (Sun, 04 Feb 2018 12:26:26 GMT):
Hi
SamuelDare (Sun, 04 Feb 2018 12:26:46 GMT):
Having a look around and wanted to try the demos
SamuelDare (Sun, 04 Feb 2018 12:26:56 GMT):
are websites down?
SamuelDare (Sun, 04 Feb 2018 12:27:09 GMT):
`bond` trading does not allow me to select a firm
SamuelDare (Sun, 04 Feb 2018 12:28:05 GMT):
and `digital marketplace` says the server is down when I try to register a participant
SamuelDare (Sun, 04 Feb 2018 12:28:43 GMT):
Screen Shot 2018-02-04 at 12.28.26.png
SamuelDare (Sun, 04 Feb 2018 12:33:15 GMT):
Following the tutorial here:
SamuelDare (Sun, 04 Feb 2018 12:33:22 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/0.7/tutorial.html
SamuelDare (Sun, 04 Feb 2018 12:33:33 GMT):
% cd $HOME
% mkdir project
% cd project
% git clone https://github.com/IntelLedger/sawtooth-core.git
SamuelDare (Sun, 04 Feb 2018 12:33:33 GMT):
```
% cd $HOME
% mkdir project
% cd project
% git clone https://github.com/IntelLedger/sawtooth-core.git
```
SamuelDare (Sun, 04 Feb 2018 12:33:42 GMT):
has sawtooth core moved?
ipolizos (Sun, 04 Feb 2018 12:46:20 GMT):
Has joined the channel.
LukasFischer (Sun, 04 Feb 2018 17:44:18 GMT):
Has joined the channel.
LukasFischer (Sun, 04 Feb 2018 17:46:46 GMT):
Hi, I am trying to run the xo demo.I get the following error: Pulling xo-tp-go (sawtooth-xo-tp-go:latest)...
ERROR: pull access denied for sawtooth-xo-tp-go, repository does not exist or may require 'docker login'
jlazyj (Sun, 04 Feb 2018 18:13:16 GMT):
Once a blockchain application is started, can it be modified? For example, if your using it to track chain of ownership, can a data field be added after it's up and running?
ajithjosek (Sun, 04 Feb 2018 20:18:59 GMT):
Has joined the channel.
markus24de (Sun, 04 Feb 2018 21:59:48 GMT):
Has joined the channel.
markus24de (Sun, 04 Feb 2018 22:04:19 GMT):
Hello! Who can help me in search for information about Requirements masternodes to sawtooth hyprledger
amundson (Sun, 04 Feb 2018 23:48:52 GMT):
@SamuelDare yeah, sawtooth-core repo is now under hyperledger. also, 0.7 is very old.
amundson (Sun, 04 Feb 2018 23:57:04 GMT):
@jlazyj yes. from a transaction processor perspective, you can do rolling upgrades across the network. the only constraint is that you need to be able to execute historical transactions in addition to newer transactions. transaction families are versioned for this reason (family_name, family_version). if using smart contracts deployed to the network (such as the case when using Seth w/EVM), the pattern is determined by the smart contract implementation (such as Seth).
amundson (Sun, 04 Feb 2018 23:58:26 GMT):
@markus24de can you elaborate on your question a bit?
colltrix (Mon, 05 Feb 2018 03:45:34 GMT):
Has joined the channel.
bogomazov (Mon, 05 Feb 2018 07:14:14 GMT):
has anyone successfully run sawtooth-seth?
ForwardMomentum (Mon, 05 Feb 2018 10:06:40 GMT):
Guys, from https://sawtooth.hyperledger.org/docs/core/releases/1.0.1/app_developers_guide/testing.html article I know how to write and where to found tests (e g for XO) but can not run them successfully. I trying to run ```nosetests
ForwardMomentum (Mon, 05 Feb 2018 10:06:40 GMT):
Guys, from https://sawtooth.hyperledger.org/docs/core/releases/1.0.1/app_developers_guide/testing.html article I know how to write and where to found tests (e g for XO) but can not run them successfully. I trying to run ```nosetests
ForwardMomentum (Mon, 05 Feb 2018 10:06:40 GMT):
Guys, from https://sawtooth.hyperledger.org/docs/core/releases/1.0.1/app_developers_guide/testing.html article I know how to write and where to found tests (e g for XO) but can not run them successfully. I trying to run ```nosetests
adewinne (Mon, 05 Feb 2018 11:10:34 GMT):
Has joined the channel.
shicholas (Mon, 05 Feb 2018 14:06:07 GMT):
Has joined the channel.
Dan (Mon, 05 Feb 2018 15:45:18 GMT):
@achenette another instance of FAQ: how do I run a second node. https://lists.hyperledger.org/pipermail/hyperledger-stl/2018-February/000172.html
Dan (Mon, 05 Feb 2018 15:46:15 GMT):
for @aleksfarrier 's question above ^
Dan (Mon, 05 Feb 2018 15:49:32 GMT):
@pandasa Sorry, I think we need to update those links. There's a newer market place here: https://github.com/hyperledger/sawtooth-marketplace
You can actually run it locally if you have docker installed.
aleksfarrier (Mon, 05 Feb 2018 16:57:22 GMT):
thanks)
mahoney1 (Mon, 05 Feb 2018 18:43:49 GMT):
Has joined the channel.
pschwarz (Mon, 05 Feb 2018 21:20:15 GMT):
@jaredcorduan @bill.cawthra Pushed a PR to address the block info issue that you've been seeing: https://github.com/hyperledger/sawtooth-core/pull/1416
pschwarz (Mon, 05 Feb 2018 21:21:13 GMT):
It may also correct the issue discussed in STL-1034
sakiman12 (Tue, 06 Feb 2018 03:52:48 GMT):
Has joined the channel.
sakiman12 (Tue, 06 Feb 2018 03:54:58 GMT):
Hello - new here. Has anyone used Sawtooth to launch their own crypto currency? Trying to understand if this is a realistic solution or if we should deploy on a public BlockChain solution, like Ethereum. It seems Sawtooth meets the requirements, but I can’t seem to find a direct use case in my internet search (most applications seem to be focused on enterprise and general assets which I understand is the core value prop of Hyperledger). I’d really like to be able to point to something or justify my logic to my business leaders before I jump with both feet in). Thanks!!!!
YukiTruckServices (Tue, 06 Feb 2018 04:34:08 GMT):
Has joined the channel.
askmish (Tue, 06 Feb 2018 05:28:33 GMT):
@sakiman12 What kind of cryptocurrency - public or private?
sakiman12 (Tue, 06 Feb 2018 06:52:41 GMT):
@askmish great question. Without getting into the details of the business, the thinking is we’re going to be building a utility token on a private BlockChain that would be used to release coins on a public BlockChain. So, I guess the answer to your question is both. I believe Sawtooth would be fine for the private solution, just not sure about the public. What are your opinions on a crypto on either a private or public, regardless of our specific application?
AshwinKumar844129 (Tue, 06 Feb 2018 09:31:14 GMT):
Has joined the channel.
AshwinKumar844129 (Tue, 06 Feb 2018 09:33:05 GMT):
when i test runs following command "xo create game --username jack" nothing happens, says bad command ??
AshwinKumar844129 (Tue, 06 Feb 2018 09:39:17 GMT):
Clipboard - February 6, 2018 3:09 PM
tholder (Tue, 06 Feb 2018 09:52:35 GMT):
Has joined the channel.
tholder (Tue, 06 Feb 2018 09:53:10 GMT):
hey all, I've only just found out about Sawtooth. Can anyone explain or point me to a good article on the differences between sawtooth and fabric?
MaritereNieto (Tue, 06 Feb 2018 09:53:28 GMT):
Hi everyoine, why has the sawtooth-seth docker-compose file been removed from 1.0 version in the repository https://github.com/hyperledger/sawtooth-core ?
askmish (Tue, 06 Feb 2018 10:08:33 GMT):
@AshwinKumar844129 You should be running that command from either sawtooth default shell docker: docker exec -it sawtooth-shell-default bash or directly from host system
askmish (Tue, 06 Feb 2018 10:10:23 GMT):
@tholder Just googling the same would yield you a bunch of good articles
askmish (Tue, 06 Feb 2018 10:11:59 GMT):
:)
askmish (Tue, 06 Feb 2018 10:14:41 GMT):
@MaritereNieto sawtooth-seth is now here https://github.com/hyperledger/sawtooth-seth
askmish (Tue, 06 Feb 2018 10:18:45 GMT):
@sakiman12 You're probably looking for: https://github.com/hyperledger/sawtooth-seth
AshwinKumar844129 (Tue, 06 Feb 2018 10:23:17 GMT):
Thanks for reply but getting this error now root@ebe055698393:/# xo create game --username jack
Error: Failed to connect to http://127.0.0.1:8008/batches: HTTPConnectionPool(host='127.0.0.1', port=8008): Max retries exceeded with url: /batches (Caused by NewConnectionError('
askmish (Tue, 06 Feb 2018 10:40:11 GMT):
@AshwinKumar844129 You need to specify the url of the rest-api: xo create game --username jack --url http://rest-api:8008
askmish (Tue, 06 Feb 2018 10:43:13 GMT):
For dockers
AshwinKumar844129 (Tue, 06 Feb 2018 10:48:50 GMT):
@askmish Thanks
MaritereNieto (Tue, 06 Feb 2018 10:51:52 GMT):
thanks for answering @askmish , I'm trying to build the source but it fails with the command apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8AA7AF1F1091A5FD
MaritereNieto (Tue, 06 Feb 2018 10:51:52 GMT):
thanks for answering @askmish
AshwinKumar844129 (Tue, 06 Feb 2018 11:55:42 GMT):
XO game is running successfully, will you please guide to input to the XO game from other PC from same network ?
AshwinKumar844129 (Tue, 06 Feb 2018 11:56:31 GMT):
Clipboard - February 6, 2018 5:26 PM
askmish (Tue, 06 Feb 2018 12:14:04 GMT):
@AshwinKumar844129 For that you'll have to configure rest-api to listen on your ip address using --bind Refer: https://sawtooth.hyperledger.org/docs/core/releases/latest/cli/rest_api.html#sawtooth-rest-api
bogomazov (Tue, 06 Feb 2018 12:14:43 GMT):
sawtooth-seth fails to run. I am using Dockerfile from https://github.com/hyperledger/sawtooth-seth and running `docker-compose build` which has finished successfully, but `docker run sawtooth-seth` errors with `/bin/sh: 1: build_seth: not found`
bogomazov (Tue, 06 Feb 2018 12:16:15 GMT):
(repo was cloned as well)
jon_s (Tue, 06 Feb 2018 16:45:21 GMT):
Has joined the channel.
nutthasakrotchirat (Tue, 06 Feb 2018 19:04:11 GMT):
Has joined the channel.
bill.cawthra (Tue, 06 Feb 2018 21:05:05 GMT):
anyone have any advice on running opentsdb with the sawtooth validators? i'm seeing a lot of:
```
validator_1 | [2018-02-06 21:05:03.857 WARNING influx] Cannot write to opentsdb: Not Found
```
bill.cawthra (Tue, 06 Feb 2018 21:05:35 GMT):
it appears to attempt to write to opentsdb:
```
opentsdb_1 | 2018-02-06 21:05:43,944 WARN HttpQuery: [id: 0x5a873da9, /192.168.0.2:35160 => /192.168.0.4:4242] Not Found: /write?db=hbase&precision=s
```
Dan (Tue, 06 Feb 2018 21:17:03 GMT):
@bogomazov are you using the seth PR branch you commented in or master? If master isn't happy then please try that PR branch. If that PR branch is also broken, please double check the path in the compose file.
jsmitchell (Tue, 06 Feb 2018 22:54:23 GMT):
@bill.cawthra that should only be happening if you are specifying those opentsdb arguments on the command line or in the conf file to enable metrics
jsmitchell (Tue, 06 Feb 2018 22:54:50 GMT):
if you have not supplied those arguments, then that could be a bug
jsmitchell (Tue, 06 Feb 2018 22:55:06 GMT):
@pschwarz @adamludvik ^
rkrish82 (Wed, 07 Feb 2018 04:42:18 GMT):
Has joined the channel.
keyur (Wed, 07 Feb 2018 05:39:51 GMT):
Has joined the channel.
bogomazov (Wed, 07 Feb 2018 08:30:25 GMT):
@Dan So I had to add `COPY . /project/sawtooth-seth` to Dockerfile
bogomazov (Wed, 07 Feb 2018 08:30:25 GMT):
@Dan Soi I had to add `COPY . /project/sawtooth-seth` to Dockerfile
yllan (Wed, 07 Feb 2018 09:16:19 GMT):
Has joined the channel.
bogomazov (Wed, 07 Feb 2018 10:18:48 GMT):
It is my issue I thought I ran /bin/build_all locally
bogomazov (Wed, 07 Feb 2018 10:22:56 GMT):
I thought it is only needed within the container, but volumes in docker-compose replaced it with my local one
bogomazov (Wed, 07 Feb 2018 10:22:56 GMT):
I assumed it is only needed within the container, but volumes in docker-compose replaced it with my local one
bogomazov (Wed, 07 Feb 2018 10:22:56 GMT):
I assumed it is only needed within the container, but volumes in docker-compose replaced it with the local one
bogomazov (Wed, 07 Feb 2018 10:29:52 GMT):
Screen Shot 2018-02-07 at 12.28.36 PM.png
bogomazov (Wed, 07 Feb 2018 10:35:32 GMT):
password is correct*
bogomazov (Wed, 07 Feb 2018 10:35:32 GMT):
password is correct*
Also, `hyperledger/sawtooth-block-info-tp` is unavailable
bogomazov (Wed, 07 Feb 2018 10:35:32 GMT):
password is correct*
Also, `hyperledger/sawtooth-block-info-tp` is unavailable
Will appreciate any help
bogomazov (Wed, 07 Feb 2018 10:46:30 GMT):
`sawtooth-block-info-tp` is unavailable
bogomazov (Wed, 07 Feb 2018 10:46:30 GMT):
`hyperledger/sawtooth-block-info-tp` is unavailable
OSubachev (Wed, 07 Feb 2018 13:31:38 GMT):
How to configure Sawtooth REST API to accept not local requests ?
I've successfully launched Sawtooth on Ubuntu 16.04 according to:
https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/ubuntu.html#using-sawtooth-on-ubuntu-16-04
I use Ubuntu virtual machine under Azure.
When I run locally:
curl http://127.0.0.1:8008/blocks
or
curl http://localhost:8008/blocks
all is OK, I get JSON with blocks.
But when I run locally:
curl http://40.68.248.133:8008/blocks
or
curl http://posolubuntuhlsawtooth.westeurope.cloudapp.azure.com:8008/blocks
where 40.68.248.133 and posolubuntuhlsawtooth.westeurope.cloudapp.azure.com
are addresses of my Ubuntu virtual machine under Azure,
I get:
curl: (7) Failed to connect to 40.68.248.133 port 8008: Connection refused
or
curl: (7) Failed to connect to posolubuntuhlsawtooth.westeurope.cloudapp.azure.com port 8008: Connection refused
All ports are opened.
Ping to both addresses works OK.
What's wrong ?
How to configure Sawtooth REST API to accept not local requests ?
MaritereNieto (Wed, 07 Feb 2018 14:12:59 GMT):
I have tried to learn about the sawtooth-seth, I have download it from https://github.com/hyperledger/sawtooth-seth . After I have execute de build command (./bin/build_all). Then, when i'm going to execute a docker-compose up, the image hyperledger/sawtooth-block-info-tp is not found. I have fixed replacing it with scotcoin/sawtooth-block-info-tp . Where is the official image?
I had another issue, when i am going to create an account (following these steps : https://sawtooth.hyperledger.org/docs/seth/nightly/master/seth_developers_guide/getting_started.html#creating-an-account ) I have the following error:
```
root@5acc5a3b1031:/project/sawtooth-seth# seth account create myalias --wait
Enter Password to unlock myalias:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x4aa8cd]
goroutine 1 [running]:
panic(0x83ed00, 0xc820010090)
/usr/lib/go-1.6/src/runtime/panic.go:481 +0x3e6
sawtooth_seth/client.(*Client).LookupAccountNonce(0xc8203dfb10, 0xc8200cdcc0, 0x20, 0x20, 0x20, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/client/client.go:121 +0x35d
main.(*AccountCreate).Run(0xc82000a690, 0xc8203ea6b0, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/account_create.go:82 +0x369
main.(*Account).Run(0xc8200cd420, 0xc8203ea6b0, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/account.go:60 +0x14e
main.main()
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/main.go:102 +0xaa2
```
What is going wrong? Thanks!! :)
MaritereNieto (Wed, 07 Feb 2018 14:12:59 GMT):
I have tried to do a poc about the sawtooth-seth, I have download it from https://github.com/hyperledger/sawtooth-seth . After I have execute de build command (./bin/build_all). Then, when i'm going to execute a docker-compose up, the image hyperledger/sawtooth-block-info-tp is not found. I have fixed replacing it with scotcoin/sawtooth-block-info-tp . Where is the official image?
I had another issue, when i am going to create an account (following these steps : https://sawtooth.hyperledger.org/docs/seth/nightly/master/seth_developers_guide/getting_started.html#creating-an-account ) I have the following error:
```
root@5acc5a3b1031:/project/sawtooth-seth# seth account create myalias --wait
Enter Password to unlock myalias:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x4aa8cd]
goroutine 1 [running]:
panic(0x83ed00, 0xc820010090)
/usr/lib/go-1.6/src/runtime/panic.go:481 +0x3e6
sawtooth_seth/client.(*Client).LookupAccountNonce(0xc8203dfb10, 0xc8200cdcc0, 0x20, 0x20, 0x20, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/client/client.go:121 +0x35d
main.(*AccountCreate).Run(0xc82000a690, 0xc8203ea6b0, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/account_create.go:82 +0x369
main.(*Account).Run(0xc8200cd420, 0xc8203ea6b0, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/account.go:60 +0x14e
main.main()
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/main.go:102 +0xaa2
```
What is going wrong? Thanks!! :)
MaritereNieto (Wed, 07 Feb 2018 14:12:59 GMT):
I have tried to do a poc about the sawtooth-seth, I have download it from https://github.com/hyperledger/sawtooth-seth . After I have execute de build command (./bin/build_all). Then, when i'm going to execute a docker-compose up, the image hyperledger/sawtooth-block-info-tp is not found. I have fixed it replacing with scotcoin/sawtooth-block-info-tp . Where is the official image?
I had another issue, when i am going to create an account (following these steps : https://sawtooth.hyperledger.org/docs/seth/nightly/master/seth_developers_guide/getting_started.html#creating-an-account ) I have the following error:
```
root@5acc5a3b1031:/project/sawtooth-seth# seth account create myalias --wait
Enter Password to unlock myalias:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x4aa8cd]
goroutine 1 [running]:
panic(0x83ed00, 0xc820010090)
/usr/lib/go-1.6/src/runtime/panic.go:481 +0x3e6
sawtooth_seth/client.(*Client).LookupAccountNonce(0xc8203dfb10, 0xc8200cdcc0, 0x20, 0x20, 0x20, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/client/client.go:121 +0x35d
main.(*AccountCreate).Run(0xc82000a690, 0xc8203ea6b0, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/account_create.go:82 +0x369
main.(*Account).Run(0xc8200cd420, 0xc8203ea6b0, 0x0, 0x0)
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/account.go:60 +0x14e
main.main()
/project/sawtooth-seth/families/seth/src/sawtooth_seth/cli/main.go:102 +0xaa2
```
What is going wrong? Thanks!! :)
markus24de (Wed, 07 Feb 2018 14:39:01 GMT):
Hello all! Who can tell me system requirements for validation node (cpu memory system os)
askmish (Wed, 07 Feb 2018 14:58:07 GMT):
@OSubachev You'll need to tell rest-api to bind to your machine's IP, where its running using the --bind option: https://sawtooth.hyperledger.org/docs/core/releases/latest/cli/rest_api.html#sawtooth-rest-api
askmish (Wed, 07 Feb 2018 14:58:51 GMT):
By default, rest-api will bind to localhost only.
askmish (Wed, 07 Feb 2018 15:01:38 GMT):
@markus24de The system requirements usually depend on the usecase and nature of deployment.
jaredcorduan (Wed, 07 Feb 2018 15:05:01 GMT):
@pschwarz your recent merge to master looks great, thank you!
jsmitchell (Wed, 07 Feb 2018 15:08:30 GMT):
:clap_tone1:
pschwarz (Wed, 07 Feb 2018 15:11:29 GMT):
@jaredcorduan Hopefully, you can test against master. It might be a week or so before we can get it merged back into the 1-0 branch for a 1.0.x release
jaredcorduan (Wed, 07 Feb 2018 15:12:18 GMT):
yea, np, I'll :hammer: on master some today.
jaredcorduan (Wed, 07 Feb 2018 15:13:53 GMT):
We've been doing lots of experiments on `1.0.1` yesterday and today. a transaction that only appends data to a single merkle address seems very stable at 1k txns a second.
jaredcorduan (Wed, 07 Feb 2018 15:14:47 GMT):
a transaction that only reads block info and logs (no write to any merkle address) I can get to start missing block info at 20 txns per second.
jaredcorduan (Wed, 07 Feb 2018 15:15:01 GMT):
this is devmode, one validator
jaredcorduan (Wed, 07 Feb 2018 15:15:30 GMT):
and every so often, I get the validators to lock, but it's pretty rare.
jaredcorduan (Wed, 07 Feb 2018 15:15:43 GMT):
erm, validator :)
jaredcorduan (Wed, 07 Feb 2018 15:16:06 GMT):
when I get the lock, it's with high throughput, like 1k a sec
eccheung4 (Wed, 07 Feb 2018 15:26:17 GMT):
Has joined the channel.
adamludvik (Wed, 07 Feb 2018 15:34:44 GMT):
@grkvlt can you provide any assistance to @bogomazov or @MaritereNieto with respect to getting seth up and running? I think you probably have the most up-to-date knowledge at this point.
grkvlt (Wed, 07 Feb 2018 16:19:08 GMT):
@bogomazov @MaritereNieto when creating an account using Seth, I used the following commands, where `seth-tp` is the name of the container runnin g the Seth transaction processor:
```$ docker exec -ti seth-tp bash
# seth init http://rest-api:8080
# ALIAS=myaccount
# openssl ecparam -genkey -name secp256k1 | openssl ec -out ${ALIAS}.pem
# seth account import ${ALIAS}.pem ${ALIAS} > /dev/null
# seth account create --nonce=0 --wait ${ALIAS}
```
Can you give that a try and let me know how you get on? Also, make sure you run `seth-rpc` with `--unlock ${ALIAS}` as part of the arguments, and also copy the `${ALIAS}.pem` file created on the transaction processor to the `~/.sawtooth/` directory on the RPC container.
Dan (Wed, 07 Feb 2018 17:30:25 GMT):
Can someone answer this post? https://lists.hyperledger.org/pipermail/hyperledger-stl/2018-February/000173.html
grkvlt (Wed, 07 Feb 2018 17:33:49 GMT):
@Dan interestingly, I've been using https://brooklyn.apache.org/ to put together a blueprint which deploys a multi-node Sawtooth/Seth cluster, and I am going through the required process at my company to make it open source, but unfortunately I can't release it yet ;(
Dan (Wed, 07 Feb 2018 17:38:34 GMT):
Oh that will be awesome!
grkvlt (Wed, 07 Feb 2018 19:08:38 GMT):
BTW @bogomazov to run the `build_seth` command from Docker, via the `sawtooth-dev-seth` image, use these commands:
``` $ docker build . -t sawtooth-dev-seth
$ docker run -v $(pwd):/project/sawtooth-seth sawtooth-dev-seth
```
The instructions in the Dockerfile are wrong, but I will change them for the future.
grkvlt (Wed, 07 Feb 2018 19:08:38 GMT):
BTW @bogomazov to run the `build_seth` command from Docker, via the `sawtooth-dev-seth` image, use these commands:
```$ docker build . -t sawtooth-dev-seth
$ docker run -v $(pwd):/project/sawtooth-seth sawtooth-dev-seth
```
The instructions in the Dockerfile are wrong, but I will change them for the future.
CocoLife (Wed, 07 Feb 2018 19:53:23 GMT):
Has joined the channel.
CocoLife (Wed, 07 Feb 2018 19:53:29 GMT):
Hello there,
I was launching a traceability project, I was looking for the technical architecture of the Hyperledger Sawtooth
Can anyone direct me to the page. Thanks
kelly_ (Wed, 07 Feb 2018 20:08:15 GMT):
@CocoLife https://sawtooth.hyperledger.org/docs/core/releases/1.0.1/
Dan (Wed, 07 Feb 2018 20:11:59 GMT):
@CocoLife see also supply chain / traceability example https://github.com/hyperledger/sawtooth-supply-chain
CocoLife (Wed, 07 Feb 2018 20:16:03 GMT):
Wonderful
CocoLife (Wed, 07 Feb 2018 20:16:05 GMT):
Thanks
candidosg (Wed, 07 Feb 2018 20:16:14 GMT):
Guys, what's the difference between Blocks and Batches?
zac (Wed, 07 Feb 2018 20:21:45 GMT):
Transactions -> Batches -> Blocks
zac (Wed, 07 Feb 2018 20:22:10 GMT):
Transactions contain a custom payload, which defines some sort of logic, like a change in state.
zac (Wed, 07 Feb 2018 20:23:19 GMT):
Batches are collections of Transactions that are sent together to the validator. They are evaluated together and in order. If one of them fails, the others will be thrown out as well. This is the atomic unit of change in Sawtooth. Either the whole Batch goes through, or none of the Batch goes through.
zac (Wed, 07 Feb 2018 20:25:29 GMT):
Blocks are collections of Batches which are grouped together and become a (semi-)permanent part of the blockchain. They are equivalent to blocks in other blockchains. You group together some data, include a link to the previous block of data, and then write it to the chain. The next block will include a link to the current one, and so forth.
zac (Wed, 07 Feb 2018 20:26:31 GMT):
In Bitcoin, Transactions are always transfers of bitcoin from one address to another. There are no Batches. Those Transactions are gathered and grouped into blocks every ten minutes or so, and then added to the chain.
zac (Wed, 07 Feb 2018 20:26:31 GMT):
In Bitcoin, Transactions are always transfers of bitcoin from one address to another. There are no Batches. Those Transactions are gathered and grouped directly into Blocks every ten minutes or so, and then added to the chain.
candidosg (Wed, 07 Feb 2018 20:31:15 GMT):
Thanks :D
CocoLife (Wed, 07 Feb 2018 21:17:48 GMT):
I have a questions, Can Hyperledger Sawtooth be integrated with ETH. Like a Dual Platform ?
kelly_ (Wed, 07 Feb 2018 21:24:01 GMT):
@CocoLife you can run ethereum smart contracts on sawtooth, through the 'seth' project
kelly_ (Wed, 07 Feb 2018 21:24:09 GMT):
but it will not connect to public ethereum
CocoLife (Wed, 07 Feb 2018 21:24:29 GMT):
can you give me an example how that works ?
alberto_souza (Wed, 07 Feb 2018 21:33:05 GMT):
I am trying to configure sawtooth following steps from the docs => https://sawtooth.hyperledger.org/docs/core/releases/1.0.1/app_developers_guide/ubuntu.html. Everything went fine, but the rest api is not responding for requests from the outside world .. I configured a droplet at digitalocean ... If you access => http://188.166.124.156:8080/blocks, you will wait for ever Any ideas?
alberto_souza (Wed, 07 Feb 2018 21:33:56 GMT):
I had to use the bind and connect parameter to specify the IP of the machine... I already can register processors, but the rest api...
alberto_souza (Wed, 07 Feb 2018 21:35:30 GMT):
the rest-api is not able to connect to the validators => {
"error": {
"code": 17,
"message": "The request timed out while waiting for a response from the validator. Your request may or may not have been processed.",
"title": "Validator Timed Out"
}
}
alberto_souza (Wed, 07 Feb 2018 21:38:21 GMT):
solved, thanks :). we have to pass the connect parameter to rest-api
alberto_souza (Wed, 07 Feb 2018 22:37:20 GMT):
For some reason, when I tried to register my processor in the remote sawtooth instance I got the message: Registration of [onlinevoting 0.0.1 application/json] failed ... Any ideas? The server's console shows that the processor was registered, but when I try to process a transaction the status is always pending...
zac (Wed, 07 Feb 2018 23:04:17 GMT):
@alberto_souza The logging might be a little deceptive there
zac (Wed, 07 Feb 2018 23:05:15 GMT):
If your TP indeed failed to register, then that is how the validator would behave on submitting transactions for that TP
zac (Wed, 07 Feb 2018 23:05:36 GMT):
They would just stay in the pending queue until the TP registered properly
zac (Wed, 07 Feb 2018 23:05:36 GMT):
@CocoLife The Seth transaction processor can execute a subset of EVM commands. So you can submit Ethereum smart contracts to it, and that will result in state changes analogous to what you would see if you submitted the same smart contract to the Ethereum network.
craik.zhang (Thu, 08 Feb 2018 00:46:24 GMT):
Has joined the channel.
supersergiy (Thu, 08 Feb 2018 00:49:14 GMT):
Has joined the channel.
supersergiy (Thu, 08 Feb 2018 00:51:52 GMT):
hey guys, do I understand correctly that each validator in the network needs to run its own TP, and in order to reach consensus all TP's have to produce identical state changes for each block?
gaurang (Thu, 08 Feb 2018 06:56:03 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Lc3zn5fza7h2Qdujj) @supersergiy Yes I am too surprised.
gaurang (Thu, 08 Feb 2018 06:56:56 GMT):
If I don't attach the TP Family to peer validator, it's not accepting the tx block.
gaurang (Thu, 08 Feb 2018 06:58:08 GMT):
What will happen in case multiple validator running different version of TP s/w. It seems like TP is not part of common network.
Johnjam (Thu, 08 Feb 2018 08:00:44 GMT):
Hi everyone ! I struggle to understand the real meaning of "local mean" in sawtooth validator code and PoET consensus code. The documentation describe it a little bit in the PoET specifications 1.0 (https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/poet.html?highlight=local%20mean) but if someone have an article or some explanations, it would be helpful !
askmish (Thu, 08 Feb 2018 08:29:29 GMT):
@supersergiy @gaurang Yes, each validator has to have the exact same version of TP with it, running on the same network. At a higher level, Transaction processors are based on Transaction families(TF) and if you're sending batches to validator related to a particular TF, those are processed by TPs ultimately and stored.
callmeashok (Thu, 08 Feb 2018 09:01:28 GMT):
Has joined the channel.
bogomazov (Thu, 08 Feb 2018 09:46:39 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=rMAKu3ihu7ZxeKn7N) @grkvlt thank you, it worked precisely! However, my final step is to use Truffle to deploy contracts. I specified `3030` port in `truffle.js` config file, and while calling `truffle migrate` it gets stuck and logs are shown from `seth-rpc` neither `seth-tp`
bogomazov (Thu, 08 Feb 2018 09:46:39 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=rMAKu3ihu7ZxeKn7N) @grkvlt thank you, it worked precisely! However, my final step is to use Truffle to deploy contracts. I specified `3030` port in `truffle.js` config file, and while calling `truffle migrate` it gets stuck and no logs are shown from `seth-rpc` neither `seth-tp`
bogomazov (Thu, 08 Feb 2018 09:47:00 GMT):
Screen Shot 2018-02-08 at 11.45.57 AM.png
bogomazov (Thu, 08 Feb 2018 10:11:21 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=rMAKu3ihu7ZxeKn7N) @grkvlt Thank you for your response, it worked precisely! I am currenlty facing `seth-rpc` issue when I call `truffle migrate` (in truffle config I specified `$ALIAS`'s addres to send transactions from)
bogomazov (Thu, 08 Feb 2018 10:11:21 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=rMAKu3ihu7ZxeKn7N) @grkvlt Thank you for your response, it worked precisely! My last step is to use Truffle to deploy and interact with contracts. But I am facing `seth-rpc` issue when I call `truffle migrate` (in truffle config I specified `$ALIAS`'s addres to send transactions from, as well as the right port to connect to seth-rpc). Hope you had success with using Truffle
bogomazov (Thu, 08 Feb 2018 10:11:21 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=rMAKu3ihu7ZxeKn7N) @grkvlt Thank you for your response, it worked precisely! My last step is to use Truffle to deploy and interact with contracts. But I am facing `seth-rpc` issue when I call `truffle migrate` (in truffle config I specified `$ALIAS`'s addres to send transactions from, as well as the right port to connect to seth-rpc). Hope you had success with using Truffle and may know what could be the issue
bogomazov (Thu, 08 Feb 2018 10:11:40 GMT):
Screen Shot 2018-02-08 at 12.09.32 PM.png
bogomazov (Thu, 08 Feb 2018 10:22:48 GMT):
I defined RUST_BACKTRACE env variable with no difference in output
YukiTruckServices (Thu, 08 Feb 2018 11:18:48 GMT):
.
YukiTruckServices (Thu, 08 Feb 2018 11:19:51 GMT):
US.101
As a noobie developer,
I want to customize the sawtooth supply chain source example files,
So that I have a web service that is similar in use case but different products and actors
A/C: http://localhost:8021 points to custom website
Scenario 1
Given a noob that has installed the sawtooth supply chain including dependencies on the Google cloud engine,
When I customize to customize the fish net or asset net website's [records, create record, record types, create record types, agents, create agents, proposals, properties, ] source files,
Then http://localhost:8021 will use my customized sawtooth supply chain files.
Please somebody point me in the right direction. I don't know what files to edit. Thanks
grkvlt (Thu, 08 Feb 2018 12:52:25 GMT):
@bogomazov I've seen that before, and I thought I had fixed it - i'll take a look and get back to you
gaurang (Thu, 08 Feb 2018 15:19:17 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=hxHDLt2bHhSza2JA9) @askmish So, in distributed n/w one has to ensure each TP running the same version!!!
mkvaghani (Thu, 08 Feb 2018 15:39:19 GMT):
Has joined the channel.
mkvaghani (Thu, 08 Feb 2018 15:39:21 GMT):
guys I am totally new to hyperledger, how it is different from ethereum ? How to what, what is hyperlrdger actually ???
alberto_souza (Thu, 08 Feb 2018 15:41:21 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=QWE8n36ZLSFwFvPEM) @zac do you any ideas about the reason of failure? When I run the validator in the same ip of processor, everything works fine.
RTLagot (Thu, 08 Feb 2018 16:52:03 GMT):
@Johnjam I asked myself exactly the same question, it would be good to know yes !
bogomazov (Thu, 08 Feb 2018 16:55:37 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jh27N52w6SzcorwJH) @mkvaghani ethereum is a public blockchain that has its own limitations in terms of scalability and economics, hyperledger is here to be a God of your own blockchain, but they are currently working with consensus that suits enterprise and may sound a bit controversial to the idea of public blockchains
bogomazov (Thu, 08 Feb 2018 16:55:37 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jh27N52w6SzcorwJH) @mkvaghani ethereum is a public blockchain that has its own limitations in terms of scalability and economics, hyperledger is here to be a God of your own blockchain, but they are currently working with consensus that suits enterprise and may sound a bit controversial to the idea of public blockchains. How I personally understand it, correct me if I am wrong.
bogomazov (Thu, 08 Feb 2018 16:55:37 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jh27N52w6SzcorwJH) @mkvaghani ethereum is a public blockchain that has its own limitations in terms of scalability and economics, hyperledger is here to be a God of your own blockchain, but they are currently working with consensus that suits enterprise (due to permisioning and faster speed given trusted nodes) and may sound a bit controversial to the idea of public blockchains. How I personally understand it, correct me if I am wrong.
bogomazov (Thu, 08 Feb 2018 16:55:37 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jh27N52w6SzcorwJH) @mkvaghani ethereum is a public blockchain that has its own limitations in terms of scalability and economics, hyperledger is here for you to be a God of your own blockchain, but they are currently working with consensus that suits enterprise (due to permisioning and faster speed given trusted nodes) and may sound a bit controversial to the idea of public blockchains. How I personally understand it, correct me if I am wrong.
alberto_souza (Thu, 08 Feb 2018 17:19:57 GMT):
(https://chat.hyperledger.org/channel/sawtooth?msg=jh27N52w6SzcorwJH) @mkvaghani I think bogozamov sumarized very well :). Hyperlegder is more suited for corporative business :). [ ]
MohammadObaid (Thu, 08 Feb 2018 17:42:59 GMT):
Does sawtooth mainly used for iot + blockchain ?
MohammadObaid (Thu, 08 Feb 2018 17:57:19 GMT):
Does anyone uses sawtooth of aws marketplace ?
YukiTruckServices (Thu, 08 Feb 2018 17:58:33 GMT):
@MohammadObaid I haven't used AWS but I have used google compute engine. Its a relatively straightforward setup
bogomazov (Thu, 08 Feb 2018 18:31:00 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=eLt2r2jvs59eDTjEb) @grkvlt Please, let me know :slight_smile:
zac (Thu, 08 Feb 2018 19:50:31 GMT):
@alberto_souza I can't really say without knowing more about how you're deploying everything. If it's a problem only when they aren't on the same network, are you sure the various network setup steps are correct? For example, most (all?) of the example TPs take a `-C` flag which let's you specify the URL of the validator (defaults to `tcp://localhost:4004`).
zac (Thu, 08 Feb 2018 19:51:09 GMT):
You can see this in use in the default docker-compose file in core:
https://github.com/hyperledger/sawtooth-core/blob/master/docker/compose/sawtooth-default.yaml#L25
zac (Thu, 08 Feb 2018 19:51:58 GMT):
You'll notice it specifies `-C tcp://validator:4004`, because that is the URL where docker-compose will make the validator container available
zac (Thu, 08 Feb 2018 19:55:35 GMT):
@YukiTruckServices You will probably to do more than just customize those JSON files to do your own version of a supply chain app. Changing those files will produce different sorts of assets on the blockchain, but the web apps are hard-coded for the sort of asset in those files, so you'll see bugs.
zac (Thu, 08 Feb 2018 19:56:31 GMT):
For example, the fish_client expects a RecordType called `"fish"`, and will only display Records that match that type.
zac (Thu, 08 Feb 2018 19:57:13 GMT):
https://github.com/hyperledger/sawtooth-supply-chain/blob/master/fish_client/src/views/list_fish.js#L36
zac (Thu, 08 Feb 2018 19:58:09 GMT):
That's one line of code that would have to change, but there would be more
zac (Thu, 08 Feb 2018 19:59:47 GMT):
What is it you want to do exactly? Maybe I can point you towards a good approach.
zac (Thu, 08 Feb 2018 20:04:13 GMT):
@mkvaghani @bogomazov Yeah, that's a pretty good explanation. There are a lot of technical differences if you want to get into the weeds, but on a broad level: Ethereum is one big public network that is already deployed out there. Hyperledger Sawtooth can be deployed in anyway you like. You could in theory build a big public network with it, but in all likelihood you are going to deploy a "permissioned blockchain". Meaning, you and some friends who you don't quite trust will all be running nodes, and Sawtooth will keep you all honest.
zac (Thu, 08 Feb 2018 20:06:18 GMT):
@MohammadObaid There has been some IoT stuff, but Sawtooth is general purpose and not focused on IoT. There is definitely some AWS usage. I'm not one of the people who have done it though.
Dan (Thu, 08 Feb 2018 21:29:44 GMT):
FYI Sawtooth 1.0 Webinar next week: https://www.hyperledger.org/resources/webinars
I will answer every question you've ever had about sawtooth
unless I don't. :D
rjones (Thu, 08 Feb 2018 21:33:50 GMT):
will you code and promote my totally-not-a-scam ICO for sawtooth? I'll call it "sawbucks" and give you like... 2 of them. thanks.
Dan (Thu, 08 Feb 2018 21:35:15 GMT):
You are too late Ry: https://demo.bitwise.io/sawbucks/#!/
rjones (Thu, 08 Feb 2018 21:35:33 GMT):
dangit
vjindk (Thu, 08 Feb 2018 23:25:46 GMT):
Has joined the channel.
YukiTruckServices (Thu, 08 Feb 2018 23:36:10 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=p7Lsa9iwSpyirDrPX)
Thanks for your reply Alberto. I am creating a trucking routing platform using Hyperledger sawtooth. The actors are shippers, drivers, etc. The asset is goods. I prefer to update the assets over time instead of all up front. This means that the addition / subtraction of assets have to be repeatable and systematic on developer side.
YukiTruckServices (Thu, 08 Feb 2018 23:47:50 GMT):
So far, from what I can tell it appears that the relevant files to manipulate are inside sawtooth-supply-chain/protos/[agent.proto, payload.proto, property.proto, etc] then rebuild.
Of course I realize that I have to capture the customized data that are reflected. However, my only focus right now is the functional aspect of it. Assuming that the general architecture of the supply chain is the same, is my only concern to customize simply updating the protos files?
FrankCastellucci (Fri, 09 Feb 2018 00:09:00 GMT):
More questions from the green: If I want my TP to support proposals and voting do I need to register an `address` with the setting component?
zac (Fri, 09 Feb 2018 00:25:15 GMT):
@YukiTruckServices Sounds like a cool project. I think using Supply Chain will probably be a pretty good fit. You'll want to familiarize yourself with Sawtooth and the Supply Chain transaction family to start with. Sawtooth has a pretty good application developers guide:
https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html
zac (Fri, 09 Feb 2018 00:26:51 GMT):
Unfortunately the Supply Chain documentation is a little more sparse. You can skim the specifications for the transaction family, though to be honest it is more technical than you really need to understand for your purposes:
https://sawtooth.hyperledger.org/docs/supply-chain/nightly/master/family_specification.html
zac (Fri, 09 Feb 2018 00:28:17 GMT):
The Readme also talks a little about the components involved, but it doesn't really talk much about how to develop new applications on top of it.
zac (Fri, 09 Feb 2018 00:30:20 GMT):
So let me try to give you a quick knowledge dump, so you have a general idea of what your approach might be, and what the pieces involved are.
YukiTruckServices (Fri, 09 Feb 2018 00:30:47 GMT):
@zac Awesome, I was just typing a reply
zac (Fri, 09 Feb 2018 00:31:02 GMT):
I'm going to type something up
zac (Fri, 09 Feb 2018 00:31:08 GMT):
might take me a bit . . .
YukiTruckServices (Fri, 09 Feb 2018 00:31:42 GMT):
If you can type, I can stay still
zac (Fri, 09 Feb 2018 01:24:34 GMT):
@YukiTruckServices:
zac (Fri, 09 Feb 2018 01:24:36 GMT):
The Supply Chain transaction family is designed to track the provenance of assets. This information is stored in a _Record_, and includes both ownership and custodianship, as well as any number of configurable _Properties_, like temperature, or location. You control what properties are allowed by setting up _RecordTypes_. You can have as many of these types as you need (both of the example clients use just one). When you create Records, or update their Properties, the transaction processor will check that it is valid based on the type you designate.
In addition to all that, there are Agents, which is really just a name associated with a public key. You can add these objects to the blockchain state just like you would in any Sawtooth application: by submitting transactions. The valid payloads are all described in the `protos/payload.proto` file, and you can also get an idea for the structure of the the data objects I described by looking at the other `.proto` files in that directory. However, I probably wouldn't modify these files, at least to start. They are part of the core functionality and the family is highly customizable without modifying any of the core functionality.
------
A running Supply Chain application has a number of components. The docker compose files in the repo handle downloading/building these components for you. They are:
- *Validator:* does the technical work of building and validating the blockchain
- *Settings TP:* used by the validator to manage on-chain settings
- *Supply Chain TP:* validates your transaction payloads, the source code is in `processor/`
- *RethinkDB:* - used to store a local copy of blockchain state
- *LedgerSync:* - gets state changes from the validator and sends them to the db, source in `ledger_sync/`
- *Server:* - provides a REST API for clients to query state and submit transactions through, source in `server/`
There are also a couple of components that will help with development, but you wouldn't deploy as a part of the app:
- *Shell:* a complete dev environment with all dependencies installed
- *Sawtooth REST API:* this lets you send HTTP requests to get information about blocks, transactions, or raw state data
You can probably build at least a proof-of-concept version of your app without modifying any of the above components. They are designed to be general purpose. It's possible some of the details of your application aren't properly covered by the existing design, but I wouldn't _start_ with that level of customization. You can track completely unique assets with very specific associated data, without cracking open anything above.
------
So, where you _do_ want to start then, is to write your own client. This would be some sort of UI (could be a web app, could be a CLI, or something else). It would allow users to manage their User/Agent, and build and sign transactions specific to your needs. It would submit these transactions to the Server, and display blockchain state data it fetches from the Server in some useful way. Some capabilities you're going to want to build out:
_Creating one or more RecordTypes:_
The two example clients both use a single RecordType, which is submitted during initialization. This RecordType is outlined in a custom JSON file in `
zac (Fri, 09 Feb 2018 01:27:59 GMT):
^ slap dash version of a Supply Chain app developer's guide
YukiTruckServices (Fri, 09 Feb 2018 01:40:56 GMT):
@zac Solid! Three days of digging around condensed into two pages. The digging around was part of the necessary tuition to understand the Sawtooth sawchain. However, your guide has filled in several gaps for me. For example: I didn't realize how the example supply chain network fit in with the underlying sawtooth platform.
Thanks for this wonderful guide
zac (Fri, 09 Feb 2018 01:43:34 GMT):
no problem, sorry there isn't something more official out there
zac (Fri, 09 Feb 2018 01:43:49 GMT):
have fun digging around
YukiTruckServices (Fri, 09 Feb 2018 01:44:42 GMT):
As a follow up question, if the RecordType are to core_types.json, then the transactionFamily are to x files?
zac (Fri, 09 Feb 2018 01:45:26 GMT):
transaction family is a broad concept
zac (Fri, 09 Feb 2018 01:45:43 GMT):
it refers to all of the application specific logic
zac (Fri, 09 Feb 2018 01:45:59 GMT):
(application in this case referring to Supply Chain braodly)
zac (Fri, 09 Feb 2018 01:45:59 GMT):
(application in this case referring to Supply Chain broadly)
zac (Fri, 09 Feb 2018 01:46:24 GMT):
So the whole repo are the x files.
YukiTruckServices (Fri, 09 Feb 2018 01:48:34 GMT):
I see. As you suggested, I will start with the template.
YukiTruckServices (Fri, 09 Feb 2018 01:48:45 GMT):
Thanks
CocoLife (Fri, 09 Feb 2018 03:38:38 GMT):
What does SDK mean :-)
zac (Fri, 09 Feb 2018 03:48:48 GMT):
Software Development Kit
CocoLife (Fri, 09 Feb 2018 03:49:04 GMT):
Thank you
zac (Fri, 09 Feb 2018 03:49:08 GMT):
It's code to make it easier to interface with Sawtooth components
zac (Fri, 09 Feb 2018 03:49:18 GMT):
Functions and utilities and the like
CocoLife (Fri, 09 Feb 2018 03:49:41 GMT):
hmm..
CocoLife (Fri, 09 Feb 2018 03:49:55 GMT):
Thanks , I will ask more questions here as I learn more
callmeashok (Fri, 09 Feb 2018 05:34:32 GMT):
I'm having some trouble running sawtooth lake project from https://sawtooth.hyperledger.org/docs/core/releases/0.7/tutorial.html#
callmeashok (Fri, 09 Feb 2018 05:36:35 GMT):
Pictures12.jpg
callmeashok (Fri, 09 Feb 2018 05:37:13 GMT):
can anyone please help me to resolve this issue??
prem-baranwal (Fri, 09 Feb 2018 06:29:57 GMT):
Has joined the channel.
askmish (Fri, 09 Feb 2018 06:33:15 GMT):
@callmeashok 0.7 is pretty old version of sawtooth. Do you want to use that for some reason?
askmish (Fri, 09 Feb 2018 06:34:24 GMT):
@gaurang If you don't have right TPs, your transactions won't be processed.
prem-baranwal (Fri, 09 Feb 2018 06:37:11 GMT):
I wanted to know how do we register a custom transaction family that i have created. I found something in docs version 0.7 (releases/0.7/tutorial.html) where it uses a txnvalidator.js to specify TransactionFamilities setting. But i can not locate the same in latest installed version or the repo.
prem-baranwal (Fri, 09 Feb 2018 06:38:59 GMT):
is it the validator.toml file in /etc/sawtooth directory where we need to provide this setting?
callmeashok (Fri, 09 Feb 2018 06:51:09 GMT):
@askmish yeah I know its an older version. I was following through the tutorial step by step. I also tried to download the latest sawtooth lake 1.1.1 . but i couldn't find some respective folders to execute it.
Koptop (Fri, 09 Feb 2018 07:18:57 GMT):
Has joined the channel.
gaurang (Fri, 09 Feb 2018 07:43:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=J2CyAZGuCmSshjKNG) @askmish Also I noted, when ever I deploy newer version of my TP (however in developer mode I don't increment family version #). I need to restart my restapi and validator.
gaurang (Fri, 09 Feb 2018 07:43:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=J2CyAZGuCmSshjKNG) @askmish Also I noted, when ever I deploy newer version of my TP (however in developer mode I don't increment family version # ). I need to restart my restapi and validator.
askmish (Fri, 09 Feb 2018 10:11:50 GMT):
@callmeashok There's a lot of difference between 1.0.1 and 0.7
askmish (Fri, 09 Feb 2018 10:12:41 GMT):
"i couldn't find some respective folders to execute it" - what directories were you looking for?
askmish (Fri, 09 Feb 2018 10:14:28 GMT):
@gaurang How are you deploying the TPs?
askmish (Fri, 09 Feb 2018 10:14:45 GMT):
dockers or services?
askmish (Fri, 09 Feb 2018 10:14:56 GMT):
or something else
askmish (Fri, 09 Feb 2018 10:16:12 GMT):
@prem-baranwal Transaction family must be registered with a TP to validator
gaurang (Fri, 09 Feb 2018 10:16:35 GMT):
Dockers with mounted volumes, So I can restart them without worrying about data loss.
askmish (Fri, 09 Feb 2018 10:16:38 GMT):
There's a lot of difference between 0.7 and 1.0 architecture and
gaurang (Fri, 09 Feb 2018 10:16:55 GMT):
TP also in docker
askmish (Fri, 09 Feb 2018 10:19:13 GMT):
@gaurang Well, you shouldn't need to restart validator/rest-api, if you're properly unregistering the old TP and then re-registering the new TP.
gaurang (Fri, 09 Feb 2018 10:20:04 GMT):
When I kill the docker, I hope my old TP is unregistered. As it's all about stopping the process.
gaurang (Fri, 09 Feb 2018 10:20:51 GMT):
and as soon as I spin up docker TP with new code, it shows me registered on my validator logs.
askmish (Fri, 09 Feb 2018 10:21:12 GMT):
what issues do you see
gaurang (Fri, 09 Feb 2018 10:22:01 GMT):
When I try to commit new batch, it times out.
gaurang (Fri, 09 Feb 2018 10:22:14 GMT):
Waiting for about 3 to 4 minutes, but not working.
gaurang (Fri, 09 Feb 2018 10:22:30 GMT):
as soon as I restart the Validator and Rest, it works like charm.
askmish (Fri, 09 Feb 2018 10:23:54 GMT):
Probably your existing TP isn't un-registered properly. You should see a log saying your TP has unregistered in validator logs.
gaurang (Fri, 09 Feb 2018 10:24:31 GMT):
Okay, will check in log.
askmish (Fri, 09 Feb 2018 10:25:06 GMT):
When you're registering the new TP, you'll also see register attempt in bot validator and TP logs
gaurang (Fri, 09 Feb 2018 10:25:13 GMT):
So, how to make sure the TP is unregistered peacefully?
askmish (Fri, 09 Feb 2018 10:27:25 GMT):
which language you have the TP written in
dharuq (Fri, 09 Feb 2018 10:31:48 GMT):
Has left the channel.
gaurang (Fri, 09 Feb 2018 10:35:10 GMT):
Javascript
gaurang (Fri, 09 Feb 2018 10:35:10 GMT):
Sorry for late reply, We coded it in Javascript
geraldoyudo (Fri, 09 Feb 2018 11:05:42 GMT):
Has joined the channel.
geraldoyudo (Fri, 09 Feb 2018 11:09:46 GMT):
Hello all, I'm trying to build the docker images in sawtooth-core but I'm having issues. Is there a guide to building the images on windows 10?
AshwinKumar844129 (Fri, 09 Feb 2018 13:28:09 GMT):
I have ubuntu 17.10 when I run "sudo apt-get install -y sawtooth" nothing installed ,
AshwinKumar844129 (Fri, 09 Feb 2018 13:30:40 GMT):
Screenshot from 2018-02-09 18-57-54.png
grkvlt (Fri, 09 Feb 2018 13:35:10 GMT):
It looks like the `sawtooth-block-info-tp` image is not being pushed to the Docker Hub https://hub.docker.com/r/hyperledger/sawtooth-block-info-tp/ but I don't see where in the Jenkinsfile or elsewhere this is supposed to happen?
akuma921 (Fri, 09 Feb 2018 14:00:14 GMT):
Has left the channel.
cmoro-gondor (Fri, 09 Feb 2018 14:19:05 GMT):
Has joined the channel.
Dan (Fri, 09 Feb 2018 14:46:07 GMT):
@rberg2 ^
rberg2 (Fri, 09 Feb 2018 15:24:29 GMT):
@AshwinKumar844129 it appears there are unresolvable dependencies on 17.10. we currently publish builds for Ubuntu 16.04
LTS and plan to support 18.04 LTS additionally. Docker may be a good solution there.
rberg2 (Fri, 09 Feb 2018 15:26:39 GMT):
_looks into the sawtooth-block-info-tp docker image_
bcdotworld (Fri, 09 Feb 2018 15:33:11 GMT):
Has joined the channel.
bcdotworld (Fri, 09 Feb 2018 15:39:12 GMT):
hello guys, so, I have a problem setting up the chain, I actually have a Sawtooth Supply Chain on AWS with inbound tcp ports 4004 and 8008 open, then I set the tcp://public_ip:4004 as a peer for the sawtooth-core docker compose and I start up the validator, but it returns "Endpoint has not completed authorization in xx seconds". any ideas?
MohammadObaid (Fri, 09 Feb 2018 17:31:01 GMT):
Can anyone refer me to a good tutorial which explains high-level workflow of sawtooth. I got this from official https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture.html but it is hard to understand
muzakphile (Fri, 09 Feb 2018 18:56:13 GMT):
Has joined the channel.
alberto_souza (Fri, 09 Feb 2018 19:19:01 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=7gHFJ2FFwoAymQRBF) @zac the sawtooth components are correctly bound :). I passed the -C flag for all... The problem is in the javascript sdk client.. I pass the remote tcp address as argument and I got the error message.
jagsidhu (Fri, 09 Feb 2018 19:19:11 GMT):
Has joined the channel.
jagsidhu (Fri, 09 Feb 2018 19:19:29 GMT):
hello i have questions about using SGX for proof of computing host configuration
jagsidhu (Fri, 09 Feb 2018 19:19:37 GMT):
in a distributed application
zac (Fri, 09 Feb 2018 19:24:08 GMT):
I thought you said TP failed to register, and transactions were permanently pending. What makes you think it's the JS SDK in your client?
alberto_souza (Fri, 09 Feb 2018 19:26:50 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=YJvGNeReboTsMNcX4) @zac because the log message is in my client, just a guess and the log message from the validator instance is ok. Apparently the TP was registered, at least the log message shows that => registered transaction processor: connection_id=7de85679ecce37454e957e21153791e56c7ee01b759a662622ce661433ca0698e27763c1b5f9ab2071360627d121709672e6c3f1c00e751695e06fa5abe0726f, family=onlinevoting, version=0.0.1, namespaces=['e659db']
alberto_souza (Fri, 09 Feb 2018 19:27:31 GMT):
I can query the blockchain through the rest-api as well.
alberto_souza (Fri, 09 Feb 2018 19:28:03 GMT):
But, of course, maybe is a network configuration with my instance in digitalocean...
zac (Fri, 09 Feb 2018 19:29:04 GMT):
when you say "pending" do you mean that you queried that batch status and the validator said it was pending?
zac (Fri, 09 Feb 2018 19:29:20 GMT):
or did you mean it more generally?
alberto_souza (Fri, 09 Feb 2018 19:30:55 GMT):
Yes, even with the log showing that my tp was not registered, I tried to send a transaction. I noticed that specific transaction is always in the pending status.
zac (Fri, 09 Feb 2018 19:32:02 GMT):
Well if you send a request to `/batch_statuses`, and it tells you that the transaction is Pending, that means the validator got it
zac (Fri, 09 Feb 2018 19:32:02 GMT):
Well if you send a request to `/batch_statuses`, and it tells you that the batch is Pending, that means the validator got it
zac (Fri, 09 Feb 2018 19:32:22 GMT):
So I don't think it's a networking issue
zac (Fri, 09 Feb 2018 19:32:53 GMT):
it made it to the validator, but the validator isn't processing it for some reason
zac (Fri, 09 Feb 2018 19:33:18 GMT):
the most common cause I've seen for this is when the validator doesn't have the TP it needs
zac (Fri, 09 Feb 2018 19:33:42 GMT):
are you sure the family name and family version in the transaction header match the TP?
zac (Fri, 09 Feb 2018 19:33:50 GMT):
a typo there would cause that
alberto_souza (Fri, 09 Feb 2018 19:35:55 GMT):
I think it is correct because when I run both client and server in the same network, everything goes fine.
alberto_souza (Fri, 09 Feb 2018 19:41:44 GMT):
another important information... When I run the client from the same network, but in the Digital ocean environment, the client says that registration failed as well... thinking about that, it is a server configuration problem, but I still don't know the cause :(
boydjohnson (Fri, 09 Feb 2018 20:38:45 GMT):
@bcdotworld The 8008 port is usually the REST Api, tcp 8800 is the validator peer port, tcp 4004 is the validator component port (transaction processors, rest apis, ect).
alberto_souza (Fri, 09 Feb 2018 21:08:30 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=js6C9uWy4RzPXhDWi) @zac I started the server using the docker-compose file available in the documentation and the error remains... I will dig a little bit more..
ChrisZhang (Fri, 09 Feb 2018 23:42:07 GMT):
Has joined the channel.
jagsidhu (Sat, 10 Feb 2018 01:32:40 GMT):
is there a way to grab a host's computer configuration ie: number of cores, ram, io and sign it with a key such that the host cannot lie about that configuration through SGX? Assume that the key is distributed through DPKI and there is consensus on that key that means every knows that key belongs to that host ip address.
jagsidhu (Sat, 10 Feb 2018 01:32:52 GMT):
basically a proof-of-computing-power
mdoan (Sat, 10 Feb 2018 01:43:34 GMT):
Has joined the channel.
AshwinKumar844129 (Sat, 10 Feb 2018 10:17:41 GMT):
Is there any guide to run SEAFOOD SUPPLY CHAIN sample without DOCKER on ubuntu 16.04, if not, will you please brief here ?
bcdotworld (Sat, 10 Feb 2018 10:26:46 GMT):
Thank you! I did open the port 8800 on the ec2 machine and set it as peer in the docker validator, but still no luck[ ](https://chat.hyperledger.org/channel/sawtooth?msg=64BG2T5aNJosXhGAH) @boydjohnson
alberto_souza (Sat, 10 Feb 2018 15:00:39 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=ABPRGZkfum362ufdP) @jagsidhu if you follow the instructions provided by the documentation you will be able to run the example.
bogomazov (Sat, 10 Feb 2018 15:36:13 GMT):
How do I generate genesis BatchList with initial values for some keys with protos data structure
bogomazov (Sat, 10 Feb 2018 15:36:13 GMT):
How do I generate genesis BatchList with initial values for some keys with protos data structure?
prem-baranwal (Sat, 10 Feb 2018 15:41:59 GMT):
@askmish thanks for your reply. Could you point me to an example of how to register a new (custom) transaction family with the validator?its not clear in the latest git repo.
arthurgreef (Sat, 10 Feb 2018 17:57:38 GMT):
I do not supposed anyone has figured out how to get 'pip install secp256k1' to work on Windows? I tried all kinds of mingw and cgywin options but still could not get the c library to build. Thanks.
RiceNPea (Sat, 10 Feb 2018 23:27:57 GMT):
Has joined the channel.
CocoLife (Sat, 10 Feb 2018 23:29:35 GMT):
Is anyone able to direct me to a sample model on Github for a traceability sawtooth project :-)
CocoLife (Sat, 10 Feb 2018 23:29:36 GMT):
Tanks
pravindia (Sun, 11 Feb 2018 04:46:01 GMT):
Has joined the channel.
NicolasNLT (Sun, 11 Feb 2018 15:51:56 GMT):
Has joined the channel.
Dan (Sun, 11 Feb 2018 17:29:52 GMT):
https://github.com/hyperledger/sawtooth-supply-chain
Dan (Sun, 11 Feb 2018 17:32:04 GMT):
@MohammadObaid you might get a better workflow understanding from the App Developers Guide https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html
I'll also be explaining the overall concepts in the Sawtooth 1.0 webinar this Thursday: https://www.hyperledger.org/resources/webinars
amundson (Sun, 11 Feb 2018 18:07:28 GMT):
the supply chain txn spec is also at https://sawtooth.hyperledger.org/docs/supply-chain/nightly/master/family_specification.html
dave (Sun, 11 Feb 2018 19:51:36 GMT):
Has joined the channel.
dave (Sun, 11 Feb 2018 19:56:55 GMT):
Hi, I need same help to setup sawtooth on docker (vbox on win) and Java SDK. When i try to run IntegerKey test, i see on the validator "registered transaction processor: .... family=intkey ..." but the event TP_PROCESS_REQUEST from the validtor is not sent. Can anyone give a little help? :)
amundson (Sun, 11 Feb 2018 19:57:44 GMT):
have you submitted an intkey transaction?
dave (Sun, 11 Feb 2018 19:58:26 GMT):
yes, the family name is intkey
dave (Sun, 11 Feb 2018 19:59:12 GMT):
and i have already setup the setting using sawset proposal create (the command on the doc)
amundson (Sun, 11 Feb 2018 20:00:02 GMT):
TP_PROCESS_REQUEST is sent when a transaction is being processed (sent from the validator to the transaction processor). you would need to generate an intkey transaction and submit it (for example, via the 'intkey' CLI command).
NileshS (Mon, 12 Feb 2018 03:58:58 GMT):
Has joined the channel.
NileshS (Mon, 12 Feb 2018 03:59:37 GMT):
Hello, I am looking for example on creating and deploying smart contract on to Hyperledger Sawtooth
sudomark (Mon, 12 Feb 2018 07:05:15 GMT):
Has joined the channel.
blockchainblore (Mon, 12 Feb 2018 07:41:06 GMT):
Has joined the channel.
blockchainblore (Mon, 12 Feb 2018 07:41:29 GMT):
hi - trying to follow the guide to check out seth (https://sawtooth.hyperledger.org/docs/seth/nightly/master/seth_developers_guide/getting_started.html) - the docker image present in the documentation - sawtooth-seth.yaml does not seem to be available..any idea from which location I can download it ??
NileshS (Mon, 12 Feb 2018 08:32:37 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=YmkM7673gP4wqcZ4j) @blockchainblore the correct Compose file is `docker-compose.yaml` in the root of the Seth project.
NileshS (Mon, 12 Feb 2018 08:33:22 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=fGJQARSugb59nQ9K4) from sawtooth-seth
NileshS (Mon, 12 Feb 2018 08:34:04 GMT):
Thanks to @grkvlt who helped me to find this file
NileshS (Mon, 12 Feb 2018 09:19:40 GMT):
Hello team where to find image
NileshS (Mon, 12 Feb 2018 09:19:41 GMT):
Pulling block-info-tp (hyperledger/sawtooth-block-info-tp:latest)...
ERROR: manifest for hyperledger/sawtooth-block-info-tp:latest not found
NileshS (Mon, 12 Feb 2018 09:19:47 GMT):
?
NileshS (Mon, 12 Feb 2018 09:32:09 GMT):
Hello, any tutorial on deployng chaincode on to sawtooth ?
jceb (Mon, 12 Feb 2018 09:53:51 GMT):
Has joined the channel.
mraikwar (Mon, 12 Feb 2018 10:38:24 GMT):
Has joined the channel.
devTran (Mon, 12 Feb 2018 10:53:20 GMT):
Has joined the channel.
mclk (Mon, 12 Feb 2018 12:21:23 GMT):
Has joined the channel.
mclk (Mon, 12 Feb 2018 12:21:29 GMT):
hi ... i m looking for an image for docker of Sawtooth Supply Chain ... thank for your answer ??
grkvlt (Mon, 12 Feb 2018 13:07:33 GMT):
@NileshS 1 you'll need to build the `sawtooth-core` Docker images yourself to get `sawtooth-block-info-tp` and then change the `docker-compose.yaml` file to just refer to `sawtooth-block-info-tp:latest` without `hyperledger` currently, as this image has not been pushed to Docker Hub yet...
grkvlt (Mon, 12 Feb 2018 13:09:48 GMT):
also, chaincode is a Fabric specific thing, you can deploy Solidity smart contracts with the `seth-tp` transaction processor, or add your own transaction processor for custom blockchain business logic...
grkvlt (Mon, 12 Feb 2018 13:11:01 GMT):
The Seth documentation is at https://sawtooth.hyperledger.org/docs/seth/nightly/master/seth_developers_guide/getting_started.html
grkvlt (Mon, 12 Feb 2018 13:11:37 GMT):
@'NileshS 1'
NileshS (Mon, 12 Feb 2018 13:11:43 GMT):
Thanks @grkvlt for help..so quick question how do we deploy smart contracts on to sawtooth other than solidity?
grkvlt (Mon, 12 Feb 2018 13:13:14 GMT):
no, only Solidity is available with Seth. for Sawtooth you can design a transaction processor to handle your specific transaction family if you want to build a different solution
NileshS (Mon, 12 Feb 2018 13:14:10 GMT):
oh ok..any detail documentation I can refer?
NileshS (Mon, 12 Feb 2018 13:14:24 GMT):
I have been refering https://github.com/delventhalz/transfer-chain-js/tree/master but unable to make the setup work
NileshS (Mon, 12 Feb 2018 13:23:14 GMT):
Thanks again @grkvlt
grkvlt (Mon, 12 Feb 2018 13:26:48 GMT):
Yeah, `transfer-chain` is a transaction processor for Sawtooth, you would install it on the validator nodes in the Sawtooth network
NileshS (Mon, 12 Feb 2018 13:27:35 GMT):
I tried but its not working while creating asset
NileshS (Mon, 12 Feb 2018 13:27:57 GMT):
made some changes to yaml and make it work...but create asset not working (giving 405)
grkvlt (Mon, 12 Feb 2018 13:28:28 GMT):
however it's ~6 months old, so will be using an old version of the Sawtooth APIs (i.e. not 1.0 compatible) so you cannot use it in its current state. Suggest you contact the author to find out if they are working on an update?
NileshS (Mon, 12 Feb 2018 13:29:26 GMT):
oh ok..let me see..Thanks
grkvlt (Mon, 12 Feb 2018 13:31:53 GMT):
@zac ^^
zac (Mon, 12 Feb 2018 13:35:20 GMT):
Did not expect, that thing to take on such a life after the presentation I wrote it for
zac (Mon, 12 Feb 2018 13:35:35 GMT):
Did not expect that thing to take on such a life after the presentation I wrote it for
zac (Mon, 12 Feb 2018 13:36:00 GMT):
It is probably broken as written, and needs to be pegged to `0.8`
marek5050 (Mon, 12 Feb 2018 13:42:01 GMT):
Has joined the channel.
zac (Mon, 12 Feb 2018 13:58:09 GMT):
Okay, updated the docker-compose file:
zac (Mon, 12 Feb 2018 13:58:09 GMT):
https://github.com/delventhalz/transfer-chain-js
zac (Mon, 12 Feb 2018 14:07:43 GMT):
@NileshS 1 ^^
zac (Mon, 12 Feb 2018 14:08:26 GMT):
Also, Rocket Chat lets you include spaces in your username, but if you do, it is impossible to ping you as near as I can tell
zac (Mon, 12 Feb 2018 14:08:33 GMT):
So probably best not to
grkvlt (Mon, 12 Feb 2018 15:49:12 GMT):
+1 rocket chat can be a wee bit ... idiosyncratic at times
Dan (Mon, 12 Feb 2018 15:52:52 GMT):
It's "special"
amundson (Mon, 12 Feb 2018 15:53:04 GMT):
quite special
amundson (Mon, 12 Feb 2018 15:53:59 GMT):
when we used to use IRC, I remember having a hundred bad clients to choose from instead of one
Dan (Mon, 12 Feb 2018 16:06:08 GMT):
lol
thegreatsunra (Mon, 12 Feb 2018 17:01:27 GMT):
We're running a Sawtooth validator and a Node-based transaction processor, and have an issue where the validator often reports `Block publishing is suspended until new chain head arrives.` after handling only a few transactions.
We've managed to reproduce the message using the intkey transaction processor. When we run `intkey create_batch` and then `intkey load`, intkey creates and submits two batches to the validator.
50% of the time it successfully processes each batch and adds two blocks to the chain. However, 50% of the time it only processes one of the two batches, adds a single block, and throws the `Block publishing is suspended until new chain head arrives.` message.
What's going on here? If this is expected behavior, what is the proper way to recover from it?
Dan (Mon, 12 Feb 2018 18:37:53 GMT):
Hi the `suspended` message should just be an `INFO` level message. It's expected and it's just indicating that the chain head is going to be updated with a new block. The validator doesn't want to build a new block because it knows it's in the process of updating the chain. I think you should one of those for every block.
The issue with your second batch is not clear. Do you get an error that the transaction failed? Or is it possibly getting committed and the `suspended` message was just throwing you off?
postables (Mon, 12 Feb 2018 18:57:01 GMT):
Has joined the channel.
postables (Mon, 12 Feb 2018 19:09:19 GMT):
what would be the different use cases in which sawtooth would be a better choice over fabric and vice-versa?
amundson (Mon, 12 Feb 2018 19:23:59 GMT):
fabric has better support for bluemix
amundson (Mon, 12 Feb 2018 19:24:44 GMT):
seriously though, there is probably not an easy objective answer. they have very different architectures.
amundson (Mon, 12 Feb 2018 19:28:40 GMT):
(sorry if I offended anyone working on getting Sawtooth working on bluemix)
kakuzu (Mon, 12 Feb 2018 19:29:55 GMT):
yeah in terms of support and how tech will grow depends on support. I have to tendermint channel , burrow no one bothers to answer and git install instructions doesn't work.
foleymic (Mon, 12 Feb 2018 19:37:13 GMT):
Has joined the channel.
benoit.razet (Mon, 12 Feb 2018 20:11:51 GMT):
Hi, I am hitting the following validator error while running the parallel scheduler:
benoit.razet (Mon, 12 Feb 2018 20:11:51 GMT):
Hi, I am hitting the following validator error when using the parallel scheduler:
benoit.razet (Mon, 12 Feb 2018 20:12:01 GMT):
```
validator_1 | [2018-02-12 19:00:03.056 ERROR future] An unhandled error occurred while running future callback
validator_1 | Traceback (most recent call last):
validator_1 | File "/usr/local/lib/python3.6/dist-packages/sawtooth_validator-1.0.1.dev1-py3.6.egg/sawtooth_validator/networking/future.py", line 79, in run_callback
validator_1 | self._callback_func(self._request, self._result)
validator_1 | File "/usr/local/lib/python3.6/dist-packages/sawtooth_validator-1.0.1.dev1-py3.6.egg/sawtooth_validator/execution/executor.py", line 152, in _future_done_callback
validator_1 | error_data=response.extended_data)
validator_1 | File "/usr/local/lib/python3.6/dist-packages/sawtooth_validator-1.0.1.dev1-py3.6.egg/sawtooth_validator/execution/scheduler_parallel.py", line 655, in set_transaction_execution_result
validator_1 | txn_signature)
validator_1 | File "/usr/local/lib/python3.6/dist-packages/sawtooth_validator-1.0.1.dev1-py3.6.egg/sawtooth_validator/execution/scheduler_parallel.py", line 580, in _remove_subsequent_result_because_of_batch_failure
validator_1 | if self._is_txn_to_replay(txn_id, poss_successor, seen):
validator_1 | File "/usr/local/lib/python3.6/dist-packages/sawtooth_validator-1.0.1.dev1-py3.6.egg/sawtooth_validator/execution/scheduler_parallel.py", line 559, in _is_txn_to_replay
validator_1 | possible_successor)
validator_1 | File "/usr/local/lib/python3.6/dist-packages/sawtooth_validator-1.0.1.dev1-py3.6.egg/sawtooth_validator/execution/scheduler_parallel.py", line 540, in _is_in_same_batch
validator_1 | self._batches_by_txn_id[txn_id_2]
validator_1 | KeyError: 'f5ee76346bf223c8f31869f9f904b5423c1e3ac547f49eeda6cb5b5b18189dc902cb5712559c8c3ea230adecaffd76f3a15c6ba75138387812c4b680384490a1'
```
benoit.razet (Mon, 12 Feb 2018 20:12:59 GMT):
Has anyone run into something similar?
thegreatsunra (Mon, 12 Feb 2018 20:21:28 GMT):
@Dan Thanks for the clarity. In attempting to eliminate variables within our server environment, I'm currently testing the behavior of intkey within the provided Sawtooth Docker images.
It appears that `intkey load` always sends two batches, and while _most_ of the time those batches are processed as two unique blocks each with one batch, _occasionally_ they get processed as a _single_ block containing _two_ batches.
So, it seems `intkey load` is indeed working as expected. I need to do more snooping inside our custom transaction processor to get to the bottom of what's happening in there.
blockchainblore (Tue, 13 Feb 2018 05:33:22 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=NjsxAqAh2nJ23o2cT) @NileshS 1 @NileshS 1 I did the following steps - 1. git clone https://github.com/hyperledger/sawtooth-seth.git and then tried to run the docker image using the following command - $ docker-compose -f docker-compose.yaml` up...and I get the following error - "repository does not exist"
NileshS (Tue, 13 Feb 2018 05:49:46 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=7LgFDfvLqAizkoLLG) @zac Any plans to update https://github.com/delventhalz/transfer-chain-js (which can run with latest version of Sawtooth)?
NileshS (Tue, 13 Feb 2018 05:51:55 GMT):
as currently, create asset and transfer asset does not work
NileshS (Tue, 13 Feb 2018 05:53:23 GMT):
I made changes to yaml as per new version but unable to make this two api work so thought to check
NileshS (Tue, 13 Feb 2018 05:53:32 GMT):
Appreciate help :)
NileshS (Tue, 13 Feb 2018 05:54:32 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=WvbTFjxhWGK8PLnYP) @blockchainblore Please refer previous comment from @grkvlt ...Thanks
WhiskyLin (Tue, 13 Feb 2018 06:08:25 GMT):
Has joined the channel.
rajivgandhi2010 (Tue, 13 Feb 2018 06:15:49 GMT):
Has left the channel.
devTran (Tue, 13 Feb 2018 07:32:05 GMT):
hi, anyone help me how to deploy nodes connect together into a supply chain network, includes: permission, transfer data, ... ? I readed the lastest sawtooth document which also contains the basic infos above .But it's great if anyone give me a instruction link with step by step :)
zac (Tue, 13 Feb 2018 08:41:55 GMT):
@NileshS You may have to remove your existing docker containers/images or something. I ran `transfer-chain-js` with the new `docker-compose.yam`, with hyperledger components pegged to `:0.8` instead of `:latest`. It worked fine for me. Make sure you have the newest `master`:
https://github.com/delventhalz/transfer-chain-js
zac (Tue, 13 Feb 2018 08:41:55 GMT):
@NileshS You may have to remove your existing docker containers/images or something. I ran TransferChain with the new `docker-compose.yaml`, with hyperledger components pegged to `:0.8` instead of `:latest`. It worked fine for me. Make sure you have the newest `master`:
https://github.com/delventhalz/transfer-chain-js
zac (Tue, 13 Feb 2018 08:43:58 GMT):
If you are still having trouble, maybe you could post your logs?
zac (Tue, 13 Feb 2018 08:45:51 GMT):
No plans to update it to to 1.0. I wrote it as an illustration for a talk about the JS Client SDK, which has been completely removed from 1.0.
zac (Tue, 13 Feb 2018 08:47:17 GMT):
Perhaps I could do a separate branch or something, if people just want a simple JS 1.0 example.
zac (Tue, 13 Feb 2018 08:50:11 GMT):
Probably worth checking out the 1.0 docs first though:
https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_js.html
callmeashok (Tue, 13 Feb 2018 08:51:54 GMT):
can anyone tell me how to config a validator Rest-api and what it validates in sawtooth-tuna?
NileshS (Tue, 13 Feb 2018 08:51:56 GMT):
Thanks @zac ...will try sdk_sbmit_tutorial
prem-baranwal (Tue, 13 Feb 2018 13:20:23 GMT):
@zac @askmish and others, Can someone explain how a transaction is distributed to the Transaction Processors? I figured out that a TransactionProcessor is associated with a Transaction Family during startup (corresponding handler is registered with TP). But still i can not figure out how a transaction is distributed among TPs so that it reaches atleast one correct Transaction handler.
prem-baranwal (Tue, 13 Feb 2018 13:25:58 GMT):
if a validator validates the transaction, how does he know about a particular transaction family?
askmish (Tue, 13 Feb 2018 14:02:17 GMT):
@prem-baranwal So, here's what happens... The validator has no idea where to send your transaction to, unless you specify that in your client transaction.
askmish (Tue, 13 Feb 2018 14:04:16 GMT):
A TP registers with a validator saying "I'm here and can work with
askmish (Tue, 13 Feb 2018 14:05:53 GMT):
Your client when creating a transaction adds the TF in the Transaction header, before adding it to a bigger batch.
askmish (Tue, 13 Feb 2018 14:07:19 GMT):
When it reaches the validator, the Transactions are processed and based on the TF in the Transaction header, it forwards to any handler that has registered for it
askmish (Tue, 13 Feb 2018 14:07:49 GMT):
If the validator couldn't find it, it usually drops the transaction.
prem-baranwal (Tue, 13 Feb 2018 14:10:26 GMT):
"....TP registers with a validator saying "I'm here and can work with
askmish (Tue, 13 Feb 2018 14:11:14 GMT):
yes
askmish (Tue, 13 Feb 2018 14:12:00 GMT):
when a TP starts the first thing(not literally though) it does is attempt to register with a validator
askmish (Tue, 13 Feb 2018 14:13:15 GMT):
After a TP is registered all your TF-specific transactions originating from client, will begin processing at the same TP.
prem-baranwal (Tue, 13 Feb 2018 14:15:19 GMT):
i could find that code now.
prem-baranwal (Tue, 13 Feb 2018 14:16:17 GMT):
@askmish thanks for your explanation. :v:
akula (Tue, 13 Feb 2018 15:47:30 GMT):
Has joined the channel.
jagsidhu (Tue, 13 Feb 2018 16:41:20 GMT):
can we use EVM inside of sgx? will it fit?
thegreatsunra (Tue, 13 Feb 2018 16:43:51 GMT):
Reviewing the logs from our sawtooth validator, we often see the following error when submitting a new batch to our transaction processor (hashes truncated for legibility):
```
Block 4dfd... (
block_num:11,
state:aca2...,
previous_block_id:2c1f...
)
failed validation: Block (
4dfd... (
block_num:11,
state:aca2...,
previous_block_id:2c1f...
)
)
rejected due to state root hash mismatch: aca2... != 16ac...
```
This appears to jam up the validator, and it won't even acknowledge subsequent batches (even from intkey) unless we stop and restart the sawtooth-validator process.
Any insight into what's going on here, and how we can prevent it?
pschwarz (Tue, 13 Feb 2018 16:53:35 GMT):
@thegreatsunra Are you use parallel scheduler?
thegreatsunra (Tue, 13 Feb 2018 16:59:18 GMT):
@pschwarz Taking a look now. Do you recommend parallel or serial?
thegreatsunra (Tue, 13 Feb 2018 17:05:50 GMT):
@pschwarz Running the validator with the `--scheduler parallel` option now, and it appears to be a lot more stable. Thank you!
amundson (Tue, 13 Feb 2018 17:38:12 GMT):
technically, they should give the same results
Dan (Tue, 13 Feb 2018 17:39:35 GMT):
There's a recent bug identified in the parallel scheduler. It won't present all the time. If you hadn't specified the scheduler before, it would have defaulted to parallel and you would have been exposed to the bug. If you specify serial it should not come up. (fyi, bug is resolved in master but not yet backported to 1.0.x)
Dan (Tue, 13 Feb 2018 17:40:25 GMT):
`Shameless advertising:` ```Sawtooth 1.0 Webinar. This Thursday 10am pacific``` https://www.hyperledger.org/resources/webinars
You may now return to your regularly scheduled :rocket: chatting.
pschwarz (Tue, 13 Feb 2018 17:57:49 GMT):
The reason I asked about the scheduler is that there was an issue just fixed in master (should be in the latest nightly): https://github.com/hyperledger/sawtooth-core/pull/1434
pschwarz (Tue, 13 Feb 2018 17:58:53 GMT):
The fact that it works, though, I'd suggest making sure that your state encodings are deterministic. What sort of encoding scheme are you using?
Aleshia (Tue, 13 Feb 2018 19:42:26 GMT):
For someone with both experience in Java and Pyhton, is there a more beneficial language to develop an app in, or is it just personal preference?
boydjohnson (Tue, 13 Feb 2018 19:44:31 GMT):
Hi Aleshia, I think it is mainly personal preference. I have done more work with the python sdk. I did make a Java workload library for running workloads against sawtooth: https://github.com/boydjohnson/sawtooth-workload.
zac (Tue, 13 Feb 2018 19:57:45 GMT):
@Aleshia The Python SDK is better supported, and is what the majority of the code is written in
zac (Tue, 13 Feb 2018 19:57:45 GMT):
@Aleshia The Python SDK is better supported, and is what the majority of the core code is written in
zac (Tue, 13 Feb 2018 19:58:26 GMT):
I would use Python if it's not a big difference to you in terms of personal preference.
Aleshia (Tue, 13 Feb 2018 20:00:41 GMT):
@boydjohnson Thank you, I'll check out your github in a bit! @zac That's what I figured from the table, thanks for confirming!
amundson (Tue, 13 Feb 2018 20:10:43 GMT):
@Aleshia if you are up for a new language, many of us are using Rust now and like it a lot. otherwise, Python is a good choice.
horvatic (Tue, 13 Feb 2018 20:10:47 GMT):
Has joined the channel.
kakuzu (Tue, 13 Feb 2018 20:17:13 GMT):
transaction are wrapped in a batch so do we have a specific number of transactions in a single batch.
boydjohnson (Tue, 13 Feb 2018 20:21:32 GMT):
There aren't a specified number of txns that a batch must have. Considerations are that batches are atomic and also there is a higher txn throughput with (up to a point) more txns per batch. It is up to the transaction family designer to determine an appropriate number of txns per batch.
kakuzu (Tue, 13 Feb 2018 20:22:49 GMT):
so these are batches are same as blocks in ethereum
boydjohnson (Tue, 13 Feb 2018 20:23:25 GMT):
No, blocks contain a number of batches.
boydjohnson (Tue, 13 Feb 2018 20:23:47 GMT):
The difference is the extra layer of atomicity of batches.
kakuzu (Tue, 13 Feb 2018 20:24:10 GMT):
so i do the transaction is put in batch and to block and then validator mine it , here they validate it
boydjohnson (Tue, 13 Feb 2018 20:24:29 GMT):
I think that is correct.
horvatic (Tue, 13 Feb 2018 20:24:32 GMT):
Java TicTacToe Example Error.png
kakuzu (Tue, 13 Feb 2018 20:25:24 GMT):
batch->block->validate.
boydjohnson (Tue, 13 Feb 2018 20:26:38 GMT):
@horvatic The java transaction processor should be on tcp port 4004.
horvatic (Tue, 13 Feb 2018 20:29:51 GMT):
@boydjohnson nice. Must have missed it in the doc, thanks!
zac (Tue, 13 Feb 2018 20:39:20 GMT):
@kakuzu Transactions in other blockchains (including Ethereum), are sort of a combination of batches and transactions in Sawtooth. Like in Ethereum, transactions are discrete bits of logic, but by combining them in batches you ensure either _every_ transaction is added to the chain, or _none_ of the transactions are added to the chain. This sort of atomicity on the transaction-level in Ethereum. So batches don't really have an exact analogue.
zac (Tue, 13 Feb 2018 20:39:20 GMT):
@kakuzu Transactions in other blockchains (including Ethereum), are sort of a combination of batches and transactions in Sawtooth. Like in Ethereum, transactions are discrete bits of logic, but by combining them in batches you ensure either _every_ transaction is added to the chain, or _none_ of the transactions are added to the chain. This sort of atomicity is only on the transaction-level in Ethereum. So batches don't really have an exact analogue.
zac (Tue, 13 Feb 2018 20:39:29 GMT):
Blocks are the exact same idea though.
zac (Tue, 13 Feb 2018 20:39:29 GMT):
Blocks are the same idea though.
zac (Tue, 13 Feb 2018 20:40:13 GMT):
transaction(s) -> batch(es) -> block
kakuzu (Tue, 13 Feb 2018 20:48:15 GMT):
yeah i got confused while reading. in ethereum it straightforward i do the transaction it get in block mined and committed.
kakuzu (Tue, 13 Feb 2018 20:50:56 GMT):
@zac but in sawtooth what is saw till now transaction are included in batched and send for the validator. Just wording is different , thanks for replying.
zac (Tue, 13 Feb 2018 20:51:37 GMT):
no problem
kakuzu (Tue, 13 Feb 2018 20:52:23 GMT):
do we have specific size for batch
kakuzu (Tue, 13 Feb 2018 21:05:13 GMT):
Transaction header is signed by the signer’s private key (not sent with the transaction) and the resulting signature is stored in header_signature. this is fine if i do transaction i sign it . The batcher_public_key field must match the public key used to sign the batch in which this transaction is contained. who will sign it. Does it mean single transaction in a batch
boydjohnson (Tue, 13 Feb 2018 21:10:53 GMT):
No it just means that the transaction signer must know about the batch signer. It makes it so that you can't add someone else's transaction to your batch, which could be used for nefarious purposes.
kakuzu (Tue, 13 Feb 2018 21:11:13 GMT):
who is making the batch
kakuzu (Tue, 13 Feb 2018 21:11:33 GMT):
confused sorry
boydjohnson (Tue, 13 Feb 2018 21:12:26 GMT):
It could be the same signer as the transaction or different. Most often it is going to be the same, but you could imagine a browser client signing transactions and then a rest client batching them and sending them to the validator.
kakuzu (Tue, 13 Feb 2018 21:14:44 GMT):
ok. what if i set value to n=5 in some smart contract so i have single transaction and it put it in a batch and send. my batch will have single transaction.
boydjohnson (Tue, 13 Feb 2018 21:15:20 GMT):
It is fine to have a single transaction in a batch.
Tellus (Wed, 14 Feb 2018 00:55:05 GMT):
Has joined the channel.
zac (Wed, 14 Feb 2018 02:07:11 GMT):
In [Sawtooth Supply Chain](https://github.com/hyperledger/sawtooth-supply-chain) there are browser clients which build and sign their own transactions with the user's private key. Then the transaction is sent to the Node.js server which will wrap the transaction in a batch, signed with the server's private key, and send it on to the validator
zac (Wed, 14 Feb 2018 02:07:11 GMT):
In [Sawtooth Supply Chain](https://github.com/hyperledger/sawtooth-supply-chain) there are browser clients which build and sign their own transactions with the user's private key. Then the transaction is sent to the Node.js server which will wrap the transaction in a batch, signed with the server's private key, and then send it on to the validator
zac (Wed, 14 Feb 2018 02:09:44 GMT):
The server makes its public key available via an HTTP endpoint (`/info`), so the browser clients can set up their transaction headers properly
zac (Wed, 14 Feb 2018 02:11:04 GMT):
The clients sometimes sends multiple related transactions together to the server, and those will be wrapped in a single batch
zac (Wed, 14 Feb 2018 02:11:27 GMT):
But if the client sends one transaction at a time, then it will be one transaction per batch
zac (Wed, 14 Feb 2018 02:12:00 GMT):
However, you can imagine a scenario where the server acts as some sort of load balancer, batching together transactions from multiple users to speed up processing
blockchainblore (Wed, 14 Feb 2018 08:46:25 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=NWmDJ7Xtc2mqrEdrf) @NileshS I didn't completely understand the reply. Could you please let me know which comment from @grkvit I need to refer to?
shalinigpt (Wed, 14 Feb 2018 09:08:43 GMT):
Has joined the channel.
sibil (Wed, 14 Feb 2018 10:16:05 GMT):
How do I register/add a new Transaction Family?
sibil (Wed, 14 Feb 2018 10:16:05 GMT):
How do I register/add a new Transaction Processor?
sibil (Wed, 14 Feb 2018 10:16:58 GMT):
Say I have written a new Transaction Family using the Python SDK
sibil (Wed, 14 Feb 2018 10:16:58 GMT):
Say I have written a new TP using the Python SDK
sibil (Wed, 14 Feb 2018 10:17:04 GMT):
How do I add this to sawtooth?
sibil (Wed, 14 Feb 2018 10:17:04 GMT):
How do I tell Validator about my new transaction family? How is the registration procedure? Couldn't find anything in 1.0 documentation.
sibil (Wed, 14 Feb 2018 10:17:04 GMT):
How do I tell Validator about my new TP? How is the registration procedure? Couldn't find anything in 1.0 documentation.
sibil (Wed, 14 Feb 2018 10:17:19 GMT):
I have a AWS sawtooth instance ready.
bcdotworld (Wed, 14 Feb 2018 11:52:23 GMT):
so, if I want te expose my blockchain outside the local network, I'll have to replace every bind and endpoint to the machine IP address?
bcdotworld (Wed, 14 Feb 2018 11:52:23 GMT):
so, if I want to expose my blockchain outside the local network, I'll have to replace every bind and endpoint to the machine IP address?
leonardo.angelini (Wed, 14 Feb 2018 12:03:56 GMT):
Has joined the channel.
sibil (Wed, 14 Feb 2018 13:02:37 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=dMb3sSocuG8imbG2Q) @bcdotworld I think only the validator & the rest API endpoints would need outside visibility.
bcdotworld (Wed, 14 Feb 2018 13:03:36 GMT):
@sibil thank you! I'll try it out!
bcdotworld (Wed, 14 Feb 2018 13:14:47 GMT):
@sibil what about the network keys? should I set it manually or generate them in some way?
bcdotworld (Wed, 14 Feb 2018 13:14:47 GMT):
@sibil what about the network keys? should I set them manually or generate them in some way?
bravobardo (Wed, 14 Feb 2018 14:16:12 GMT):
Has joined the channel.
bravobardo (Wed, 14 Feb 2018 14:17:05 GMT):
Hello. Have you faced the error "Version in "./sawtooth-default.yaml" is unsupported." during docker-composer installation?
Dan (Wed, 14 Feb 2018 14:45:06 GMT):
can someone verify the example validator.toml file loads correctly? I'm away from my linux machine today and there's a question on the mail list.
horvatic (Wed, 14 Feb 2018 14:56:07 GMT):
Can someone point me to the endpoints doc's for the Java SDK example
benoit.razet (Wed, 14 Feb 2018 15:34:32 GMT):
I created a JIRA ticket for a bug we encounter when transaction families requiring block_info data (like the timestamp of the current block) can't get the data.
benoit.razet (Wed, 14 Feb 2018 15:34:35 GMT):
https://jira.hyperledger.org/browse/STL-1063
benoit.razet (Wed, 14 Feb 2018 16:03:19 GMT):
I hope this will help track down the issue. The ticket describes how to reproduce the issue by modifying slightly intkey to get the timestamp from the block_info. In our system we also encounter the problem with sawtooth settings (instead of block_info)
LuisMarado (Wed, 14 Feb 2018 18:01:40 GMT):
Has joined the channel.
Dan (Wed, 14 Feb 2018 19:08:27 GMT):
thanks! having a detailed bug like that with a full reproducer is one of the best things we can get.
kakuzu (Wed, 14 Feb 2018 19:45:21 GMT):
ubuntu@ip-172-30-0-105:~$ sudo xo create game --username jack
Error: Failed to connect to http://127.0.0.1:8008/batches: HTTPConnectionPool(host='127.0.0.1', port=8008): Max retries exceeded with url: /batches (Caused by NewConnectionError('
kakuzu (Wed, 14 Feb 2018 19:45:49 GMT):
unable to make new game
rberg2 (Wed, 14 Feb 2018 19:59:46 GMT):
@kakuzu Is the rest-api running and accessible over 127.0.0.1? you may need to specify a --url for xo to connect to the rest api if its not bound to 127.0.0.1:8008
kakuzu (Wed, 14 Feb 2018 20:06:19 GMT):
ok thanks
CocoLife (Wed, 14 Feb 2018 20:12:33 GMT):
Hello everyone, I have a question regarding the sawtooth lake seafood project, I see that IoT device will be attached to the seafood to measure the temperature during the transit. what happens when the seafood passes through a zone where there is no access to internet. how would the IoT sensor feed to the blockchain the data ?
kakuzu (Wed, 14 Feb 2018 20:15:30 GMT):
not an expert but depends upon iot device if it can keep data cached. in some IOT devices, they keep reading to themself until we called. some nfc enabled device do that
CocoLife (Wed, 14 Feb 2018 20:17:42 GMT):
okay, I would like to hear more thoughts on that area :-)
CocoLife (Wed, 14 Feb 2018 20:17:49 GMT):
Thanks Kakuzu :-)
kakuzu (Wed, 14 Feb 2018 20:35:05 GMT):
Clipboard - February 14, 2018 3:34 PM
mfford (Wed, 14 Feb 2018 21:28:02 GMT):
The Hyperledger Sawtooth Team will be hosting a Technical Forum on Thursday, Feb 15th from 10-11am CDT. The technical forums feature presentations and discussions for the Hyperledger Sawtooth platform. We invite Hyperledger community members interested in Hyperledger Sawtooth to join our forum!
Here are the details:
Title: Hyperledger Sawtooth Technical Forum
Day: Thursday, Feb 15th
Time: 10-11am CDT
Agenda:
1. Introductions-Mark Ford
2. Rust SDK & Sawtooth-Peter Schwarz
3. Open Forum
We are using the HL Zoom account for these calls:
Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/186952297
Or iPhone one-tap :
US: +16699006833,,186952297## or +16465588656,,186952297##
Or Telephone:
Dial(for higher quality, dial a number based on your current location):
US: +1 669 900 6833 or +1 646 558 8656 or +1 877 369 0926 (Toll Free) or +1 855 880 1246 (Toll Free)
Meeting ID: 186 952 297
International numbers available: https://zoom.us/zoomconference?m=sQMXAYDPFm9MsBtks9qhHbn04r0jrDVv
Dan (Wed, 14 Feb 2018 21:28:49 GMT):
@dhuseby rust item might be of interest to you ^
sibil (Thu, 15 Feb 2018 06:10:45 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=xHXjJJYEvdz8ymTcf)
sibil (Thu, 15 Feb 2018 06:10:51 GMT):
Please help.
AdamParker (Thu, 15 Feb 2018 06:15:57 GMT):
A TP registers itself with the Validator. It is automatically utilized for entries with it's family/version. There are tutorials on writing a transaction processor but I personally found the most usefulness reverse engineering the intkey example.
HargobindGupta (Thu, 15 Feb 2018 07:20:24 GMT):
Has joined the channel.
sibil (Thu, 15 Feb 2018 08:03:38 GMT):
@AdamParker - Thanks.
After the registration the TP logic is stored within the validator? Or Will the validator contact TP for each request?
gaurang (Thu, 15 Feb 2018 10:01:45 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=HfNkXCSkpuGkxFEJK) @sibil Our Exp. says if you terminate the TP processor, it will not validate any more tx. It will validate the data only when you switch on the TP again.
sibil (Thu, 15 Feb 2018 10:03:04 GMT):
Thanks @gaurang
sibil (Thu, 15 Feb 2018 10:04:15 GMT):
How do I run a Python TP? Say I have renamed the intKey example python TP.
sibil (Thu, 15 Feb 2018 10:05:18 GMT):
And how the Validator knows about the TP path/port?
I couldn't find this in the documentation.
askmish (Thu, 15 Feb 2018 12:19:42 GMT):
@sibil The TP tells it to validator, when calling "processor.add_handler(handler)" i.e. when registering itself
askmish (Thu, 15 Feb 2018 12:19:42 GMT):
did you try: https://github.com/hyperledger/sawtooth-marketplace
sibil (Thu, 15 Feb 2018 12:23:50 GMT):
I see
sibil (Thu, 15 Feb 2018 12:24:09 GMT):
Thanks @askmish
sibil (Thu, 15 Feb 2018 12:24:52 GMT):
When a request arrive through the REST API, it is forwarded to the Validator.
sibil (Thu, 15 Feb 2018 12:25:13 GMT):
The Validator communicates over ZMQ to the TP?
askmish (Thu, 15 Feb 2018 15:00:52 GMT):
@sibil yep it does
ScanTrust (Thu, 15 Feb 2018 15:21:50 GMT):
Has joined the channel.
cmoro-deusto (Thu, 15 Feb 2018 17:30:17 GMT):
Has joined the channel.
cmoro-deusto (Thu, 15 Feb 2018 17:39:24 GMT):
hi all! Looking forward for the "Hyperledger Sawtooth v1.0: Market Significance and Technical Overview" webcast!
cmoro-deusto (Thu, 15 Feb 2018 17:40:05 GMT):
@mfford i'm afraid i've missed the "Hyperledger Sawtooth Technical Forum", is it available somewhere?
mfford (Thu, 15 Feb 2018 18:48:41 GMT):
@cmoro-deusto it is available here: https://drive.google.com/drive/folders/0B_NJV6eJXAA1VnFUakRzaG1raXc
cmoro-deusto (Thu, 15 Feb 2018 19:01:55 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=E7jratzwKYvwCTvfH) @mfford Thanks very much!
candidosg (Thu, 15 Feb 2018 20:12:36 GMT):
Where can I find the correct documentation for the demo of the marketplace?
kikko7 (Thu, 15 Feb 2018 21:19:56 GMT):
Has joined the channel.
TsuiSauChi (Thu, 15 Feb 2018 21:46:45 GMT):
Has joined the channel.
ArturoSerrano (Fri, 16 Feb 2018 08:22:04 GMT):
Has joined the channel.
yarasan (Fri, 16 Feb 2018 09:16:33 GMT):
Has joined the channel.
askmish (Fri, 16 Feb 2018 10:12:03 GMT):
did you look at: https://github.com/hyperledger/sawtooth-marketplace
candidosg (Fri, 16 Feb 2018 11:44:08 GMT):
@askmish thanks
horvatic (Fri, 16 Feb 2018 14:30:06 GMT):
python error.PNG
askmish (Fri, 16 Feb 2018 15:02:20 GMT):
well get_version is not a win32 application. :) This is a windows thing. An easy fix is to add 'python3' to arg list ['python3', '../../../bin/get_version']
askmish (Fri, 16 Feb 2018 15:03:58 GMT):
@horvatic
askmish (Fri, 16 Feb 2018 15:15:35 GMT):
oh and you have to specify an argument
horvatic (Fri, 16 Feb 2018 15:16:20 GMT):
tcp://localhost:4004?
horvatic (Fri, 16 Feb 2018 15:17:40 GMT):
@askmish Getting this error now `FileNotFoundError: [WinError 2] The system cannot find the file specified` most likey has to do with the missing argument you are speaking of
askmish (Fri, 16 Feb 2018 15:24:19 GMT):
no a target for setup tools like build, install, etc.
horvatic (Fri, 16 Feb 2018 15:27:00 GMT):
Yeah I've been targeting install. Running this python setup.py install
horvatic (Fri, 16 Feb 2018 15:27:00 GMT):
Yeah I've been targeting install. `Running this python setup.py install`
askmish (Fri, 16 Feb 2018 15:28:32 GMT):
could you paste the full log
horvatic (Fri, 16 Feb 2018 15:29:33 GMT):
log from `C:\\Program Files (x86)\\Intel\\sawtooth\\logs` or error output of console?
askmish (Fri, 16 Feb 2018 15:30:34 GMT):
error output of console where you see filenotfound
horvatic (Fri, 16 Feb 2018 15:31:37 GMT):
python error.PNG
horvatic (Fri, 16 Feb 2018 15:32:12 GMT):
Note I have Python3, and Python 2.7 install on my machine, but Python3 on first in my Path's
horvatic (Fri, 16 Feb 2018 15:33:15 GMT):
I am also running this Script in a GIT Bash session, which hasn't cause any error's as of yet
askmish (Fri, 16 Feb 2018 15:33:24 GMT):
oh perhaps you need just python instead of python3
horvatic (Fri, 16 Feb 2018 15:33:43 GMT):
Ill try it
askmish (Fri, 16 Feb 2018 15:34:24 GMT):
It usually depends on your python setup
horvatic (Fri, 16 Feb 2018 15:35:16 GMT):
Got it working! I did get an access denied for a log file, but meh should cause any issues
horvatic (Fri, 16 Feb 2018 15:35:32 GMT):
python error.PNG
askmish (Fri, 16 Feb 2018 15:43:19 GMT):
perhaps you'll need to install it as a --user
horvatic (Fri, 16 Feb 2018 15:59:16 GMT):
Getting `SandboxViolation: mkdir('C:\\Program Files (x86)\\Intel\\sawtooth` I feel we should be making log error in a local folder, not in `C:\\Program Files (x86)\\Intel\\sawtooth` Maybe `/log/sawtooth`
horvatic (Fri, 16 Feb 2018 15:59:16 GMT):
Getting `SandboxViolation: mkdir('C:\\Program Files (x86)\\Intel\\sawtooth` I feel we should log error in a local relative folder, not in `C:\\Program Files (x86)\\Intel\\sawtooth` Maybe `/log/sawtooth`
horvatic (Fri, 16 Feb 2018 15:59:16 GMT):
Getting `SandboxViolation: mkdir('C:\\Program Files (x86)\\Intel\\sawtooth` I feel we should log error in a local relative folder, not in `C:\\Program Files (x86)\\Intel\\sawtooth` Maybe `./log/sawtooth`
askmish (Fri, 16 Feb 2018 16:13:59 GMT):
well linux would be an ideal platform for sawtooth
askmish (Fri, 16 Feb 2018 16:14:08 GMT):
.. :)
Dan (Fri, 16 Feb 2018 16:15:49 GMT):
@rberg2 I'm seeing some of these on jenkins: ```[jenkins-Sawtooth-Hyperledger-sawtooth-core-PR-1444-1] Running shell script
+ docker build . -f ci/sawtooth-build-docs -t sawtooth-build-docs:dc1a1fe839e44feb559a11337cd6fdbedcb491a2dbe5393011f4d2c7b2e1bc26
error checking context: 'no permission to read from '/data/jenkins/workspace/jenkins-Sawtooth-Hyperledger-sawtooth-core-PR-1444-1/adm/target/debug/incremental/build_script_build-23azbfwwcf0pb/s-eyd8z8gqkd-1y9t422.lock''.```
horvatic (Fri, 16 Feb 2018 16:18:01 GMT):
@askmish haha agreed! But where the fun in solving the cross platform issues!
horvatic (Fri, 16 Feb 2018 16:26:18 GMT):
python error.PNG
vikas.singh (Fri, 16 Feb 2018 17:03:23 GMT):
how can we run the "bond family" use case ?
vikas.singh (Fri, 16 Feb 2018 17:03:50 GMT):
I got someone interested in the "bond family" use case and now I see that it's removed from the 0.8 onwards
vikas.singh (Fri, 16 Feb 2018 17:03:57 GMT):
what can I do to run it ?
ColinAlstad (Fri, 16 Feb 2018 17:10:57 GMT):
Has joined the channel.
Dan (Fri, 16 Feb 2018 17:48:24 GMT):
Yeah, unfortunately no one had time to update that example for sawtooth 1.0. If you are really cool you could try updating it. Otherwise there's two things you can do (you'll still be cool, but in a different way) ...
1) checkout v0.7. It lacks a lot of the architecture we introduced in v0.8 but you will still be able to run it.
2) use the logic as an example
Depending on the motivation for looking at sawtooth our more recent examples could be more interesting. Take a look at https://github.com/hyperledger/sawtooth-supply-chain and https://github.com/hyperledger/sawtooth-marketplace
and possibly
https://github.com/hyperledger/sawtooth-hyper-directory
rberg2 (Fri, 16 Feb 2018 18:35:37 GMT):
@Dan That appears to be related to changes in the rust compiler, we are working on that now.
ChrisLawsonAU (Fri, 16 Feb 2018 20:39:29 GMT):
Has joined the channel.
alberto_souza (Fri, 16 Feb 2018 21:01:33 GMT):
Hi! I don't know if it is a normal behaviour, but when I send a transaction, my processor is called twice, always... The basic error would be me sending the transaction twice, but I am pretty sure that I am not making this mistake.
agunde (Fri, 16 Feb 2018 21:03:59 GMT):
@alberto_souza That is correct behavior. The transaction is processed once during block publishing and then again during block validation.
jaredcorduan (Fri, 16 Feb 2018 21:18:32 GMT):
@pschwarz Thank you for all the help this week! STL-1063.fix_internal_error_unscheduled and STL-1064.validator_freeze are a huge help to us! with those two changes combined we were not able to reproduce any of our issues.
jaredcorduan (Fri, 16 Feb 2018 21:18:32 GMT):
@pschwarz Thank you for all the help this week! `STL-1063.fix_internal_error_unscheduled` and `STL-1064.validator_freeze` are a huge help to us! with those two changes combined we were not able to reproduce any of our issues.
alberto_souza (Fri, 16 Feb 2018 21:25:23 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=yZTx7dKHgqXZnAGCp) @agunde thank you! It makes sense!
benoit.razet (Fri, 16 Feb 2018 22:04:49 GMT):
Thank you very much @pschwarz for tracking down those issues and been super fast at providing PRs fixing them. I've learnt a bunch too in this process. :clap: :clap: :clap:
jingman (Fri, 16 Feb 2018 22:05:09 GMT):
@agunde Ha, I just got here to ask the exact same question as @alberto_souza! Is there any way for the handler to tell which context (publishing vs validation) it's is running in?
jingman (Fri, 16 Feb 2018 22:05:09 GMT):
@agunde Ha, I just got here to ask the exact same question as @alberto_souza! Is there any way for the handler to tell which context (publishing vs validation) it's running in?
agunde (Fri, 16 Feb 2018 22:09:03 GMT):
The transaction processor doesn't know the difference between publishing and validation.
jingman (Fri, 16 Feb 2018 22:09:39 GMT):
Thanks!
kakuzu (Fri, 16 Feb 2018 22:09:58 GMT):
@agunde are seth docker images up
Dan (Fri, 16 Feb 2018 22:12:07 GMT):
might be a good question for #sawtooth-seth I don't think @agunde is working on that
kakuzu (Fri, 16 Feb 2018 22:16:25 GMT):
ok
kakuzu (Fri, 16 Feb 2018 22:16:53 GMT):
she did ask someone to help me .
PonmudiK (Sat, 17 Feb 2018 04:26:40 GMT):
Has joined the channel.
sibil (Sat, 17 Feb 2018 07:11:34 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=S5PJM8Q3qEctTLpr2) @askmish Thanks!
sibil (Sat, 17 Feb 2018 07:13:09 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=2SCZNPYGcyTkjjGvE) @askmish not yet. will do.
ibartley (Sat, 17 Feb 2018 08:37:31 GMT):
Has joined the channel.
FabienF (Sat, 17 Feb 2018 10:10:05 GMT):
Has joined the channel.
formax (Sat, 17 Feb 2018 10:12:41 GMT):
Hey guys,
I already found a similar question by @davod in January, but I didn't find any answer, so I repost the question:
Is there any way to compress the `BlockStore` or at least reduce the initial download time? I mean something like the _warp sync_ in Ethereum.
formax (Sat, 17 Feb 2018 10:12:41 GMT):
Hey guys,
I already found a similar question by @davod in January, but I didn't find any answer, so I repost the question:
Is there any way to compress the `BlockStore` or at least reduce the initial download time required? I mean something like the _warp sync_ in Ethereum.
akeelnazir (Sat, 17 Feb 2018 13:05:47 GMT):
Has joined the channel.
Dan (Sat, 17 Feb 2018 19:55:45 GMT):
not yet or at least not that I'm aware of
formax (Sat, 17 Feb 2018 20:47:24 GMT):
Hi @Dan thanks for the answer.
So when the doc says:
```The BlockStore provides an atomic method for updating the current head of the chain. In order for the BlockStore to switch forks, it is provided with a list of blocks in the new chain to commit, and a list of blocks in the old chain to decommit. These lists are the blocks in each fork back to the common root.```
here --> https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/journal.html#the-blockstore
this is not a way to shorten the time required to retrieve the entire BlockStore.
valentin.ceaprazaru (Sat, 17 Feb 2018 20:57:36 GMT):
Has joined the channel.
formax (Sat, 17 Feb 2018 23:26:23 GMT):
Thanks @Dan
TarunMahawar (Sun, 18 Feb 2018 14:30:42 GMT):
Has joined the channel.
TarunMahawar (Sun, 18 Feb 2018 14:31:24 GMT):
Hey guys,
TarunMahawar (Sun, 18 Feb 2018 14:32:55 GMT):
I have been through the whole documentation and there is nothing written about how to build a network or connect different nodes together. Can anyone help me with that please??
sibil (Sun, 18 Feb 2018 18:20:22 GMT):
@TarunMahawar - AFAIK you need a Validator network
sibil (Sun, 18 Feb 2018 18:22:14 GMT):
Please see https://sawtooth.hyperledger.org/docs/core/releases/latest/sysadmin_guide/configuring_sawtooth/validator_configuration_file.html
sibil (Sun, 18 Feb 2018 18:23:24 GMT):
I agree with you that the documentation needs improvement.
Dan (Sun, 18 Feb 2018 20:15:28 GMT):
Maybe that's something that can be worked on at this LA hackFest this week.
wininani (Mon, 19 Feb 2018 05:42:27 GMT):
Has joined the channel.
HargobindGupta (Mon, 19 Feb 2018 08:50:20 GMT):
The Track and Trade (T&T) transaction family and Marketplace are the same right?
gaurang (Mon, 19 Feb 2018 12:00:18 GMT):
Finally today able to fix the issue with docker "Unregistering transaction processor"
gaurang (Mon, 19 Feb 2018 12:01:02 GMT):
In docker if we call the TP via shell script it's not able to get SIGTERM/SIGINT.
gaurang (Mon, 19 Feb 2018 12:01:24 GMT):
Now I can see another issue... I have attached 4 TP to my single validator
gaurang (Mon, 19 Feb 2018 12:01:56 GMT):
When ever I commit any tx it gives me three message on my log " Attempting to apply txn"
gaurang (Mon, 19 Feb 2018 12:02:36 GMT):
I was thinking if I have multiple TP attached they will be called in round robin fashion.
gaurang (Mon, 19 Feb 2018 12:02:57 GMT):
Now here it's called three at a time.
kalpuraman (Mon, 19 Feb 2018 14:04:49 GMT):
Has joined the channel.
kalpuraman (Mon, 19 Feb 2018 14:05:32 GMT):
Hi all, can we create private channel in sawtooth?
askmish (Mon, 19 Feb 2018 14:54:37 GMT):
@kalpuraman no, we don't have channels in sawtooth.
askmish (Mon, 19 Feb 2018 14:55:29 GMT):
@gaurang code from 1.0 or master?
askmish (Mon, 19 Feb 2018 14:56:52 GMT):
@HargobindGupta They are related. Marketplace is more updated.
Gabisan (Mon, 19 Feb 2018 15:03:01 GMT):
Has joined the channel.
Dan (Mon, 19 Feb 2018 17:08:29 GMT):
@kalpuraman you can essentially do the same thing as channels in other architectures.. it just means you restrict access to the network. to get two different networks to talk you need to solve the same problems that are being researched for other platforms.
ranjithkumarmv (Mon, 19 Feb 2018 17:55:00 GMT):
Has joined the channel.
b39647 (Mon, 19 Feb 2018 20:09:53 GMT):
Has joined the channel.
SeanHunt (Mon, 19 Feb 2018 21:18:29 GMT):
Has joined the channel.
mohdhafeezaj (Mon, 19 Feb 2018 21:59:27 GMT):
Has joined the channel.
dave (Mon, 19 Feb 2018 22:04:56 GMT):
Hi guys, I'm working with dropbox toolbox on win, I try to config the SAWTOOTH_HOME in an shared directory from validator container to host machine. Logs and keys are ok, but the merkle.lmbd is locked. So i receive "lmdb.InvalidParameterError: /mnt/sawtooth/data/merkle-00.lmdb: Invalid argument" because the file name is merkle-00.lmdb-lock. There are some workaround for that?
aczire (Mon, 19 Feb 2018 23:26:02 GMT):
Has joined the channel.
aczire (Mon, 19 Feb 2018 23:29:23 GMT):
Hi Guys, new to sawtooth, trying to get the supply-chain use case up and running, how do i see the fishnet example, I can see only a blank page when connected to localhost:8022
aczire (Mon, 19 Feb 2018 23:35:06 GMT):
how can i see the dashboard, list-fish etc?
PrabhatSutar (Tue, 20 Feb 2018 05:11:30 GMT):
Has joined the channel.
callmeashok (Tue, 20 Feb 2018 05:38:42 GMT):
@Dan what are other architectures you are referring to, If i want to create private channels to talk and solve problems discretely??
IndrajitSinhRayjada (Tue, 20 Feb 2018 06:21:57 GMT):
Has joined the channel.
callmeashok (Tue, 20 Feb 2018 06:26:56 GMT):
can we create private network to communicate with a peer in distributed network of sawtooth??
ranjithkumarmv (Tue, 20 Feb 2018 08:00:02 GMT):
I am new to sawtooth, trying to create a marketpalce using this codebase(https://github.com/hyperledger/sawtooth-marketplace) . i cannot find the documentation to create users or assests
ranjithkumarmv (Tue, 20 Feb 2018 08:00:02 GMT):
I am new to sawtooth, trying to create a marketpalce using this codebase(https://github.com/hyperledger/sawtooth-marketplace) . i cannot find the documentation to create users or assests via api and how to access Marketplace Navigator
ranjithkumarmv (Tue, 20 Feb 2018 08:00:02 GMT):
I am new to sawtooth, trying to create a marketpalce using this codebase(https://github.com/hyperledger/sawtooth-marketplace) . i cannot find the documentation to create users or assests via REST Api, and how to access Marketplace Navigator
maxmijn (Tue, 20 Feb 2018 08:50:33 GMT):
Has joined the channel.
ranjithkumarmv (Tue, 20 Feb 2018 10:26:47 GMT):
How to access marketplace navigator
me234 (Tue, 20 Feb 2018 10:58:56 GMT):
Has joined the channel.
Akshatha (Tue, 20 Feb 2018 12:17:35 GMT):
Has joined the channel.
callmeashok (Tue, 20 Feb 2018 12:49:52 GMT):
when does a validator fails in sawtooth??
bogomazov (Tue, 20 Feb 2018 13:00:01 GMT):
Hey guys, quick question, can two transaction families interact with each other/get and update each other's state in the context during processing of Transaction?
bogomazov (Tue, 20 Feb 2018 13:00:01 GMT):
Hey guys, quick question, can two transaction families interact with each other/get and update each other's state in the context during processing of Transaction coming from one family?
TheOnlyJoey (Tue, 20 Feb 2018 14:12:18 GMT):
Has joined the channel.
TheOnlyJoey (Tue, 20 Feb 2018 14:12:27 GMT):
Good day, it seems that I can't find documentation regarding using different consensus on the sawtooth docker, any tips on how to do this? seems to only do dev consensus
tomislav (Tue, 20 Feb 2018 15:41:37 GMT):
Has joined the channel.
benoit.razet (Tue, 20 Feb 2018 16:00:39 GMT):
@bogomazov I have already done something like you describe but only with *get* operations, not *set*. I would assume *set* would work too. But since the inputs and outputs are declared in the transaction, I would assume they would create dependencies that would make the parallel scheduler not parallelize transactions that write at the same address.
jsmitchell (Tue, 20 Feb 2018 16:20:54 GMT):
correct, they would just be executed serially
jsmitchell (Tue, 20 Feb 2018 16:21:10 GMT):
(but still could be included in the same block)
jsmitchell (Tue, 20 Feb 2018 16:35:56 GMT):
@TheOnlyJoey if you take a look at https://github.com/hyperledger/sawtooth-core/blob/master/integration/sawtooth_integration/docker/test_poet_liveness.yaml you can see an example of the sawset and poet cli commands being used to set the sawtooth.consensus.algorithm to poet and establish other required settings. These are built into the genesis block, but can also be set on the fly while the system is running.
jsmitchell (Tue, 20 Feb 2018 16:36:19 GMT):
these are on chain settings
jsmitchell (Tue, 20 Feb 2018 16:37:17 GMT):
look at the 'validator-0' block in the yaml file
Dan (Tue, 20 Feb 2018 17:00:35 GMT):
What is Anne's handle? This is another good faq item.
achenette (Tue, 20 Feb 2018 17:28:03 GMT):
I'm @achenette. And I've noted this item.
achenette (Tue, 20 Feb 2018 17:28:12 GMT):
Thanks!
ParitoshPandey (Tue, 20 Feb 2018 17:41:37 GMT):
Has joined the channel.
ParitoshPandey (Tue, 20 Feb 2018 17:47:32 GMT):
hi ,
We tried to run the 0.7 version of sawtooth lake.
We are interested in running the bond family UI.
We got the UI RUNNING but not able to load bond data by running bin/load_bond_data. It says ''no response from server".
ParitoshPandey (Tue, 20 Feb 2018 17:48:27 GMT):
Screenshot (33).png
ParitoshPandey (Tue, 20 Feb 2018 17:50:07 GMT):
Screenshot (35).png
ParitoshPandey (Tue, 20 Feb 2018 17:51:43 GMT):
Also there were errors while running ledger_sync. We couldn't run syncledger there followin is th screenshot of the log file
ParitoshPandey (Tue, 20 Feb 2018 17:52:30 GMT):
Screenshot (32).png
ParitoshPandey (Tue, 20 Feb 2018 17:53:20 GMT):
Any comments on the above would be really helpful
demianlicht (Tue, 20 Feb 2018 18:04:22 GMT):
Has joined the channel.
boydjohnson (Tue, 20 Feb 2018 18:09:38 GMT):
Hi @ParitoshPandey Is the `validator` from the `bin` directory running anywhere?
ParitoshPandey (Tue, 20 Feb 2018 18:10:08 GMT):
yes
ParitoshPandey (Tue, 20 Feb 2018 18:10:27 GMT):
sawtooth-validator service is up
ParitoshPandey (Tue, 20 Feb 2018 18:11:21 GMT):
Screenshot (38).png
boydjohnson (Tue, 20 Feb 2018 18:12:02 GMT):
what does `bin/btp init` give you?
ParitoshPandey (Tue, 20 Feb 2018 18:14:24 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/0.7/bond_family_guide/users_guide/cli.html
ParitoshPandey (Tue, 20 Feb 2018 18:15:02 GMT):
I suppose it is for initiating something (bond, i guess)
boydjohnson (Tue, 20 Feb 2018 18:18:36 GMT):
Yeah, it sets up the url to hit the validator rest api on and it is what is being called by the load script. What host and port is the sawtooth-validator on?
ParitoshPandey (Tue, 20 Feb 2018 18:25:57 GMT):
sorry for late replies. everything on same host
validator port:8800
boydjohnson (Tue, 20 Feb 2018 18:27:02 GMT):
when you run `bin/btp init` what is the output?
benoit.razet (Tue, 20 Feb 2018 18:34:09 GMT):
we are experiencing some difference in behavior of the rest-api depending 1) we use the build process of sawtooth or 2) our own build of the rest-api image
ParitoshPandey (Tue, 20 Feb 2018 18:34:14 GMT):
Screenshot (39).png
benoit.razet (Tue, 20 Feb 2018 18:35:11 GMT):
has anyone any opinion about the following process for building the sawtooth-rest-api image: 1) git checkout the right branch of sawtooth, 2) build an image copying the sawtooth-core files and `python3 setup.py install` in the right directory (e.g. sawtooth-core/rest_api if it's for building the rest-api)
ParitoshPandey (Tue, 20 Feb 2018 18:36:21 GMT):
@boydjohnson i posted btp init screenshot
boydjohnson (Tue, 20 Feb 2018 18:36:25 GMT):
Hm, @ParitoshPandey I am unsure. I have to sign off for the moment. Someone else may have thoughts
ParitoshPandey (Tue, 20 Feb 2018 18:36:38 GMT):
ok Thanks
benoit.razet (Tue, 20 Feb 2018 18:36:55 GMT):
our rest-api seems to be hanging under heavy load of batch sending. In contrast, with sawtooth build of the rest-api, everything is fine.
benoit.razet (Tue, 20 Feb 2018 18:37:34 GMT):
another moving part is that we are using a ubuntu 17-10 image instead of ubuntu:xenial
jsmitchell (Tue, 20 Feb 2018 18:59:20 GMT):
@benoit.razet does the sawtooth rest-api work fine on 17.10?
benoit.razet (Tue, 20 Feb 2018 19:03:46 GMT):
it is surprisingly working okay. As I said, under heavy load of batch sent, the rest-api is freezing, which we don't observe with the the sawtooth build. Do you have any idea whether the async code be affected by the change from python3.5 (xenial) to python 3.6 (ubuntu 17:10)?
benoit.razet (Tue, 20 Feb 2018 19:05:52 GMT):
I'm doing some more testing to try to figure this out but I'm curious to know if you run into these pbs
jsmitchell (Tue, 20 Feb 2018 19:07:48 GMT):
It doesn't sound familiar. We haven't been doing testing under 3.6 or non 16.04 libs yet though.
jsmitchell (Tue, 20 Feb 2018 19:08:04 GMT):
@adamludvik @pschwarz ^
pschwarz (Tue, 20 Feb 2018 19:30:03 GMT):
@benoit.razet It depends on what version of pyzmq is being installed. With the xenial/python3.5, pyzmq v15.x (I don't know the exact one) is installed. Do you know which one is being installed in ubuntu 17.10?
jingman (Tue, 20 Feb 2018 19:30:11 GMT):
I have kindof a patterns/practices question: If I process a transaction that doesn't manipulate state in any way, how do I just kinda "ignore" that transaction so it doesn't get added to the chain. Should I just invalidate it? It's basically a no-op, so I just want it to go away.
pschwarz (Tue, 20 Feb 2018 19:31:19 GMT):
And by "depends:, I mean my answer about whether or not we can isolate the problem
TreyZhong (Tue, 20 Feb 2018 19:34:48 GMT):
Has joined the channel.
ColinAlstad (Tue, 20 Feb 2018 19:35:49 GMT):
Has left the channel.
ColinAlstad (Tue, 20 Feb 2018 19:36:06 GMT):
Has joined the channel.
benoit.razet (Tue, 20 Feb 2018 19:36:56 GMT):
`pyzmq==17.0.0`
benoit.razet (Tue, 20 Feb 2018 19:40:37 GMT):
I think the simplest solution to move forward would be to downgrade our build from 17.10 to xenial.
aczire (Tue, 20 Feb 2018 20:07:58 GMT):
Hello Guys, how do I deploy the fishnet or asset management sample to use IBM cloud?
jaredcorduan (Tue, 20 Feb 2018 20:27:00 GMT):
is there a way to use the build scripts inside the sawtooth-core repo to build a docker image with the basic sawtooth sdk python libraries installed? I can build the images myself, but it would be nice to use something more official that we don't have to maintain. When I run `./bin/build_all -l python installed` I see a couple images that are close. For instance, `sawtooth-xo-tp-python` has everything that I need except for the protobuf libraries needed for executing the `sawtooth-settings` and `sawtooth-block-info` transactions. (I realize those are not in sawtooth-core, but they are something that I'd imagine a lot of folks installing the sdk would want, since those txn families are pretty fundamental to the system.)
rbailey (Tue, 20 Feb 2018 20:28:03 GMT):
Has joined the channel.
jstark (Tue, 20 Feb 2018 20:49:43 GMT):
Has joined the channel.
jstark (Tue, 20 Feb 2018 20:50:35 GMT):
in the supply chain example it seems as if some of the rest api endpoints that are described in the documentation are not implemented. Were they at one point and then removed?
jsmitchell (Tue, 20 Feb 2018 20:51:58 GMT):
@jingman you can raise InvalidTransaction
kakuzu (Tue, 20 Feb 2018 20:52:43 GMT):
yes lots of updates have been done, I tried Seth its whole module is not there dev asked me wait till the time they upload new images on docker.
jsmitchell (Tue, 20 Feb 2018 20:53:16 GMT):
@zac @rbuysse ^^
jstark (Tue, 20 Feb 2018 21:03:03 GMT):
In the sawtooth supply chain example it says that updates to properties and owner/custodian can be done through an API. Can you point me to an example of that being done? Ive looked into the src and the only api that allows a POST is the transaction one.
rbuysse (Tue, 20 Feb 2018 21:15:57 GMT):
@jaredcorduan this image might be what you want: https://hub.docker.com/r/hyperledger/sawtooth-shell/
jaredcorduan (Tue, 20 Feb 2018 21:17:08 GMT):
thanks @rbuysse! is it possible to build that ourselves with the build scripts in the main repo?
rbuysse (Tue, 20 Feb 2018 21:17:31 GMT):
not with the build scripts per se, but the Dockerfile is in the repo.
jaredcorduan (Tue, 20 Feb 2018 21:17:32 GMT):
it's nice to be able to build from master when Peter adds fixes
jaredcorduan (Tue, 20 Feb 2018 21:17:42 GMT):
ah, ok, great, thanks!
rbuysse (Tue, 20 Feb 2018 21:17:51 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/ci/sawtooth-shell
jaredcorduan (Tue, 20 Feb 2018 21:18:45 GMT):
it looks like it doesn't have block info
jaredcorduan (Tue, 20 Feb 2018 21:19:06 GMT):
but I'll add that and have everything I need, thanks!
zac (Tue, 20 Feb 2018 21:20:25 GMT):
@jstark There is a "Sawtooth REST API" with routes like `GET /batches`, it has no direct relationship with the Supply Chain Server/REST API
zac (Tue, 20 Feb 2018 21:20:54 GMT):
Other than that they fulfill similar roles (providing communication to the validator over HTTP/JSON
zac (Tue, 20 Feb 2018 21:21:39 GMT):
The Sawtooth REST API is pulled from Docker Hub and is run with `docker-compose up` for debug purposes
zac (Tue, 20 Feb 2018 21:22:30 GMT):
However, none of the clients use the Sawtooth REST API, they talk to the server which is what you find in the `server/` directory
zac (Tue, 20 Feb 2018 21:23:54 GMT):
You are correct that the only POST route for the Supply Chain Server (other than authentication) is `/transactions`
zac (Tue, 20 Feb 2018 21:24:55 GMT):
This is because posting anything to the blockchain requires signing a transaction, but the server (intentionally), does not know users' signing keys, and so cannot sign transactions for them.
zac (Tue, 20 Feb 2018 21:25:39 GMT):
Instead the browser clients create and sign the transaction, and then send it to that route
jstark (Tue, 20 Feb 2018 21:27:30 GMT):
@zac Is there some documentation that describes how to build the transaction in order to post it?
jstark (Tue, 20 Feb 2018 21:28:14 GMT):
Is this where I should be looking? https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/sdk_submit_tutorial_python.html
kakuzu (Tue, 20 Feb 2018 21:28:58 GMT):
yes.
zac (Tue, 20 Feb 2018 21:29:42 GMT):
If you are using Python, yes
jaredcorduan (Tue, 20 Feb 2018 21:29:42 GMT):
@rbuysse actually that's not exactly what I'm looking for, I guess that Dockerfile grabs the latest `1.0` packages and installs those. I'd love a way to build images from master. should I build the images myself for now if I need master?
zac (Tue, 20 Feb 2018 21:29:56 GMT):
That gets you one half of the picture
jstark (Tue, 20 Feb 2018 21:30:00 GMT):
I was hoping to be able to do something quick and dirty with postman just to try it out but it looks like Ill have to do some coding to make it work
zac (Tue, 20 Feb 2018 21:30:34 GMT):
You also need to build the Payload, which there isn't really a tutorial for
zac (Tue, 20 Feb 2018 21:31:04 GMT):
Short answer is you encode one of these:
https://github.com/hyperledger/sawtooth-supply-chain/blob/master/protos/payload.proto
zac (Tue, 20 Feb 2018 21:31:31 GMT):
Yeah, Postman is not great for this
zac (Tue, 20 Feb 2018 21:32:35 GMT):
Anything that modifies the blockchain needs a cryptographic signature. If you want a traditional set og HTTP/JSON POST endpoints, then you need to have the server generate that signature for you
zac (Tue, 20 Feb 2018 21:32:46 GMT):
WHich means you trust the server with your signing key
rbuysse (Tue, 20 Feb 2018 21:33:02 GMT):
@jaredcorduan oh oops. Yeah, it sounds like we don't really have what you're looking for right now.
zac (Tue, 20 Feb 2018 21:33:03 GMT):
I am not a big fan of this approach, but Sawtooth Marketplace uses it
zac (Tue, 20 Feb 2018 21:33:43 GMT):
https://github.com/hyperledger/sawtooth-marketplace
zac (Tue, 20 Feb 2018 21:34:04 GMT):
That app you could use Postman for POST routes
jaredcorduan (Tue, 20 Feb 2018 21:34:29 GMT):
ah, ok, thanks @rbuysse for letting me know
jstark (Tue, 20 Feb 2018 21:35:02 GMT):
i think ill just steal code out of the sample update js file to add some rest api endpoints to do what i want to do.
jsmitchell (Tue, 20 Feb 2018 21:35:21 GMT):
there was some docker image that worked with mounted sawtooth-core, right @rbuysse
jsmitchell (Tue, 20 Feb 2018 21:35:34 GMT):
probably not suitable for deployment
jaredcorduan (Tue, 20 Feb 2018 21:36:26 GMT):
yea, not looking to volume mount if possible
zac (Tue, 20 Feb 2018 21:38:37 GMT):
Yes, that is probably a reasonable approach
zac (Tue, 20 Feb 2018 21:38:42 GMT):
What are you trying to test out?
jstark (Tue, 20 Feb 2018 21:40:44 GMT):
i want to be able to transfer custodianship and ownership and update properties via api so I can move things around a supply chain using IOT devices for a POC
jsmitchell (Tue, 20 Feb 2018 22:28:45 GMT):
@benoit.razet re: pyzmq 17 https://github.com/zeromq/pyzmq/issues/1137
jsmitchell (Tue, 20 Feb 2018 22:29:18 GMT):
we are explicitly instantiating ZMQEventLoop
benoit.razet (Tue, 20 Feb 2018 22:29:38 GMT):
oh wao! good catch!
jsmitchell (Tue, 20 Feb 2018 22:30:16 GMT):
pyzmq 17 represents some pretty significant changes
jsmitchell (Tue, 20 Feb 2018 22:30:45 GMT):
we are keen to adopt it for perf reasons, but we're going to have to handle that transition with care
jsmitchell (Tue, 20 Feb 2018 22:30:48 GMT):
e.g. https://github.com/zeromq/pyzmq/issues/1065
jsmitchell (Tue, 20 Feb 2018 22:31:15 GMT):
that (closed) issue relates to hangs I was seeing testing the beta of 17
zac (Tue, 20 Feb 2018 22:36:35 GMT):
@jstark Depending on the IoT device, they may be able to sign their own transactions with their own private keys. This might be interesting from an audibility standpoint. If you want to centralize IoT transactions though, long-term you'll probably want to write your own server which can manage IoT private keys
benoit.razet (Tue, 20 Feb 2018 22:38:26 GMT):
thanks for the links @jsmitchell
jsmitchell (Tue, 20 Feb 2018 22:41:44 GMT):
@jstark you should definitely do private keys and transaction signing from the devices, because that is cool
jstark (Tue, 20 Feb 2018 22:43:01 GMT):
@zac @jsmitchell Yeah i will have to do the private key thing but for a POC im gonna run without
ParitoshPandey (Wed, 21 Feb 2018 03:26:49 GMT):
@pschwarz could you please help us on the issues with 0.7 version
mc (Wed, 21 Feb 2018 03:27:26 GMT):
Has joined the channel.
mc (Wed, 21 Feb 2018 03:27:29 GMT):
Hi all
mc (Wed, 21 Feb 2018 03:27:30 GMT):
I'm running into an issue running the sawtooth-supply-chain example in Docker for Windows 10. I get the error, "/usr/bin/env: 'node\r': No such file or directory"
mc (Wed, 21 Feb 2018 03:27:45 GMT):
Any idea how I can fix it?
pankajgoyal (Wed, 21 Feb 2018 04:19:43 GMT):
Has joined the channel.
gaurang (Wed, 21 Feb 2018 05:15:05 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=GLyD2Jw4DspQ4fXfy) @askmish using version # 1.0.1 from docker hub
sbh (Wed, 21 Feb 2018 08:27:10 GMT):
Has joined the channel.
rameesypv (Wed, 21 Feb 2018 09:25:23 GMT):
Has joined the channel.
rameesypv (Wed, 21 Feb 2018 09:26:49 GMT):
@mc I was running into the same issue "error, "/usr/bin/env: 'node\r': No such file or directory". Could anyone please advice?
sibil (Wed, 21 Feb 2018 10:54:55 GMT):
Python newbie question - How do I run the intkey_python client_cli ?
I know how to run the intkey command.
TBruer (Wed, 21 Feb 2018 11:14:12 GMT):
Has joined the channel.
sibil (Wed, 21 Feb 2018 12:05:45 GMT):
sawtooth-core/sdk/examples/intkey_python/sawtooth_intkey/client_cli$ python3
>>> import intkey_cli
>>> intkey_cli.main("intkey_cli", ["list"])
uDArAH: 93867
This is working from python3 console. Running from commandline is not working.
zac (Wed, 21 Feb 2018 13:32:21 GMT):
`$ ./bin/intkey list`
zac (Wed, 21 Feb 2018 13:32:21 GMT):
```
$ ./bin/intkey list
```
zac (Wed, 21 Feb 2018 13:32:55 GMT):
It's a Command Line Interface, not for importing into your python code
zac (Wed, 21 Feb 2018 13:34:00 GMT):
(though I you could import it if you really wanted to, assuming you added it to your `PYTHONPATH`)
sibil (Wed, 21 Feb 2018 14:04:14 GMT):
Thanks @zac - How do I create an executable(./bin/intkey) from this python code(client_cli)?
zac (Wed, 21 Feb 2018 14:23:57 GMT):
Well the main thing is you have to make it executable:
```
$ chmod u+x
zac (Wed, 21 Feb 2018 14:26:29 GMT):
And add `#! /usr/bin/env python3` to the first line, so bash know what to run it with
zac (Wed, 21 Feb 2018 14:27:15 GMT):
Beyond that, it could be any python script, but we usually have it set up our `PYTHONPATH`, and then run `main` from whichever module we're executing
zac (Wed, 21 Feb 2018 14:27:24 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/bin/intkey
sibil (Wed, 21 Feb 2018 14:32:38 GMT):
@zac - Thanks!
ranjithkumarmv (Wed, 21 Feb 2018 14:33:41 GMT):
Has left the channel.
mc (Wed, 21 Feb 2018 15:15:03 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oBg3CPDNqo27CQETp) @rameesypv No response and I have no idea what is going on
mc (Wed, 21 Feb 2018 15:15:03 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oBg3CPDNqo27CQETp) @rameesypv No response and I have no idea what is going
mc (Wed, 21 Feb 2018 15:15:03 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oBg3CPDNqo27CQETp) @rameesypv No response and I have no idea what is goingnon
gaurang (Wed, 21 Feb 2018 15:45:40 GMT):
Anyone using ECIES encryption for payload?
gaurang (Wed, 21 Feb 2018 15:45:40 GMT):
Hay anyone using ECIES encryption for payload?
paddolker (Wed, 21 Feb 2018 16:25:17 GMT):
Has joined the channel.
paddolker (Wed, 21 Feb 2018 16:26:58 GMT):
We are stuck with a 0.7 implementation to show case sawtooth lake bond market to a customer
paddolker (Wed, 21 Feb 2018 16:27:08 GMT):
the validator is running fine
paddolker (Wed, 21 Feb 2018 16:27:12 GMT):
the UI is up
paddolker (Wed, 21 Feb 2018 16:28:07 GMT):
we are stuck with SyncLedger and also when we tried to load load by using btp load .yaml file, it always gives an error " waiting for transaction to commit" (not found:404)
paddolker (Wed, 21 Feb 2018 16:28:24 GMT):
any thoughts how to fix this? It has already given 3 sleepless nights so far !!!
jsmitchell (Wed, 21 Feb 2018 16:35:09 GMT):
@paddolker the bond demo and 0.7 are quite old. Sawtooth has been completely re-written starting with 0.8.
jsmitchell (Wed, 21 Feb 2018 16:35:34 GMT):
I wouldn't recommend starting with 0.7 for any purpose
paddolker (Wed, 21 Feb 2018 16:37:54 GMT):
Agreed. Our client wants to have a look at the bond market demo and hence this effort
jsmitchell (Wed, 21 Feb 2018 16:53:09 GMT):
I think you are going to have a hard time. I would recommend sharing the screenshots of the solution with them and then focusing on demos/customization with 1.0
jsmitchell (Wed, 21 Feb 2018 16:53:12 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/0.7/bond_family_guide/users_guide/ui_reference.html
jsmitchell (Wed, 21 Feb 2018 16:53:31 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/0.7/bond_family_guide/users_guide/tutorial.html
jsmitchell (Wed, 21 Feb 2018 16:53:47 GMT):
that second link does a nice job of showing all the capabilities
pschwarz (Wed, 21 Feb 2018 17:16:21 GMT):
@ParitoshPandey I would agree with @jsmitchell on that recommendation
mc (Wed, 21 Feb 2018 17:37:22 GMT):
which distro of linux is recommended?
amundson (Wed, 21 Feb 2018 17:37:53 GMT):
The deb files are built for Ubuntu 16.04
amundson (Wed, 21 Feb 2018 17:38:27 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide/ubuntu.html
mc (Wed, 21 Feb 2018 17:57:33 GMT):
ok
mc (Wed, 21 Feb 2018 18:02:01 GMT):
is there a docker graphical interface for linux?
mc (Wed, 21 Feb 2018 18:02:12 GMT):
similar to what is available for windows and mac?
mc (Wed, 21 Feb 2018 18:30:31 GMT):
i'm using linux mint
kdenhartog (Wed, 21 Feb 2018 18:43:42 GMT):
Has joined the channel.
nage (Wed, 21 Feb 2018 18:47:35 GMT):
Has joined the channel.
jsmitchell (Wed, 21 Feb 2018 20:15:16 GMT):
@mc not sure - all our usage of docker is command line
callmeashok (Wed, 21 Feb 2018 20:25:17 GMT):
Can anyone tell me how validator validates a transaction or batch and how to configure validator to my project
callmeashok (Wed, 21 Feb 2018 20:30:11 GMT):
How to store and retrieve data from blockchain without db??
marksta (Wed, 21 Feb 2018 20:34:52 GMT):
Has left the channel.
jsmitchell (Wed, 21 Feb 2018 21:17:26 GMT):
@callmeashok have you taken a look at the Application Developer's Guide? https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html
Er1ck (Wed, 21 Feb 2018 21:47:23 GMT):
Has joined the channel.
Dan (Wed, 21 Feb 2018 22:42:41 GMT):
@TreyZhong https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html
TreyZhong (Thu, 22 Feb 2018 00:49:34 GMT):
Clipboard - February 21, 2018 4:49 PM
TreyZhong (Thu, 22 Feb 2018 00:52:44 GMT):
Ok, got it:
TreyZhong (Thu, 22 Feb 2018 00:52:46 GMT):
Clipboard - February 21, 2018 4:52 PM
TreyZhong (Thu, 22 Feb 2018 00:53:10 GMT):
use --url http://rest-api:8008
TreyZhong (Thu, 22 Feb 2018 00:53:23 GMT):
can't use localhost within docker image
TreyZhong (Thu, 22 Feb 2018 01:20:27 GMT):
@zac Hi Zac, I was told by the group that you started the marketplace repo. I'm trying to understand the project so I can use it for my future projects. I would like to know the structure of this project and what should I do if I were to start a project like this from scratch
zac (Thu, 22 Feb 2018 02:28:22 GMT):
@TreyZhong Have you read over the [README](https://github.com/hyperledger/sawtooth-marketplace/blob/master/README.md) and the [design doc](https://github.com/hyperledger/sawtooth-marketplace/blob/master/docs/transaction_family_design.pdf)?
zac (Thu, 22 Feb 2018 02:29:02 GMT):
Also, there is this [component diagram](https://github.com/hyperledger/sawtooth-marketplace/blob/master/docs/components_diagram.svg)
aczire (Thu, 22 Feb 2018 03:48:21 GMT):
Hi @zac When using supply-chain sample, once issued a "docker-compose down", "docker-compose up" is not working. Has to remove all images and rebuild from the scratch, ever encountered this issue?
zac (Thu, 22 Feb 2018 04:53:18 GMT):
Haven't seen that. What error are you getting?
zac (Thu, 22 Feb 2018 04:53:48 GMT):
Does `docker-compose up --build` work?
askmish (Thu, 22 Feb 2018 05:34:45 GMT):
@gaurang Could you share the log messages.
askmish (Thu, 22 Feb 2018 05:34:51 GMT):
a snippet of it
aczire (Thu, 22 Feb 2018 06:46:42 GMT):
@zac `docker-compose up --build` works but `docker-compose up` didn't most of the time.
gaurang (Thu, 22 Feb 2018 08:03:41 GMT):
Clipboard - February 22, 2018 1:33 PM
gaurang (Thu, 22 Feb 2018 08:03:56 GMT):
Clipboard - February 22, 2018 1:33 PM
gaurang (Thu, 22 Feb 2018 08:05:21 GMT):
Clipboard - February 22, 2018 1:35 PM
gaurang (Thu, 22 Feb 2018 08:06:51 GMT):
Clipboard - February 22, 2018 1:36 PM
gaurang (Thu, 22 Feb 2018 08:07:21 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=hLE2x4bo9BgRpYcwn) @askmish I am running two docker, and each docker running two TP threads in it. (so total four TP)
SandeepBist (Thu, 22 Feb 2018 09:03:50 GMT):
Has joined the channel.
niranjanp (Thu, 22 Feb 2018 09:25:57 GMT):
Has joined the channel.
gokhankocak (Thu, 22 Feb 2018 12:34:14 GMT):
Hello, is there a small bank transaction processor in python?
arlohosk (Thu, 22 Feb 2018 13:26:23 GMT):
Has joined the channel.
arlohosk (Thu, 22 Feb 2018 13:29:39 GMT):
Is there any concept of private transactions in sawtooth? (Fabric has channels, which is suboptimal but better than not...whole quorum for example has private transactions or ZSL integration). Is there anything like that available for saw tooth Ive missed, or is it planned?
arlohosk (Thu, 22 Feb 2018 13:29:52 GMT):
Thanks for any insight!
jsmitchell (Thu, 22 Feb 2018 13:45:28 GMT):
@gokhankocak no, only in go
gokhankocak (Thu, 22 Feb 2018 13:57:11 GMT):
How can I start the smallbank tp? I checked the docs but I could not find an answer.
VipulSingh (Thu, 22 Feb 2018 15:13:52 GMT):
Has joined the channel.
zac (Thu, 22 Feb 2018 15:20:39 GMT):
@aczire What error is is giving you?
paddolker (Thu, 22 Feb 2018 15:34:44 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=oQariJvzHmLF8q6Lm) @jsmitchell Happy to update that our team fixed this issue and successfully ran the TxnValidator and Ledger Sync
paddolker (Thu, 22 Feb 2018 15:34:55 GMT):
Happy to share our experience if anyone is interested
aleksfarrier (Thu, 22 Feb 2018 17:08:24 GMT):
Hi guys! Could somebody answer - is it possible to use own coins inside Sawtooth ащк for business transactions between participants?
aleksfarrier (Thu, 22 Feb 2018 17:08:24 GMT):
Hi guys! Could somebody answer - is it possible to use own coins inside Sawtooth for business transactions between participants?
jsmitchell (Thu, 22 Feb 2018 17:23:11 GMT):
@gokhankocak we package a docker container for it https://hub.docker.com/r/hyperledger/sawtooth-smallbank-tp-go/ otherwise you can run it out of sawtooth-core/bin/smallbank-tp-go
jsmitchell (Thu, 22 Feb 2018 17:23:26 GMT):
@paddolker nice work!
jsmitchell (Thu, 22 Feb 2018 17:26:47 GMT):
@aleksfarrier the system is a blank slate - it makes no prescriptions about what kind of data or transactions you might want to use. You can certainly define currency representations and build exchange transactions. All the functionality is totally flexible and up to you. You can take a look at the sawtooth-marketplace example application for pointers on implementation of a currency and an asset exchange model https://github.com/hyperledger/sawtooth-marketplace
paul.sitoh (Thu, 22 Feb 2018 17:28:28 GMT):
Has joined the channel.
paul.sitoh (Thu, 22 Feb 2018 17:29:20 GMT):
Any sawtooth guru who can give a summary of the protocol vs Fabric?
jsmitchell (Thu, 22 Feb 2018 17:40:31 GMT):
@paul.sitoh what do you mean by 'protocol'?
paul.sitoh (Thu, 22 Feb 2018 17:41:30 GMT):
Let's just say how sawtooth works
paul.sitoh (Thu, 22 Feb 2018 17:41:44 GMT):
how it achieve consensus
paul.sitoh (Thu, 22 Feb 2018 17:41:58 GMT):
what are the components that make up sawtooth
paul.sitoh (Thu, 22 Feb 2018 17:42:09 GMT):
etc
paul.sitoh (Thu, 22 Feb 2018 17:43:28 GMT):
For example, in Fabric, a transaction is sent, signed by peers, which then get endorsement from peers, then orderers update ledgers, etc. How does it work with Sawtooth
paul.sitoh (Thu, 22 Feb 2018 17:43:44 GMT):
How does permissioning works in Sawtooth
paul.sitoh (Thu, 22 Feb 2018 17:46:07 GMT):
How do you write smart contract, how does smart contract work, in the context of Sawtooth
paul.sitoh (Thu, 22 Feb 2018 17:46:10 GMT):
etc
nycycr (Thu, 22 Feb 2018 17:46:58 GMT):
These questions are all covered in the official doc: https://sawtooth.hyperledger.org/docs/core/releases/latest/index.html
arlohosk (Thu, 22 Feb 2018 18:00:54 GMT):
Is there any concept of private transactions in sawtooth? (Fabric has channels, which is suboptimal but better than not...whole quorum for example has private transactions or ZSL integration). Is there anything like that available for saw tooth Ive missed, or is it planned?
Thanks for any insight!
Dan (Thu, 22 Feb 2018 18:06:50 GMT):
channels are just segmented networks. you can do the same thing with sawtooth. we just don't call it something special. just only permission the required parties into that network.
grkvlt (Thu, 22 Feb 2018 18:30:07 GMT):
@aleksfarrier and with Seth it should be possible to deploy ERC-20 tokens as smart contracts directly, which is something currently being worked on
benoit.razet (Thu, 22 Feb 2018 19:46:24 GMT):
@aleksfarrier we have been prototyping a token using sawtooth. We've described some of the design choices in a document you may be interested in https://pokitdok.com/dokchain/download/interfamily-communication/
benoit.razet (Thu, 22 Feb 2018 19:54:09 GMT):
the article presents a solution that is as close as we could get to Ethereum style transactions where smart contracts are able to transfer tokens.
benoit.razet (Thu, 22 Feb 2018 19:58:34 GMT):
For a simpler overview you might want to check out https://fullmetalhealth.com/cryptoasset-framework-intels-hyperledger-sawtooth-part-one/
kyogesh91 (Thu, 22 Feb 2018 20:28:21 GMT):
Has joined the channel.
arlohosk (Thu, 22 Feb 2018 21:53:31 GMT):
@Dan for private networks, does that mean I need to spin up a new network/node for every private network I want to be part of?
arlohosk (Thu, 22 Feb 2018 21:55:13 GMT):
And what if I want to transfer an asset from 1 private network to another - how would I maintain provenance? Is there any documentation on how to do this properly? Thanks
Dan (Thu, 22 Feb 2018 22:02:22 GMT):
Yep different network for every private group just like channels. And no good way to maintain provenance across networks just like channels.
Dan (Thu, 22 Feb 2018 22:02:45 GMT):
We are working on more interesting forms of transaction confidentiality.
arlohosk (Thu, 22 Feb 2018 22:24:49 GMT):
Gotcha thank you
alberto_souza (Thu, 22 Feb 2018 23:30:10 GMT):
Hi all... I am trying to use the nonce field in the TransactionEncoder to warranty the uniqueness of the header signature... But the nonce that I specify is not the same the appears in the json returned by /blocks endpoint.. Should it be the same, no?
ls84 (Fri, 23 Feb 2018 02:51:17 GMT):
Has joined the channel.
KiranVelicheti (Fri, 23 Feb 2018 05:07:30 GMT):
Has joined the channel.
agileHua (Fri, 23 Feb 2018 06:41:39 GMT):
Has joined the channel.
mc (Fri, 23 Feb 2018 11:16:39 GMT):
I'm trying to figure out whether to go with Sawtooth or Fabric, anyone have any recommendations on how to make that decision?
nycycr (Fri, 23 Feb 2018 13:08:44 GMT):
I had the same debate. I've gone for Fabric because I don't want to be tied to the hardware of a specific vendor i.e. Intel. But on the other hand, Sawtooth is more scalable than Fabric
nycycr (Fri, 23 Feb 2018 13:09:20 GMT):
Scalable in terms of being able to handle more nodes in the network
zac (Fri, 23 Feb 2018 13:34:45 GMT):
@nycycr It should be noted that Sawtooth is not tied to PoET
zac (Fri, 23 Feb 2018 13:35:34 GMT):
One of the main features is that it's consensus mechanism is pluggable, including mid-deploy
zac (Fri, 23 Feb 2018 13:35:34 GMT):
One of the main features is that its consensus mechanism is pluggable, including mid-deploy
nycycr (Fri, 23 Feb 2018 13:35:51 GMT):
Yeah I get that. Both Fabric and Sawtooth are designed with modularity in mind. But at the moment PoET using Intel hardware is still the most mature consensus mechanism offered in Sawtooth
zac (Fri, 23 Feb 2018 13:36:45 GMT):
As far as I know you cannot change consensus mechanisms mid-stream with Fabric
nycycr (Fri, 23 Feb 2018 13:37:33 GMT):
ok. I was referring to pre-deployment though
Dan (Fri, 23 Feb 2018 13:51:25 GMT):
you can use poet without intel processors. it's only if you want full BFT that you need SGX.
Dan (Fri, 23 Feb 2018 13:53:53 GMT):
to my knowledge fabric has only one consensus option and it does not provide byzantine fault tolerance nor correctness guarantees - only total ordering of valid and invalid transactions
nycycr (Fri, 23 Feb 2018 14:06:41 GMT):
Fabric 1.0 only supports Kafka as the consensus option for now. Yes it doesn't provider BFT. But one that does is coming: https://github.com/jcs47/hyperledger-bftsmart
nycycr (Fri, 23 Feb 2018 14:06:41 GMT):
Fabric 1.0 only supports Kafka as the consensus option for now. Yes it doesn't provide BFT. But one that does is coming: https://github.com/jcs47/hyperledger-bftsmart
zac (Fri, 23 Feb 2018 14:22:16 GMT):
@Dan Is Raft BFT?
benoit.razet (Fri, 23 Feb 2018 14:39:17 GMT):
My 2 cents experience comparison between Sawtooth and Fabric. When I looked at Fabric 1.0, it was easy to grab their newbie demo and modify it to write a first smart contract. After that, the architecture of Fabric seems quite complex. Leveraging the public key infrastructure as it is baked into Fabric is a potential very cool feature, but it was just one more additional obstacle to understand the fundamentals. In comparison, in Sawtooth I find it is also easy write smart contracts, particularly because they can be written in any programming language supported. If you put aside the consensus protocol debate, the design of Sawtooth is pretty lean and it makes it easy to develop smart contract apps having in mind only the fundamentals of Blockchain.
Dan (Fri, 23 Feb 2018 15:08:22 GMT):
@zac no raft is crash fault tolerant but not byzantine fault tolerant
zac (Fri, 23 Feb 2018 15:14:18 GMT):
As far as consensus goes, seems like the first question you need to ask is whether or not you need BFT. If not, there are a number of crash fault tolerant options for both Fabric and Sawtooth, without every talking about hardware.
zac (Fri, 23 Feb 2018 15:16:58 GMT):
If you need BFT, Sawtooth has a hardware based solution today called PoET. For now it is dependent on Intel's SGX chip, but other hardware vendors might develop there own TEEs in the future. Sawtooth may also incorporate other BFT consensus mechanisms.
zac (Fri, 23 Feb 2018 15:17:43 GMT):
The nice thing about being able to switch midstream, is you can actually deploy your product today, and you don't have to take it down if you want to switch to a new consensus mechanism later.
zac (Fri, 23 Feb 2018 15:18:41 GMT):
Fabric has no BFT solution today. I don't know how far along their efforts are, but you'll have to wait to deploy until it's done.
zac (Fri, 23 Feb 2018 15:20:29 GMT):
I sure I'm coming off as a total evangelist, but PoET seems like a strange reason to choose Fabric. I'm sure there are other things Fabric does well, but PoET is an optional component that Fabric has no equivalent to anyway.
Dan (Fri, 23 Feb 2018 15:23:03 GMT):
If we are talking future features Sawtooth is looking at adding a pbft implementation for our next minor release.
The notion of consensus is also important. Sawtooth enforces consensus of shared state. Fabric enforces transaction ordering.
Beyond consensus there are a number of other features that differentiate sawtooth including...
Multi-language support
Parallel Transaction execution
Can run ethereum contracts
On-chain governance
nycycr (Fri, 23 Feb 2018 15:34:01 GMT):
some good points! Thanks! @Dan @zac
PhilippeKaizen (Fri, 23 Feb 2018 18:27:52 GMT):
Has joined the channel.
PhilippeKaizen (Fri, 23 Feb 2018 18:39:51 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=y2PoGYPgfqpNkN6WT) @FrankCastellucci
jsmitchell (Fri, 23 Feb 2018 18:49:35 GMT):
@PhilippeKaizen sorry, i don't understand what you meant to do by quoting those messages. Do you have a question?
amundson (Fri, 23 Feb 2018 19:35:20 GMT):
@alberto_souza block is not a transaction; block includes batches, batches includes transactions. if you look at the transaction you should see your nonce.
cliveb (Fri, 23 Feb 2018 21:47:09 GMT):
Has joined the channel.
cliveb (Fri, 23 Feb 2018 21:58:25 GMT):
On Sawtooth we need to generate the genesis block and use “Seth” (Sawtooth Ethereum) using SGX/PSW. Any ideas if Google GCP cloud provides SGX processors? How many CPUs? How much RAM is recommend?
Dan (Fri, 23 Feb 2018 22:01:09 GMT):
sounds like a few things conflated there.. if you are trying to use Seth there is no SGX/PSW needed. SGX is only required for full BFT protection on PoET. Seth, the ethereum virtual machine does not involve SGX at all.
Dan (Fri, 23 Feb 2018 22:03:19 GMT):
For app dev and test networks stock images on AWS have worked fine. I haven't used google cloud yet. If you drive a lot of load at each instance then you'll want more disk throughput than a small instance will provide.
FrankCastellucci (Fri, 23 Feb 2018 23:48:58 GMT):
In looking through intkey_python I am not seeing how it is authorized to access context.get_state or context.set_state but in my similar code I am getting an Authorization issue. Is there a step I am missing?
kelly_ (Sat, 24 Feb 2018 01:19:02 GMT):
@cliveb I believe IBM offers bare metal SGX instances
kelly_ (Sat, 24 Feb 2018 01:19:14 GMT):
azure has announced it, I do not believe it is in GCP now though
FrankCastellucci (Sat, 24 Feb 2018 11:08:01 GMT):
```
FrankCastellucci (Sat, 24 Feb 2018 11:08:01 GMT):
```
# The following is how I am submitting a state entry
def _set_initiate_event(context, event_initiate, uuid_key):
LOGGER.info("Key string = %s", uuid_key)
address = _make_events_key(uuid_key)
LOGGER.info("Key address = %s", address)
LOGGER.info("Value data = %s", event_initiate)
event_data = event_initiate.SerializeToString()
LOGGER.info("Serialized data = %s", event_data)
state_dict = {address: event_data}
LOGGER.info("State entry = %s", state_dict)
try:
addresses = context.set_state(
state_dict,
timeout=STATE_TIMEOUT_SEC)
# In the log I am seeing the following
hashblock-dev-events-tp | [2018-02-24 11:04:44.371 INFO handler] Key string = 4c2a7868-9ef6-4713-bc30-9d4950b49298
hashblock-dev-events-tp | [2018-02-24 11:04:44.372 INFO handler] Key address = ca2feea444c152902b6fe97fb2d8ab138fa5afcb0c12963a5171e5c80f775ebafdf3d03191ff14e6d78795aa0c50fa10300742ce99d764fc81158d14502194fc5383a6c84344c3f5441a6b02fc44c34244b9749c016f6a741499f3204def0f523a6a362ce3f52c4ec36f58920b0afe6121a2be608fdc96e6456bc5967659c2d6bdb4fc
hashblock-dev-events-tp | [2018-02-24 11:04:44.372 INFO handler] Value data = plus: "plus_public_key"
hashblock-dev-events-tp | minus: "minus_public_key"
hashblock-dev-events-tp | quantity {
hashblock-dev-events-tp | value: "\000\000\000\000\000"
hashblock-dev-events-tp | valueUnit: "\000\000"
hashblock-dev-events-tp | resourceUnit: "\000\000\000"
hashblock-dev-events-tp | }
hashblock-dev-events-tp |
hashblock-dev-events-tp | [2018-02-24 11:04:44.372 INFO handler] Serialized data = b'\n\x0fplus_public_key\x12\x10minus_public_key\x1a\x10\n\x05\x00\x00\x00\x00\x00\x12\x02\x00\x00\x1a\x03\x00\x00\x00'
hashblock-dev-events-tp | [2018-02-24 11:04:44.373 INFO handler] State entry = {'ca2feea444c152902b6fe97fb2d8ab138fa5afcb0c12963a5171e5c80f775ebafdf3d03191ff14e6d78795aa0c50fa10300742ce99d764fc81158d14502194fc5383a6c84344c3f5441a6b02fc44c34244b9749c016f6a741499f3204def0f523a6a362ce3f52c4ec36f58920b0afe6121a2be608fdc96e6456bc5967659c2d6bdb4fc': b'\n\x0fplus_public_key\x12\x10minus_public_key\x1a\x10\n\x05\x00\x00\x00\x00\x00\x12\x02\x00\x00\x1a\x03\x00\x00\x00'}
hashblock-dev-events-tp | Traceback (most recent call last):
hashblock-dev-events-tp | File "/project/sawtooth-eventchain/bin/events-tp", line 29, in
zac (Sat, 24 Feb 2018 14:50:52 GMT):
Do you know what version of the SDK you are running?
FrankCastellucci (Sat, 24 Feb 2018 15:58:56 GMT):
@zac I just refreshed from github today and am using an altered version of the `local` yaml with my TP in it
FrankCastellucci (Sat, 24 Feb 2018 15:58:56 GMT):
@zac I just refreshed from github today and am using an altered version of the `local` yaml with my TP in it and did a `bin/build_all -l python`
zac (Sat, 24 Feb 2018 16:26:54 GMT):
hrmmm
zac (Sat, 24 Feb 2018 16:27:16 GMT):
I was wondering if there was perhaps a version mismatch between the validator and the SDK
zac (Sat, 24 Feb 2018 16:27:20 GMT):
But it doesn't sound like it
zac (Sat, 24 Feb 2018 16:29:07 GMT):
Is there a reason your address is 262 characters long?
zac (Sat, 24 Feb 2018 16:29:17 GMT):
It should be 70 yeah?
FrankCastellucci (Sat, 24 Feb 2018 17:29:18 GMT):
@zac I shortened it to `ca2feed61a2a16b13456ed2d24e3b58799a16588a5702b726411b0aebc7b1165e25bb9` but same error
zac (Sat, 24 Feb 2018 17:37:01 GMT):
Yeah, I think this is a bug
zac (Sat, 24 Feb 2018 17:37:10 GMT):
https://github.com/hyperledger/sawtooth-core/blob/master/sdk/python/sawtooth_sdk/processor/context.py#L100
zac (Sat, 24 Feb 2018 17:38:33 GMT):
Entries used to be an array of objects with address and value keys
zac (Sat, 24 Feb 2018 17:38:54 GMT):
It got changed to a dict, which you see on line 87
zac (Sat, 24 Feb 2018 17:39:20 GMT):
But it looks like the `AuthorizationError` code never got changed
zac (Sat, 24 Feb 2018 17:39:45 GMT):
Which means you are getting an AuthorizationError
zac (Sat, 24 Feb 2018 17:39:53 GMT):
so, that's another problem
zac (Sat, 24 Feb 2018 17:41:15 GMT):
Do me a favor
zac (Sat, 24 Feb 2018 17:41:38 GMT):
Change line 100 there to delete the `.address`, and tell me what logs out
zac (Sat, 24 Feb 2018 17:42:01 GMT):
Should read like this:
```
addresses = [e for e in entries]
```
zac (Sat, 24 Feb 2018 17:43:28 GMT):
(you might have to rebuild or reinstall the sdk after making that change, depending on how you're set up)
FrankCastellucci (Sat, 24 Feb 2018 17:48:30 GMT):
@zac - When I changed the address generation in the TP I went back to the code that creates the transaction. It too was creating a large address as part of the TxnHeader... I made the address generator there in parity with what is in the TP and it all works.
zac (Sat, 24 Feb 2018 17:48:57 GMT):
ah
zac (Sat, 24 Feb 2018 17:49:13 GMT):
the long address was probably generating the `AuthorizationError`
zac (Sat, 24 Feb 2018 17:49:24 GMT):
which is where that bug lives
FrankCastellucci (Sat, 24 Feb 2018 17:49:55 GMT):
Well, I agree that the `e.address` from the entries seems wrong and implies a key with address property
FrankCastellucci (Sat, 24 Feb 2018 17:50:26 GMT):
which is why I didn't get the Auth error but I can see that it was trying but failed on the map iteration
FrankCastellucci (Sat, 24 Feb 2018 17:50:39 GMT):
in context.py
FrankCastellucci (Sat, 24 Feb 2018 17:52:28 GMT):
Thanks, I must have missed the 70 char length if it is written somewhere
zac (Sat, 24 Feb 2018 17:52:50 GMT):
https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/global_state.html
zac (Sat, 24 Feb 2018 17:52:56 GMT):
^ Check that out
zac (Sat, 24 Feb 2018 17:53:29 GMT):
6 hex-char namespace + 64 hex-char address
zac (Sat, 24 Feb 2018 17:54:29 GMT):
Also keep in mind the hexadecimal characters actually represent bytes, so you should think of it as 35 bytes
zac (Sat, 24 Feb 2018 17:55:17 GMT):
you can create mini-namespaces within your 64 chars, but they must always be even numbers of chars
zac (Sat, 24 Feb 2018 17:56:12 GMT):
6 + 8 + 12 + 54 = :+1:
6 + 9 + 11 + 54 = :-1:
FrankCastellucci (Sat, 24 Feb 2018 17:57:39 GMT):
Yes... I just was staying in your lexicon from earlier... and thanks for the link
gen_el (Sun, 25 Feb 2018 04:23:46 GMT):
Hi @Dan In trying to support private networks like private channels, does the participating org, who is probably in an existing network, need another node, in other to participate in the new private network?
ranvirsingh (Sun, 25 Feb 2018 05:21:23 GMT):
Has joined the channel.
puneet (Sun, 25 Feb 2018 05:49:39 GMT):
Has joined the channel.
gen_el (Sun, 25 Feb 2018 08:02:33 GMT):
Also @Dan I see Sawtooth (in the intKey TP example) does a Tx Call/Simulation and then Tx Execution subsequently. My question is, if i was calling an API (can i call an API?) in my TP function, would it be executed twice (2x) or only once at Tx Execution?
gen_el (Sun, 25 Feb 2018 09:04:18 GMT):
Also @Dan Can i use Sawtooth with an external db like couchdb, or MongoDB or PostgreSQL?
jsmitchell (Sun, 25 Feb 2018 15:41:05 GMT):
@gen_el it’s not a simulation - the first invocation is due to block publishing. The transaction is executed and the validator publishes a block which includes that transaction and the corresponding state merkle root of all the aggregate state changes for that block. The second invocation you see is during block validation, where the validator is determining if the block is valid, contains valid transactions, and whether it reaches the same state merkle root as the publisher did.
gen_el (Sun, 25 Feb 2018 15:43:23 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=kDWroBJMkfseeAHpe) @jsmitchell Thanks for clarifying. So then, does that mean the invocation (if i were calling an API) only happens once?
jsmitchell (Sun, 25 Feb 2018 15:45:01 GMT):
What API?
gen_el (Sun, 25 Feb 2018 15:46:27 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=LN8WugvNGPEjYn8nE) @jsmitchell Assuming i were calling an external API in my transaction function (i don't know if that possible in sawtooth), would that mean i will see 2 calls, one at invocation, another at state validation?
gen_el (Sun, 25 Feb 2018 15:46:27 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=LN8WugvNGPEjYn8nE) @jsmitchell Assuming i were calling an external API in my transaction function (i don't know if thats possible in sawtooth), would that mean i will see 2 calls, one at invocation, another at state validation?
jsmitchell (Sun, 25 Feb 2018 15:46:36 GMT):
@gen_el to your question on other databases, Sawtooth has a very sophisticated event system that we use to implement state delta exports. The target can be any database system you like. Here is an example in clojure: https://github.com/peterschwarz/state-export-prototype
jsmitchell (Sun, 25 Feb 2018 15:47:21 GMT):
You should not call an external API from your transaction processor.
jsmitchell (Sun, 25 Feb 2018 15:48:47 GMT):
The #1 most important rule in blockchain transactions is they must be deterministic, across space and time
gen_el (Sun, 25 Feb 2018 15:49:08 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jpdDyJNL6Pxc3hDie) @jsmitchell I get. Assuming i did (a deterministic API), would it get called twice? (Assuming we have to 1 validator.
gen_el (Sun, 25 Feb 2018 15:49:08 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=jpdDyJNL6Pxc3hDie) @jsmitchell I get. Assuming i did (a deterministic API), would it get called twice? (Assuming we have 1 validator.
jsmitchell (Sun, 25 Feb 2018 15:49:16 GMT):
Yes
gen_el (Sun, 25 Feb 2018 15:49:51 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=XKamZuFc5jgKgkrs8) @jsmitchell Okay.
gen_el (Sun, 25 Feb 2018 15:51:01 GMT):
@jsmitchell One last question, how do i make a private network? Do i have to run another validator node (for my org) for each new private network?
jsmitchell (Sun, 25 Feb 2018 15:51:23 GMT):
It’s because publishing and validation are independent activities and we specifically do not just assume that the block that we ourselves published is valid. I.e. we treat it exactly the same way as if we received the block over the network
gen_el (Sun, 25 Feb 2018 15:52:16 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=N3Q5P9DjrXK4kcNJv) @jsmitchell I understand. Validation on Fabric is different.
jsmitchell (Sun, 25 Feb 2018 15:53:01 GMT):
Yeah, if you want to segment visibility of state for different use cases, you’ll want to run different network instances
gen_el (Sun, 25 Feb 2018 15:54:25 GMT):
@jsmitchell So if i want to transact with 10 orgs and would like to segment visibility, i would have to run a validator for each peer org. I would have **9 more validator nodes**?
jsmitchell (Sun, 25 Feb 2018 15:54:52 GMT):
Doesn’t sound like a great blockchain use case
jsmitchell (Sun, 25 Feb 2018 15:55:42 GMT):
Blockchains are about consensus on shared state
gen_el (Sun, 25 Feb 2018 15:56:14 GMT):
There are use cases that have trade secrets. However, there other use cases amongst them that they are very comfortable sharing.
gen_el (Sun, 25 Feb 2018 15:57:24 GMT):
Enterprises in heavily regulated industries and secrecy. Its a headache most times.
gen_el (Sun, 25 Feb 2018 15:57:24 GMT):
Enterprises in heavily regulated sectors and secrecy. Its a headache most times.
jsmitchell (Sun, 25 Feb 2018 15:58:00 GMT):
We work with companies that have to protect trade secrets all the time. Determining what should and should not appear on the chain is a key consideration for private networks. We don’t agree that an N^2 solution is desirable.
gen_el (Sun, 25 Feb 2018 16:00:48 GMT):
Understood.
gen_el (Sun, 25 Feb 2018 16:00:48 GMT):
Understood. Thanks @jsmitchell
ra_w (Sun, 25 Feb 2018 17:42:55 GMT):
Has joined the channel.
tomislav (Sun, 25 Feb 2018 22:15:28 GMT):
Hello. I'm writing an SDK for .net core and I'd like to test it out using the intkey and xo binaries found under /bin, but I'm having trouble building them. Is there a document outlining this process? Furthermore, is there any other way I can invoke the Rest API using some existing app without writing one?
tomislav (Sun, 25 Feb 2018 22:20:40 GMT):
To be clear, I have IntKey transaction processor up and connected to the 0MQ just need to invoke transactions
Dan (Mon, 26 Feb 2018 00:33:16 GMT):
cool! everything builds using the script bin/build_all. there are flags for building just certain languages. you can probably get away with building just python: ```$ bin/build_all -l python```
Dan (Mon, 26 Feb 2018 00:42:02 GMT):
btw that build script uses the magic of docker. you'll need to have that installed. works like a charm on osx & linux. ymmv on windows.
tomislav (Mon, 26 Feb 2018 02:33:40 GMT):
Thanks @Dan that worked like a charm. I was trying to to run the script from the bin folder
OSubachev (Mon, 26 Feb 2018 06:36:06 GMT):
I'm trying to compile Sawtooth SDK for Go under Windows.
But Go cannot find various packages form sawtooth_sdk/protobuf/ path.
Actually there is no sawtooth_sdk/protobuf/ directory in repository.
What I'm missing ?
askmish (Mon, 26 Feb 2018 09:07:48 GMT):
@OSubachev How are you compiling the sdk?
Switch2Logic (Mon, 26 Feb 2018 09:27:37 GMT):
Has joined the channel.
GulshanKrish (Mon, 26 Feb 2018 09:39:16 GMT):
Has joined the channel.
GulshanKrish (Mon, 26 Feb 2018 09:39:36 GMT):
hi all....i am new to the group and i hope i get informations which i needed from here... :)
GulshanKrish (Mon, 26 Feb 2018 09:40:07 GMT):
I am really new to this Blockchain and Hyperledger.
GulshanKrish (Mon, 26 Feb 2018 09:40:43 GMT):
I would like to know more about it : Like who can join the blockchain network? on what basis they are allowed to join? Who can make the transactions?
GulshanKrish (Mon, 26 Feb 2018 09:40:51 GMT):
What are the permissions given and by whom?
GulshanKrish (Mon, 26 Feb 2018 09:40:59 GMT):
Who assigns and checks the transactions
Switch2Logic (Mon, 26 Feb 2018 09:49:13 GMT):
Good Day, I have been busy with Hyperledger Fabric for about a month now. Sawtooth Lake v1 has recently been released. I am now contemplating if I should move from Fabric to Sawtooth Lake. One of the the things that I like about Fabric is the creation of channels... Can't seem to find channels in the Sawtooth Docs does it support channels? Reason for thinking of moving over is the PoET consensus algorithm. As Kafka(zookeeper) ordering in Fabric does keep all the sheep together but the part that I am unsure of with Kafka its cons are: “While Kafka is crash fault tolerant, it is not Byzantine fault tolerant, which prevents the system from reaching agreement in the case of malicious or faulty nodes.” According to IBM. What will the implications be if the network reached agreement in the case of malicious faulty node? Can I fix this with fabric somehow? When in what use case would this be a concern? Should I move to Sawtooth Lake - what about channels then?
alcamo93 (Mon, 26 Feb 2018 12:06:24 GMT):
Has joined the channel.
alcamo93 (Mon, 26 Feb 2018 12:07:19 GMT):
VirtualBox_TechSoft_16_02_2018_10_54_01.png
alcamo93 (Mon, 26 Feb 2018 12:07:39 GMT):
Hi
I have installed cURL, Node.js, docker toolbox on Ubuntu 17.10 artful and now i am trying to build
the hyperledger sawtooth image using
docker-compose -f sawtooth-default.yaml up
This command is not at all completing. It is stuck at the last stage
sawtooth-validator-default : sawtooth: error: argument command: invalid choice: 'admin'
(choose from ''.'block','identity','keygen','peer','settings','state','transaction')
Then I execute the following: 'docker exec -it sawtooth-client-default bash'
En el root: root @ 65e6e6681382: / #
I test the validator with: curl http://rest-api:8080/blocks
It does not work
I tried waiting till long long hours but still not completing.
I tried using
docker-compose -f sawtooth-default.yaml down
docker-compose -f sawtooth-default.yaml up --force-recreate
Hi
I have installed cURL, Node.js, docker toolbox on Ubuntu 17.10 artful and now i am trying to build
the hyperledger sawtooth image using
docker-compose -f sawtooth-default.yaml up
This command is not at all completing. It is stuck at the last stage
sawtooth-validator-default : sawtooth: error: argument command: invalid choice: 'admin'
(choose from ''.'block','identity','keygen','peer','settings','state','transaction')
Then I execute the following: 'docker exec -it sawtooth-client-default bash'
En el root: root @ 65e6e6681382: / #
I test the validator with: curl http://rest-api:8080/blocks
It does not work
I tried waiting till long long hours but still not completing.
I tried using
docker-compose -f sawtooth-default.yaml down
docker-compose -f sawtooth-default.yaml up --force-recreate
regards
OSubachev (Mon, 26 Feb 2018 12:47:14 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=43xWqK2MfAQkbZt3S) @askmish I've installeded sawtooth_sdk and sawtooth_noop and try to build main.go from sawtooth_noop.
I've already solved protobuf problem.
But now I get the following error for zmq compiling:
..\github.com\pebbe\zmq4\auth.go:19:10: fatal error: zmq.h: No such file or directory
OSubachev (Mon, 26 Feb 2018 12:52:05 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=vtgtQoXPTrYmTA88Z) I've added the latest zmq.h and now after rather long compiling I get:
# github.com/pebbe/zmq4
C:/Program Files/mingw-w64/x86_64-7.2.0-posix-seh-rt_v5-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lzmq
collect2.exe: error: ld returned 1 exit status
OSubachev (Mon, 26 Feb 2018 12:52:05 GMT):
[ ](https://chat.hyperledger.org/channel/sawtooth?msg=vtgtQoXPTrYmTA88Z) I've added the latest zmq.h and now after rather long compiling I get:
# github.com/pebbe/zmq4
C:/Program Files/mingw-w64/x86_64-7.2.0-posix-seh-rt_v5-rev1/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lzmq
collect2.exe: error: ld returned 1 exit status
Is it at all possible to build Sawtooth SDK for Go under Windows ?
OSubachev (Mon, 26 Feb 2018 12:56:26 GMT):
How to create Private and Public Keys (https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/txn_submit_tutorial.html#creating-private-and-public-keys) under .NET ?
OSubachev (Mon, 26 Feb 2018 13:03:19 GMT):
@tomislav I'm also writing SDK for .NET.
How do you create Private and Public Keys under .NET ?
(https://sawtooth.hyperledger.org/docs/core/releases/latest/_autogen/txn_submit_tutorial.html#creating-private-and-public-keys)
tomislav (Mon, 26 Feb 2018 13:41:53 GMT):
@OSubachev You can generate EC key pair using BouncyCastle (http://www.bouncycastle.org/wiki/display/JA1/Elliptic+Curve+Key+Pair+Generation+and+Key+Factories)
tomislav (Mon, 26 Feb 2018 13:44:33 GMT):
Or you can also check Nethereum (https://github.com/Nethereum/Nethereum/blob/d6cba89ea00c16011b6000dff705c9f727688d51/src/Nethereum.KeyStore/KeyStoreServiceBase.cs#L61), however they use ETH json key store format, in case you need to work with the private key directly, you won't be able to I think, but you can sign and verify data
tomislav (Mon, 26 Feb 2018 13:51:39 GMT):
It looks like you're working on a client SDK. If you need a processor SDK to test with, feel free to play around with my code https://github.com/tmarkovski/sawtooth-sdk-net
zac (Mon, 26 Feb 2018 14:33:26 GMT):
@alcamo93 Sounds like you're using an old version of a docker-compose file (0.8) with 1.0 docker images. Make sure the commands in your compose file match the ones here:
https://github.com/hyperledger/sawtooth-core/blob/master/docker/compose/sawtooth-default.yaml
zac (Mon, 26 Feb 2018 14:33:53 GMT):
In particular you'll notice there is no longer a `sawtooth admin` command. It has been replaced with `sawadm`.
zac (Mon, 26 Feb 2018 15:26:48 GMT):
@Switch2Logic Others can probably speak more intelligently to the channels issue than I can, but as I understand them they are essentially sub-blockchains with stricter permissioning. While there isn't anything marketed as "channels" in Sawtooth, there would be nothing stopping you from creating as many independent blockchains as you needed, with specific permissioning on each.
MikeTD (Mon, 26 Feb 2018 16:43:29 GMT):
Has joined the channel.
gusseleet (Mon, 26 Feb 2018 17:04:47 GMT):
Has joined the channel.
gusseleet (Mon, 26 Feb 2018 17:06:35 GMT):
Hi guys! Here (https://www.hyperledger.org/projects/sawtooth/marketplace-case-study) they list a few things that are a challenge with traditional digital assets. Do someone have any more information about that?
Dan (Mon, 26 Feb 2018 17:44:00 GMT):
@agunde can you remind me of the txn flow through the system? structure checking -> signature checking -> journal? ...? Do transactions get gossiped out before they are validated?
agunde (Mon, 26 Feb 2018 17:48:19 GMT):
Receive Batch -> Check Permissions -> Check Signatures -> Check Structure -> Check if we should broadcast -> Completer -> Journal @Dan
cliveb (Mon, 26 Feb 2018 18:04:56 GMT):
What is the best doc or code to understand how Sawtooth interfaces with a distributed ledger? We are looking into message-passing to interface with content-addressable storage.
cliveb (Mon, 26 Feb 2018 18:04:56 GMT):
What is the best doc or code to understand how Sawtooth interfaces with a distributed ledger? We are looking into message-passing to interface with content-addressable storage. Is the Consensus Interface the definition? https://sawtooth.hyperledger.org/docs/core/releases/latest/architecture/journal.html#the-consensus-interface
Dan (Mon, 26 Feb 2018 18:11:31 GMT):
Thanks @agunde
jsmitchell (Mon, 26 Feb 2018 19:16:00 GMT):
Welcome! Introductory documentation is available here: https://sawtooth.hyperledger.org/docs/core/releases/latest/introduction.html
brian038 (Mon, 26 Feb 2018 19:18:30 GMT):
Has joined the channel.
tarcisiocjr (Mon, 26 Feb 2018 19:53:57 GMT):
Has joined the channel.
Dan (Mon, 26 Feb 2018 19:54:01 GMT):
@cliveb do you want sawtooth to send authoritative messages to a different system? or do you want sawtooth to consume information from an oracle?
If the former, I'd suggest looking at the state delta subscriptions https://sawtooth.hyperledger.org/docs/core/releases/latest/rest_api/state_delta_websockets.html
If the latter then check out the app dev guide: https://sawtooth.hyperledger.org/docs/core/releases/latest/app_developers_guide.html
tomislav (Mon, 26 Feb 2018 20:13:11 GMT):
https://gist.github.com/tmarkovski/9fc008fc034511bbbee93a5c4cd1a99a[ ](https://chat.hyperledger.org/channel/sawtooth?msg=Bv7yEru3GrcWo2EB7) @OSubachev
alcamo93 (Mon, 26 Feb 2018 21:40:45 GMT):
@zac If the file that I was taking had the command sawtooth admin` and it repl replaces the one you sent me with.
When I run it I get the error: yaml.scanner. scanner Error: while scannign for the next token found character '\t' that cannot start any token in ""./sawtooth-dafault.yaml" line 2 column 1 Send screen
alcamo93 (Mon, 26 Feb 2018 21:42:16 GMT):
VirtualBox_TechSoft_26_02_2018_17_20_04.png
pmettu (Mon, 26 Feb 2018 22:46:04 GMT):
Has joined the channel.
jsmitchell (Mon, 26 Feb 2018 22:54:17 GMT):
@alcamo93 per @zac's comment above, if your docker images are the wrong version, you can't just edit a file. There will be numerous changes.
jsmitchell (Mon, 26 Feb 2018 22:54:38 GMT):
You should ensure you are starting from a clean and consistent set of containers
zac (Mon, 26 Feb 2018 22:57:43 GMT):
@alcamo93 I haven't seen that error before, but at a glance it looks like your compose file is not valid YAML because it includes a tab character. I would suspect some sort of copy/paste error.
azanux (Tue, 27 Feb 2018 01:34:47 GMT):
Has joined the channel.
jamryl (Tue, 27 Feb 2018 02:52:15 GMT):
Has joined the channel.
ls84 (Tue, 27 Feb 2018 06:58:07 GMT):
@alcamo93 I have encounter this error before, I replaced all the tabs with spaces and It worked
ls84 (Tue, 27 Feb 2018 07:55:58 GMT):
Hi everyone. Is it normal that I am getting continuous log like this ```````
ls84 (Tue, 27 Feb 2018 07:55:58 GMT):
Hi everyone. Is it normal that I am getting continuous log like this ```````
ls84 (Tue, 27 Feb 2018 07:55:58 GMT):
Hi everyone. Is it normal that I am getting continuous log like this ````[2018-02-27 07:53:55.200 DEBUG interconnect] No response from 895bd3fbb7602540ce0e79839a76fb3c94fe85f20948775d4859c33bd5b3713e16763197cd673c72a91c0e091ec0613178f0952bf7498b602e4eb30851f409f9 in 10.011143207550049 seconds - beginning heartbeat pings.
[2018-02-27 07:53:55.202 DEBUG interconnect] No response from 55946bd3854e057d998ee54aca447d2d536f34a26650e0c629dca17c72a238ed45710a485cf07cb2e65cbda43e9d1c92940f26235afd03c851cba19b4292a7e4 in 10.007282733917236 seconds - beginning heartbeat pings.
[2018-02-27 07:53:55.205 DEBUG interconnect] No response from f4463436afe3455ab7887407b2e2db57ec2e932210414eeeccc4ab027176457c6f198f4bb8bfffbd4057c5998b8ba1937a40590d06dd7d8d19c57b6fc9b31480 in 10.006829738616943 seconds - beginning heartbeat pings.
[2018-02-27 07:54:05.209 DEBUG interconnect] No response from 895bd3fbb7602540ce0e79839a76fb3c94fe85f20948775d4859c33bd5b3713e16763197cd673c72a91c0e091ec0613178f0952bf7498b602e4eb30851f409f9 in 10.006008625030518 seconds - beginning heartbeat pings.
[2018-02-27 07:54:05.212 DEBUG interconnect] No response from 55946bd3854e057d998ee54aca447d2d536f34a26650e0c629dca17c72a238ed45710a485cf07cb2e65cbda43e9d1c92940f26235afd03c851cba19b4292a7e4 in 10.003559350967407 seconds - beginning heartbeat pings.
[2018-02-27 07:54:05.213 DEBUG interconnect] No response from f4463436afe3455ab7887407b2e2db57ec2e932210414eeeccc4ab027176457c6f198f4bb8bfffbd4057c5998b8ba1937a40590d06dd7d8d19c57b6fc9b31480 in 10.001600742340088 seconds - beginning heartbeat pings.
[2018-02-27 07:54:15.223 DEBUG interconnect] No response from 895bd3fbb7602540ce0e79839a76fb3c94fe85f20948775d4859c33bd5b3713e16763197cd673c72a91c0e091ec0613178f0952bf7498b602e4eb30851f409f9 in 10.010595798492432 seconds - beginning heartbeat pings.
[2018-02-27 07:54:15.226 DEBUG interconnect] No response from 55946bd3854e057d998ee54aca447d2d536f34a26650e0c629dca17c72a238ed45710a485cf07cb2e65cbda43e9d1c92940f26235afd03c851cba19b4292a7e4 in 10.008011817932129 seconds - beginning heartbeat pings.
[2018-02-27 07:54:15.228 DEBUG interconnect] No response from f4463436afe3455ab7887407b2e2db57ec2e932210414eeeccc4ab027176457c6f198f4bb8bfffbd4057c5998b8ba1937a40590d06dd7d8d19c57b6fc9b31480 in 10.00614047050476 seconds - beginning heartbeat pings.
[2018-02-27 07:54:25.236 DEBUG interconnect] No response from 895bd3fbb7602540ce0e79839a76fb3c94fe85f20948775d4859c33bd5b3713e16763197cd673c72a91c0e091ec0613178f0952bf7498b602e4eb30851f409f9 in 10.00986385345459 seconds - beginning heartbeat pings.
[2018-02-27 07:54:25.237 DEBUG interconnect] No response from 55946bd3854e057d998ee54aca447d2d536f34a26650e0c629dca17c72a238ed45710a485cf07cb2e65cbda43e9d1c92940f26235afd03c851cba19b4292a7e4 in 10.006031513214111 seconds - beginning heartbeat pings.
[2018-02-27 07:54:25.239 DEBUG interconnect] No response from f4463436afe3455ab7887407b2e2db57ec2e932210414eeeccc4ab027176457c6f198f4bb8bfffbd4057c5998b8ba1937a40590d06dd7d8d19c57b6fc9b31480 in 10.005645990371704 seconds - beginning heartbeat pings.
[2018-02-27 07:54:35.250 DEBUG interconnect] No response from 895bd3fbb7602540ce0e79839a76fb3c94fe85f20948775d4859c33bd5b3713e16763197cd673c72a91c0e091ec0613178f0952bf7498b602e4eb30851f409f9 in 10.010359525680542 seconds - beginning heartbeat pings.
[2018-02-27 07:54:35.252 DEBUG interconnect] No response from 55946bd3854e057d998ee54aca447d2d536f34a26650e0c629dca17c72a238ed45710a485cf07cb2e65cbda43e9d1c92940f26235afd03c851cba19b4292a7e4 in 10.008033037185669 seconds - beginning heartbeat pings.
[2018-02-27 07:54:35.255 DEBUG interconnect] No response from f4463436afe3455ab7887407b2e2db57ec2e932210414eeeccc4ab027176457c6f198f4bb8bfffbd4057c5998b8ba1937a40590d06dd7d8d19c57b6fc9b31480 in 10.006391763687134 seconds - beginning heartbeat pings.
[2018-02-27 07:54:45.262 DEBUG interconnect] No response from 895bd3fbb7602540ce0e79839a76fb3c94fe85f20948775d4859c33bd5b3713e16763197cd673c72a91c0e091ec0613178f0952bf7498b602e4eb30851f409f9 in 10.008602619171143 seconds - beginning heartbeat pings.
[2018-02-27 07:54:45.264 DEBUG interconnect] No response from 55946bd3854e057d998ee54aca447d2d536f34a26650e0c629dca17c72a238ed45710a485cf07cb2e65cbda43e9d1c92940f26235afd03c851cba19b4292a7e4 in 10.00626802444458 seconds - beginning heartbeat pings.
[2018-02-27 07:54:45.266 DEBUG interconnect] No response from f4463436afe3455ab7887407b2e2db57ec2e932210414eeeccc4ab027176457c6f198f4bb8bfffbd4057c5998b8ba1937a40590d06dd7d8d19c57b6fc9b31480 in 10.004461765289307 seconds - beginning heartbeat pings.````
ls84 (Tue, 27 Feb 2018 08:00:38 GMT):
Hi everyone, is it normal that I am continuously getting logs like this? but nodes seems are successfully peered
ls84 (Tue, 27 Feb 2018 08:00:46 GMT):
Screen Shot 2018-02-05 at 13.56.45.png
ls84 (Tue, 27 Feb 2018 08:01:40 GMT):
Screen Shot 2018-02-27 at 16.01.13.png
ls84 (Tue, 27 Feb 2018 08:03:07 GMT):
I config validator mostly default like this
https://github.com/ls84/sawtooth-network/blob/master/validator-0/docker-compose.yaml
alexsvecencu (Tue, 27 Feb 2018 13:03:32 GMT):
Has joined the channel.
Aleshia (Tue, 27 Feb 2018 14:59:18 GMT):
Morning guys, random Q. I'm using sawtooths documentation in my thesis but being an open source project how would I cite it? Just cite the website and github page?
rjones (Tue, 27 Feb 2018 15:37:51 GMT):
@Aleshia I'd ask your advisor what the correct citation style they want is
rjones (Tue, 27 Feb 2018 15:38:58 GMT):
@Aleshia For example: http://www.easybib.com/reference/guide/apa/website
thegreatsunra (Tue, 27 Feb 2018 18:36:14 GMT):
When we follow the instructions here to create an identity policy: https://sawtooth.hyperledger.org/docs/core/releases/latest/cli/sawtooth.html#sawtooth-identity-policy-create
...we get the following error when we try to list policies:
```
sawtooth identity policy list
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sawtooth_cli/main.py", line 174, in main_wrapper
main()
File "/usr/lib/python3/dist-packages/sawtooth_cli/main.py", line 160, in main
do_identity(args)
File "/usr/lib/python3/dist-packages/sawtooth_cli/identity.py", line 234, in do_identity
_do_identity_policy_list(args)
File "/usr/lib/python3/dist-packages/sawtooth_cli/identity.py", line 322, in _do_identity_policy_list
+ entry.key
AttributeError: type object 'Policy' has no attribute 'Type'
```
This behavior is present on 1.0.1 and nightly. Is there a workaround?
agunde (Tue, 27 Feb 2018 19:23:47 GMT):
@thegreatsunra Looks like you found a bug. I tested myself and I see the same output. I am looking into what the issue is.
agunde (Tue, 27 Feb 2018 19:34:24 GMT):
The Type attribute was changed to EntryType but this was missed when that change went in. There is now a PR up for a fix here https://github.com/hyperledger/sawtooth-core/pull/1481
VikasJakhar (Tue, 27 Feb 2018 20:05:06 GMT):
Has joined the channel.
thegreatsunra (Tue, 27 Feb 2018 20:08:23 GMT):
@agunde oh sweet, thank you! to be sure, it's a bug with the identity CLI, correct? the policies are in there, they simply aren't being returned from the `list` command?
agunde (Tue, 27 Feb 2018 20:08:40 GMT):
Correct.
thegreatsunra (Tue, 27 Feb 2018 20:09:57 GMT):
@agunde brilliant, thank you for the forthcoming fix!
agunde (Tue, 27 Feb 2018 20:10:16 GMT):
No problem.
leckronekt (Tue, 27 Feb 2018 21:06:38 GMT):
Has joined the channel.
leckronekt (Tue, 27 Feb 2018 21:12:17 GMT):
hey all
leckronekt (Tue, 27 Feb 2018 21:12:26 GMT):
don't know if this is the right place to post this
leckronekt (Tue, 27 Feb 2018 21:12:52 GMT):
but https://sawtooth.hyperledger.org/docs/core/releases/0.7/tutorial.html is referencing an old https location on github
zac (Tue, 27 Feb 2018 21:46:24 GMT):
`https://github.com/IntelLedger/sawtooth-core.git`?
zac (Tue, 27 Feb 2018 21:47:07 GMT):
Yeah, that should be `https://github.com/hyperledger/sawtooth-core.git`
zac (Tue, 27 Feb 2018 21:47:21 GMT):
For the record though, 0.7 is _very_ old at this point
zac (Tue, 27 Feb 2018 21:47:44 GMT):
I would highly recommend working with 1.0
pschwarz (Tue, 27 Feb 2018 21:47:55 GMT):
I wonder if we can put a redirect in that repo
zac (Tue, 27 Feb 2018 21:50:41 GMT):
https://github.com/blog/1508-repository-redirects-are-here
zac (Tue, 27 Feb 2018 21:50:42 GMT):
?
zac (Tue, 27 Feb 2018 21:52:00 GMT):
nevermind
zac (Tue, 27 Feb 2018 21:52:10 GMT):
this is just if you rename a repo or organization
zac (Tue, 27 Feb 2018 21:52:27 GMT):
they will automatically redirect
zac (Tue, 27 Feb 2018 21:54:24 GMT):
I am not seeing anything
rjones (Tue, 27 Feb 2018 21:55:10 GMT):
We created a hyperledger-archive org to park repos in. You could archive the old one, set up a new one which is just "click here now thanks"
rjones (Tue, 27 Feb 2018 21:55:22 GMT):
so you won't change history, etc
zac (Tue, 27 Feb 2018 22:07:22 GMT):
That's a good idea
rjones (Tue, 27 Feb 2018 22:08:30 GMT):
https://github.com/hyperledger-archives for instance
rjones (Tue, 27 Feb 2018 22:08:50 GMT):
part of the move is stripping all the tokens and collaborators, integrations, etc.
rjones (Tue, 27 Feb 2018 22:09:31 GMT):
(and set the archive option)
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Step Four: Build Docker Images buntu@ip-172-31-46-25:~/sawtooth$ cd sawtooth-core
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ ls
adm BUILD.md cli consensus docker families integration LICENSE perf README.md sdk utility VERSION
bin ci COMMITTERS CONTRIBUTING.md docs images Jenkinsfile NOTICES protos rest_api signing validator
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/build?buildargs=%7B%22HTTPS_PROXY%22%3A%22http%3A%2F%2F13.58.187.186%22%2C%22HTTP_PROXY%22%3A%22http%3A%2F%2F13.58.187.186%22%2C%22http_proxy%22%3A%22%22%2C%22https_proxy%22%3A%22%22%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=sawtooth-dev-cxx&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=5590ea6eb30131cface6045a0418989b11eb6c141c3d364631f649c8dff8c9e6&shmsize=0&t=sawtooth-dev-cxx&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Step Four: Build Docker Images buntu@ip-172-31-46-25:~/sawtooth$ cd sawtooth-core
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ ls
adm BUILD.md cli consensus docker families integration LICENSE perf README.md sdk utility VERSION
bin ci COMMITTERS CONTRIBUTING.md docs images Jenkinsfile NOTICES protos rest_api signing validator
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/build?buildargs=%7B%22HTTPS_PROXY%22%3A%22http%3A%2F%2F13.58.187.186%22%2C%22HTTP_PROXY%22%3A%22http%3A%2F%2F13.58.187.186%22%2C%22http_proxy%22%3A%22%22%2C%22https_proxy%22%3A%22%22%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=sawtooth-dev-cxx&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=5590ea6eb30131cface6045a0418989b11eb6c141c3d364631f649c8dff8c9e6&shmsize=0&t=sawtooth-dev-cxx&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Working thru standing up Sawtooth on AWS. Stumped at - Step Four: Build Docker Images. Hints or help appreciated?
buntu@ip-172-31-46-25:~/sawtooth$ cd sawtooth-core
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ ls
adm BUILD.md cli consensus docker families integration LICENSE perf README.md sdk utility VERSION
bin ci COMMITTERS CONTRIBUTING.md docs images Jenkinsfile NOTICES protos rest_api signing validator
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/build?buildargs=%7B%22HTTPS_PROXY%22%3A%22http%3A%2F%2F13.58.187.186%22%2C%22HTTP_PROXY%22%3A%22http%3A%2F%2F13.58.187.186%22%2C%22http_proxy%22%3A%22%22%2C%22https_proxy%22%3A%22%22%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=sawtooth-dev-cxx&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=5590ea6eb30131cface6045a0418989b11eb6c141c3d364631f649c8dff8c9e6&shmsize=0&t=sawtooth-dev-cxx&target=&ulimits=null: dial unix /var/run/docker.sock: connect: permission denied
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Working thru standing up Sawtooth on AWS. Stumped at - Step Four: Build Docker Images. Hints or help appreciated?
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Working thru standing up Sawtooth on AWS. Stumped at - Step Four: Build Docker Images. Hints or help appreciated?
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Working thru standing up Sawtooth on AWS. Stumped at - Step Four: Build Docker Images. Hints or help appreciated?
https://github.com/hyperledger/sawtooth-core/blob/master/BUILD.md
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Working thru standing up Sawtooth on AWS. Stumped at - Step Four: Build Docker Images. Hints or help appreciated?
https://github.com/hyperledger/sawtooth-core/blob/master/BUILD.md
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
//I tried
cliveb (Tue, 27 Feb 2018 22:37:55 GMT):
Working thru standing up Sawtooth on AWS. Stumped at - Step Four: Build Docker Images. Hints or help appreciated?
https://github.com/hyperledger/sawtooth-core/blob/master/BUILD.md
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$ sudo bin/build_all
[--- Build mode: mounted ---]
[--- Building cxx ---]
[--- Building sawtooth-dev-cxx from docker/sawtooth-dev-cxx ---]
Sending build context to Docker daemon 355.8kB
Step 1/9 : FROM ubuntu:xenial
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
ubuntu@ip-172-31-46-25:~/sawtooth/sawtooth-core$
//I tried the following test:
ubuntu@ip-172-31-46-25:~$ sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
ubuntu@ip-172-31-46-25:~$ sudo docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.
ubuntu@ip-172-31-46-25:~$
vitorqshr (Tue, 27 Feb 2018 23:13:59 GMT):
Has joined the channel.
vitorqshr (Tue, 27 Feb 2018 23:14:01 GMT):
anyone know anything about migration? Ex: I have a network running on Fabric but want to change it to Sawtooth, is there any way to migrate the data?
tomislav (Wed, 28 Feb 2018 00:10:43 GMT):
I'm testing a .net sdk against my docker instance. I keep getting "header signature validation failed". I'm not entirely sure why it fails, it seems I have formatted and followed the documentation as well as the studied the javascript sdk workflow to create this. Can someone shed some light if I'm doing anything wrong? The code is very self explanatory and simple. I tested the Signer logic against the javascript sdk (sign using .net, verify using js) and it worked fine. Here's the call I'm making - this should be readable even for non-c# devs.
https://pastebin.com/fdEFkbYX
tomislav (Wed, 28 Feb 2018 00:12:37 GMT):
And the signer code for reference is here https://github.com/tmarkovski/sawtooth-sdk-net/tree/master/Client
kelly_ (Wed, 28 Feb 2018 00:31:39 GMT):
@Dan ^^^
kelly_ (Wed, 28 Feb 2018 00:31:52 GMT):
hey @tomislav do you know what format your signature is in?
kelly_ (Wed, 28 Feb 2018 00:32:23 GMT):
oh you said you verified it with the JS example so that should be right
cliveb (Wed, 28 Feb 2018 01:04:27 GMT):
@tomislav using JS try ES6 'use strict' mode