Merge branch 'master' into unitdiff
This commit is contained in:
@@ -170,10 +170,6 @@ Receives a transaction, modifying the slate accordingly (which can then be sent
|
||||
* **Sample Call:**
|
||||
|
||||
```javascript
|
||||
var coinbase_data = {
|
||||
fees: 0,
|
||||
height: 123456
|
||||
}
|
||||
$.ajax({
|
||||
url: "/v1/wallet/foreign/build_coinbase",
|
||||
dataType: "json",
|
||||
|
||||
+77
-16
@@ -390,10 +390,6 @@ Send a transaction either directly by http or file (then display the slate)
|
||||
* **Sample Call:**
|
||||
|
||||
```javascript
|
||||
var coinbase_data = {
|
||||
fees: 0,
|
||||
height: 123456
|
||||
}
|
||||
$.ajax({
|
||||
url: "/v1/wallet/owner/issue_send_tx",
|
||||
dataType: "json",
|
||||
@@ -506,10 +502,6 @@ Builds the complete transaction and sends it to a grin node for propagation.
|
||||
* **Sample Call:**
|
||||
|
||||
```javascript
|
||||
var coinbase_data = {
|
||||
fees: 0,
|
||||
height: 123456
|
||||
}
|
||||
$.ajax({
|
||||
url: "/v1/wallet/owner/finalize_tx",
|
||||
dataType: "json",
|
||||
@@ -555,10 +547,6 @@ Roll back a transaction and all associated outputs with a given transaction id T
|
||||
* **Sample Call:**
|
||||
|
||||
```javascript
|
||||
var coinbase_data = {
|
||||
fees: 0,
|
||||
height: 123456
|
||||
}
|
||||
$.ajax({
|
||||
url: "/v1/wallet/owner/cancel_tx?id=3",
|
||||
dataType: "json",
|
||||
@@ -569,6 +557,83 @@ Roll back a transaction and all associated outputs with a given transaction id T
|
||||
});
|
||||
```
|
||||
|
||||
### POST Post Tx
|
||||
|
||||
Push new transaction to the connected node transaction pool. Add `?fluff` at the end of the URL to bypass Dandelion relay.
|
||||
|
||||
* **URL**
|
||||
|
||||
/v1/wallet/owner/post_tx
|
||||
|
||||
* **Method:**
|
||||
|
||||
`POST`
|
||||
|
||||
* **URL Params**
|
||||
|
||||
None
|
||||
|
||||
* **Data Params**
|
||||
|
||||
**Required:** A transaction slate in JSON.
|
||||
|
||||
| Field | Type | Description |
|
||||
|:----------------------|:---------|:--------------------------------------------------------------------------|
|
||||
| num_participants | number | The number of participants intended to take part in this transaction |
|
||||
| id | number | Unique transaction ID, selected by sender |
|
||||
| tx | object | The core transaction data (inputs, outputs, kernels and kernel offset) |
|
||||
| - offset | []number | The kernel "offset" k2, excess is k1G after splitting the key k = k1 + k2 |
|
||||
| - body | object | The transaction body - inputs/outputs/kernels |
|
||||
| - - inputs | []object | List of inputs spent by the transaction |
|
||||
| - - - features | object | The features of the output being spent |
|
||||
| - - - - bits | number | Representation of the features in bits |
|
||||
| - - - commit | []number | The commit referencing the output being spent |
|
||||
| - - outputs | []object | List of outputs the transaction produces |
|
||||
| - - - features | object | Options for an output's structure or use |
|
||||
| - - - - bits | number | Representation of the features in bits |
|
||||
| - - - commit | []number | The homomorphic commitment representing the output amount |
|
||||
| - - - proof | []number | A proof that the commitment is in the right range |
|
||||
| - - kernels | []object | List of kernels that make up this transaction (usually a single kernel) |
|
||||
| - - - features | object | Options for a kernel's structure or use |
|
||||
| - - - - bits | number | Representation of the features in bits |
|
||||
| - - - fee | number | Fee originally included in the transaction this proof is for |
|
||||
| - - - lock_height | number | The max lock_height of all inputs to this transaction |
|
||||
| - - - excess | []number | Remainder of the sum of all transaction commitments |
|
||||
| - - - excess_sig | []number | The signature proving the excess is a valid public key (signs the tx fee) |
|
||||
| amount | number | Base amount (excluding fee) |
|
||||
| fee | number | Fee amount |
|
||||
| height | number | Block height for the transaction |
|
||||
| lock_height | number | Lock height |
|
||||
| participant_data | object | Participant data |
|
||||
| - id | number | Id of participant in the transaction. (For now, 0=sender, 1=rec) |
|
||||
| - public_blind_excess | []number | Public key corresponding to private blinding factor |
|
||||
| - public_nonce | []number | Public key corresponding to private nonce |
|
||||
| - part_sig | []number | Public partial signature |
|
||||
|
||||
* **Success Response:**
|
||||
|
||||
* **Code:** 200
|
||||
|
||||
* **Error Response:**
|
||||
|
||||
* **Code:** 400
|
||||
|
||||
* **Sample Call:**
|
||||
|
||||
```javascript
|
||||
$.ajax({
|
||||
url: "/v1/wallet/owner/post_tx",
|
||||
dataType: "json",
|
||||
type : "POST",
|
||||
success : function(r) {
|
||||
console.log(r);
|
||||
},
|
||||
data: {
|
||||
file: tx.json
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### POST Issue Burn Tx
|
||||
|
||||
Issue a burn TX.
|
||||
@@ -600,10 +665,6 @@ Issue a burn TX.
|
||||
* **Sample Call:**
|
||||
|
||||
```javascript
|
||||
var coinbase_data = {
|
||||
fees: 0,
|
||||
height: 123456
|
||||
}
|
||||
$.ajax({
|
||||
url: "/v1/wallet/owner/issue_burn_tx",
|
||||
dataType: "json",
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# Wallet TLS setup
|
||||
|
||||
## What you need
|
||||
* A server with a static IP address (eg `3.3.3.3`)
|
||||
* A domain name ownership (`example.com`)
|
||||
* DNS configuration for this IP (`grin1.example.com` -> `3.3.3.3`)
|
||||
|
||||
If you don't have a static IP you may want to consider using services like DynDNS which support dynamic IP resolving, this case is not covered by this guide, but all the next steps are equally applicable.
|
||||
|
||||
If you don't have a domain name there is a possibility to get a TLS certificate for your IP, but you have to pay for that (so perhaps it's cheaper to buy a domain name) and it's rarely supported by certificate providers.
|
||||
|
||||
## I have a TLS certificate already
|
||||
Uncomment and update the following lines in wallet config (by default `~/.grin/grin-wallet.toml`):
|
||||
|
||||
```
|
||||
tls_certificate_file = "/path/to/my/cerificate/fullchain.pem"
|
||||
tls_certificate_key = "/path/to/my/cerificate/privkey.pem"
|
||||
```
|
||||
|
||||
Make sure your user has read access to the files (see below for how to do it). Restart wallet. When you (or someone else) send grins to this wallet the destination (`-d` option) must start with `https://`, not with `http://`.
|
||||
|
||||
## I don't have a TLS certificate
|
||||
You can get it for free from [Let's Encrypt](https://letsencrypt.org/). To simplify the process we need `certbot`.
|
||||
|
||||
### Install certbot
|
||||
Go to [Certbot home page](https://certbot.eff.org/), choose I'm using `None of the above` and your OS (eg `Ubuntu 18.04` which will be used as an example). You will be redirected to a page with instructions like [steps for Ubuntu](https://certbot.eff.org/lets-encrypt/ubuntubionic-other). Follow instructions from `Install` section. As result you should have `certbot` installed.
|
||||
|
||||
### Obtain certificate
|
||||
If you have experince with `certboot` feel free to use any type of challenge. This guide covers the simplest case of HTTP challenge. For this you need to have a web server listening on port `80`, which requires running it as root in the simplest case. We will use the server provided by certbot. **Make sure you have port 80 open**
|
||||
|
||||
```
|
||||
sudo certbot certonly --standalone -d grin1.example.com
|
||||
```
|
||||
|
||||
It will ask you some questions, as result you should see something like:
|
||||
|
||||
```
|
||||
Congratulations! Your certificate and chain have been saved at:
|
||||
/etc/letsencrypt/live/grin1.example.com/fullchain.pem
|
||||
Your key file has been saved at:
|
||||
/etc/letsencrypt/live/grin1.example.com/privkey.pem
|
||||
Your cert will expire on 2019-01-16. To obtain a new or tweaked
|
||||
version of this certificate in the future, simply run certbot
|
||||
again. To non-interactively renew *all* of your certificates, run
|
||||
"certbot renew"
|
||||
```
|
||||
|
||||
### Change permissions
|
||||
Now you have the certificate files but only root user can read it. We run grin as `ubuntu` user. There are different scenarios how to fix it, the simplest one is to create a group which will have access to `/etc/letsencrypt` directory and add our user to this group.
|
||||
|
||||
```
|
||||
$ sudo groupadd tls-cert`
|
||||
$ sudo usermod -a -G tls-cert ubuntu`
|
||||
$ chgrp -R tls-cert /etc/letsencrypt`
|
||||
$ chmod -R g=rX /etc/letsencrypt`
|
||||
$ sudo chmod 2755 /etc/letsencrypt`
|
||||
```
|
||||
|
||||
The last step is needed for renewal, it makes sure that all new files will have the same group ownership.
|
||||
|
||||
### Update wallet config
|
||||
Refer to `I have a TLS certificate already` because you have it now. Use the folowing values:
|
||||
|
||||
```
|
||||
tls_certificate_file = "/etc/letsencrypt/live/grin1.example.com/fullchain.pem"
|
||||
tls_certificate_key = "/etc/letsencrypt/live/grin1.example.com/privkey.pem"
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user