Skip to content
Snippets Groups Projects
Commit ecd2194c authored by adorda's avatar adorda
Browse files

docker-compose mejorados, README actualizado

parent 40ef4df1
No related branches found
No related tags found
1 merge request!1Development
......@@ -10,7 +10,7 @@ Python 3.5>= ó docker
### Instalación para desarrollo con virtual host
Crear virtual host y luego ejecutar los sig comandos
Crear virtual env (venv) y luego ejecutar los sig comandos
```sh
cd /carpeta/del/proyecto
pip install -r requirements.txt
......@@ -24,28 +24,28 @@ pip install coverage
pip install ipython
```
### Instalación para desarrollo con docker y pycharm
### Instalación para desarrollo con docker
```sh
cd /carpeta/del/proyecto/
docker build -t trazabilidad .
docker run --rm --name migrate -v $(pwd):/opt/project -w /opt/project trazabilidad python manage.py migrate
docker-compose -f docker-compose.yml up -d
```
En pycharm ir a Settings-> Project Interpreter y elegir Remote Python 3.5 Docker
Esto levantará la aplicación con un usuario superadmin "admin" con contraseña "Clave123!"
#### Si se está usando PyCharm
Ir a Settings-> Project Interpreter y elegir Remote Python 3.5 Docker
Esperar a que se carguen los skeletons
En Run/Debug Configurations agregar configuracion de django server con el intérprete de docker del proyecto, y en Host poner 0.0.0.0 y en Port 8000
En la carpeta trazabilidad/ hacer un local_settings.py que puede ser copia o link simbólico de los que vienen de ejemplo
Optativo:
```sh
docker-compose up -d
```
Los tests de la aplicación dapp son de integración y la idea es que corran sobre ganache para que ejecuten más rápido, ganache viene en el docker-compose, pero no hace falta para correr la aplicación
### Instalación productiva
Crear virtual host y luego ejecutar los sig comandos
Crear virtual env (venv) y luego ejecutar los sig comandos
```sh
cd /carpeta/del/proyecto
pip install -r requirements.txt
......@@ -69,7 +69,7 @@ cd /carpeta/de/aplicacion
python manage.py unlock_account
```
Si el smart contract del negocio no está deployado:
#### Si el smart contract del negocio no está deployado:
- Loggear en el admin
- Ir a Config Constance
......@@ -87,6 +87,14 @@ python manage.py deployar_trazabilidad
```
Opcional: dar el gas a usar cuando el prompt lo pida
Opcional: si se tiene docker instalado, se puede correr el siguiente comando
```sh
cd /carpeta/del/proyecto
docker-compose -f deploy-smart-contract-docker-compose.yml up -d
docker-compose -f deploy-smart-contract-docker-compose.yml logs --tail 2
```
El log que menciona Contract address: 0xalgunaddress
- De nuevo en el admin, en Config Constance
En la sección Contract Info cargar
- contract address con el output del comando deployar_trazabilidad
......
version: '3.1'
services:
deployment:
build:
dockerfile: Dockerfile
context: .
image: trazabilidad:dev
container_name: trazabilidad-deploy-smart-contract
volumes:
- .:/opt/project
command: python manage.py deployar_trazabilidad --wait --gas ${GAS_LIMIT:-4500000}
environment:
DEBUG: ${DEBUG:-1}
SECRET_KEY: ${SECRET_KEY:-secret}
\ No newline at end of file
......@@ -3,6 +3,45 @@ services:
blockchain:
image: trufflesuite/ganache-cli:latest
ports:
- "8545:8545"
- ${GANACHE_RPC_PORT:-8545}:8545
command: '-b 1'
container_name: ganache
api:
build:
dockerfile: Dockerfile
context: .
image: trazabilidad:dev
container_name: trazabilidad-api
volumes:
- .:/opt/project
ports:
- ${API_PORT:-8080}:8000
command: python manage.py runserver 0.0.0.0:8000
environment:
DEBUG: ${DEBUG:-1}
SECRET_KEY: ${SECRET_KEY:-secret}
depends_on:
- migrations
migrations:
build:
dockerfile: Dockerfile
context: .
image: trazabilidad:dev
container_name: trazabilidad-migrations
command: python manage.py migrate --noinput
volumes:
- .:/opt/project
environment:
DEBUG: ${DEBUG:-1}
SECRET_KEY: ${SECRET_KEY:-secret}
superuser:
depends_on:
- migrations
image: trazabilidad:dev
container_name: trazabilidad-superuser
command: python manage.py loaddata superuser
volumes:
- .:/opt/project
environment:
DEBUG: ${DEBUG:-1}
SECRET_KEY: ${SECRET_KEY:-secret}
\ No newline at end of file
[
{
"constant": false,
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "participant",
"type": "address"
}
],
"name": "addParticipantRole",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "string",
"name": "message",
"type": "string"
},
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "addWorkflowStep",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "trackingAddress",
"type": "address"
},
{
"internalType": "bytes32",
"name": "hashEstado",
"type": "bytes32"
},
{
"internalType": "string",
"name": "message",
"type": "string"
},
{
"internalType": "bytes32",
"name": "_nextRole",
"type": "bytes32"
}
],
"name": "forward",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "trackingAddress",
"type": "address"
},
{
"internalType": "bytes32",
"name": "hashEstado",
"type": "bytes32"
}
],
"name": "forwardWorkflow",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "trackCount",
"type": "uint256"
}
],
"name": "PageReached",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "participant",
"type": "address"
}
],
"name": "ParticipantAdded",
"type": "event"
},
{
"constant": false,
"inputs": [
{
"internalType": "bytes32",
"name": "trackingId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "hashEstado",
"type": "bytes32"
},
{
"internalType": "string",
"name": "message",
"type": "string"
},
{
"internalType": "bytes32",
"name": "_nextRole",
"type": "bytes32"
}
],
"name": "startTrack",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "bytes32",
"name": "trackingId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "hashEstado",
"type": "bytes32"
}
],
"name": "startTrackWorkflow",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "trackingId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "hashEstado",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "trackingAddress",
"type": "address"
}
],
"name": "TrackingEnded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "trackingId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "hashEstado",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "trackingAddress",
"type": "address"
}
],
"name": "TrackingStarted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "trackingId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "hashEstado",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "trackingAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "string",
"name": "message",
"type": "string"
}
],
"name": "UnitMoved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "string",
"name": "message",
"type": "string"
}
],
"name": "WorkflowStepAdded",
"type": "event"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "trackingAddress",
"type": "address"
}
],
"name": "currentHashState",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "trackingAddress",
"type": "address"
}
],
"name": "currentPosition",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "add",
"type": "address"
}
],
"name": "isOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "participant",
"type": "address"
}
],
"name": "isParticipant",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "isRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "participant",
"type": "address"
},
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "participantHasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "trackingAddress",
"type": "address"
},
{
"internalType": "address",
"name": "participant",
"type": "address"
}
],
"name": "participantIsAuthorizedForNextStep",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "trackingAddress",
"type": "address"
},
{
"internalType": "address",
"name": "participant",
"type": "address"
}
],
"name": "participantIsAuthorizedForNextStepWorkflow",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "participant",
"type": "address"
}
],
"name": "participantIsAuthorizedForStart",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "workflowIsDefined",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "step",
"type": "uint256"
}
],
"name": "workflowStepMessage",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
]
\ No newline at end of file
608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006004819055506000600581905550612b67806100706000396000f3fe6080604052600436106100fe5760003560e01c806375d9a47411610095578063e3f70da811610064578063e3f70da81461076d578063e45e3838146107e0578063eefb1faa1461083b578063f0d24eab14610873578063fe6bccbf146108dc576100fe565b806375d9a4741461059e578063929066f5146105cd578063af34c93214610636578063cd12eb571461069b576100fe565b80632f54bf6e116100d15780632f54bf6e1461036b57806334ff7b5e146103d4578063514de356146104ba578063713a1b0214610543576100fe565b806305cbccc51461010357806311f944e11461016857806326fcc391146101bb57806329d47b5b146102b7575b600080fd5b34801561010f57600080fd5b506101526004803603602081101561012657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610965565b6040518082815260200191505060405180910390f35b34801561017457600080fd5b506101a16004803603602081101561018b57600080fd5b81019080803590602001909291905050506109f4565b604051808215151515815260200191505060405180910390f35b3480156101c757600080fd5b506102b5600480360360808110156101de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561022557600080fd5b82018360208201111561023757600080fd5b8035906020019184600183028401116401000000008311171561025957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610a16565b005b3480156102c357600080fd5b506102f0600480360360208110156102da57600080fd5b8101908080359060200190929190505050610e77565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610330578082015181840152602081019050610315565b50505050905090810190601f16801561035d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037757600080fd5b506103ba6004803603602081101561038e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f2f565b604051808215151515815260200191505060405180910390f35b3480156103e057600080fd5b506104b8600480360360808110156103f757600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561042857600080fd5b82018360208201111561043a57600080fd5b8035906020019184600183028401116401000000008311171561045c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050610f88565b005b3480156104c657600080fd5b50610529600480360360408110156104dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061124c565b604051808215151515815260200191505060405180910390f35b34801561054f57600080fd5b5061059c6004803603604081101561056657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112fb565b005b3480156105aa57600080fd5b506105b361188a565b604051808215151515815260200191505060405180910390f35b3480156105d957600080fd5b5061061c600480360360208110156105f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611897565b604051808215151515815260200191505060405180910390f35b34801561064257600080fd5b506106856004803603602081101561065957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e5565b6040518082815260200191505060405180910390f35b3480156106a757600080fd5b5061076b600480360360408110156106be57600080fd5b81019080803590602001906401000000008111156106db57600080fd5b8201836020820111156106ed57600080fd5b8035906020019184600183028401116401000000008311171561070f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611977565b005b34801561077957600080fd5b506107c66004803603604081101561079057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611baf565b604051808215151515815260200191505060405180910390f35b3480156107ec57600080fd5b506108396004803603604081101561080357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c1a565b005b6108716004803603604081101561085157600080fd5b810190808035906020019092919080359060200190929190505050611e56565b005b34801561087f57600080fd5b506108c26004803603602081101561089657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120f8565b604051808215151515815260200191505060405180910390f35b3480156108e857600080fd5b5061094b600480360360408110156108ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612121565b604051808215151515815260200191505060405180910390f35b6000808290508073ffffffffffffffffffffffffffffffffffffffff16634eacad8c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109b157600080fd5b505afa1580156109c5573d6000803e3d6000fd5b505050506040513d60208110156109db57600080fd5b8101908080519060200190929190505050915050919050565b6000806002600084815260200190815260200160002060010154119050919050565b610a208432612121565b610a92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f456c20656d69736f72206e6f2065737461206175746f72697a61646f0000000081525060200191505060405180910390fd5b60008490508073ffffffffffffffffffffffffffffffffffffffff166393468b8585846040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610af257600080fd5b505af1158015610b06573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16634eacad8c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6757600080fd5b505afa158015610b7b573d6000803e3d6000fd5b505050506040513d6020811015610b9157600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166348cbb2fc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610be857600080fd5b505afa158015610bfc573d6000803e3d6000fd5b505050506040513d6020811015610c1257600080fd5b81019080805190602001909291905050507f1e184bb6181c1c790603e5998d71b51a12ad35475a7ff0adf1725a519dc67280866040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c85578082015181840152602081019050610c6a565b50505050905090810190601f168015610cb25780820380516001836020036101000a031916815260200191505b509250505060405180910390a46000801b821415610e70578473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16634eacad8c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2757600080fd5b505afa158015610d3b573d6000803e3d6000fd5b505050506040513d6020811015610d5157600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166348cbb2fc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610da857600080fd5b505afa158015610dbc573d6000803e3d6000fd5b505050506040513d6020811015610dd257600080fd5b81019080805190602001909291905050507f483233f9bb251d09c04f1ca5982b8654abee3140cebda60dd46f42ddad85f00160405160405180910390a48073ffffffffffffffffffffffffffffffffffffffff16630944a2d26040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e5757600080fd5b505af1158015610e6b573d6000803e3d6000fd5b505050505b5050505050565b6060600360008381526020019081526020016000206000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f235780601f10610ef857610100808354040283529160200191610f23565b820191906000526020600020905b815481529060010190602001808311610f0657829003601f168201915b50505050509050919050565b60008173ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b610f9061188a565b15611003576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f48617920776f726b666c6f7720646566696e69646f000000000000000000000081525060200191505060405180910390fd5b6000848483604051611014906121ba565b808481526020018381526020018281526020019350505050604051809103906000f080158015611048573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1684867fd8c7d1745e98580de3fe56726a7251ef50f8a9abbb20a0e3c09a718910be691060405160405180910390a48073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16634eacad8c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110ed57600080fd5b505afa158015611101573d6000803e3d6000fd5b505050506040513d602081101561111757600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166348cbb2fc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561116e57600080fd5b505afa158015611182573d6000803e3d6000fd5b505050506040513d602081101561119857600080fd5b81019080805190602001909291905050507f1e184bb6181c1c790603e5998d71b51a12ad35475a7ff0adf1725a519dc67280866040518080602001828103825283818151815260200191508051906020019080838360005b8381101561120b5780820151818401526020810190506111f0565b50505050905090810190601f1680156112385780820380516001836020036101000a031916815260200191505b509250505060405180910390a45050505050565b6000808390506112f283600360008473ffffffffffffffffffffffffffffffffffffffff1663fe72205a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a057600080fd5b505afa1580156112b4573d6000803e3d6000fd5b505050506040513d60208110156112ca57600080fd5b8101908080519060200190929190505050815260200190815260200160002060010154611baf565b91505092915050565b8132611307828261124c565b611379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f456c20656d69736f72206e6f2065737461206175746f72697a61646f0000000081525060200191505060405180910390fd5b60008490508073ffffffffffffffffffffffffffffffffffffffff1663b4dcff85856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156113d157600080fd5b505af11580156113e5573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16634eacad8c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561144657600080fd5b505afa15801561145a573d6000803e3d6000fd5b505050506040513d602081101561147057600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166348cbb2fc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c757600080fd5b505afa1580156114db573d6000803e3d6000fd5b505050506040513d60208110156114f157600080fd5b81019080805190602001909291905050507f1e184bb6181c1c790603e5998d71b51a12ad35475a7ff0adf1725a519dc672806003600060018773ffffffffffffffffffffffffffffffffffffffff1663fe72205a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561156f57600080fd5b505afa158015611583573d6000803e3d6000fd5b505050506040513d602081101561159957600080fd5b810190808051906020019092919050505003815260200190815260200160002060000160405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156116455780601f1061161a57610100808354040283529160200191611645565b820191906000526020600020905b81548152906001019060200180831161162857829003601f168201915b50509250505060405180910390a46004548173ffffffffffffffffffffffffffffffffffffffff1663fe72205a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561169c57600080fd5b505afa1580156116b0573d6000803e3d6000fd5b505050506040513d60208110156116c657600080fd5b81019080805190602001909291905050501415611883578473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16634eacad8c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561173a57600080fd5b505afa15801561174e573d6000803e3d6000fd5b505050506040513d602081101561176457600080fd5b81019080805190602001909291905050508273ffffffffffffffffffffffffffffffffffffffff166348cbb2fc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117bb57600080fd5b505afa1580156117cf573d6000803e3d6000fd5b505050506040513d60208110156117e557600080fd5b81019080805190602001909291905050507f483233f9bb251d09c04f1ca5982b8654abee3140cebda60dd46f42ddad85f00160405160405180910390a48073ffffffffffffffffffffffffffffffffffffffff16630944a2d26040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b505050505b5050505050565b6000806004541415905090565b600080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154119050919050565b60008082905060018173ffffffffffffffffffffffffffffffffffffffff1663fe72205a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561193357600080fd5b505afa158015611947573d6000803e3d6000fd5b505050506040513d602081101561195d57600080fd5b810190808051906020019092919050505003915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612ae36021913960400191505060405180910390fd5b6000600260008381526020019081526020016000206001015411611aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4e6f20686179206175746f72697a61646f7320706172612065736520726f6c0081525060200191505060405180910390fd5b6040518060400160405280838152602001828152506003600060045481526020019081526020016000206000820151816000019080519060200190611aee9291906121c7565b5060208201518160010155905050600460008154809291906001019190505550807f9e976c4b5693ec0d8a7c7d73448b277f055650e4e493837ace59628e9dd9c37c836040518080602001828103825283818151815260200191508051906020019080838360005b83811015611b71578082015181840152602081019050611b56565b50505050905090810190601f168015611b9e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b60006002600083815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612ae36021913960400191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600084815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000815480929190600101919050555060016002600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060026000838152602001908152602001600020600101600081548092919060010191905055508073ffffffffffffffffffffffffffffffffffffffff16827f52e037d0df9b71811fac105fdf26f35639fcf1d1ad43844f6022ddc5839f5e1b60405160405180910390a35050565b32611e60816120f8565b611eb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180612b04602f913960400191505060405180910390fd5b611ebd61188a565b611f2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4e6f2068617920776f726b666c6f7720646566696e69646f000000000000000081525060200191505060405180910390fd5b60008383604051611f3f90612247565b8083815260200182815260200192505050604051809103906000f080158015611f6c573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1683857fd8c7d1745e98580de3fe56726a7251ef50f8a9abbb20a0e3c09a718910be691060405160405180910390a48073ffffffffffffffffffffffffffffffffffffffff1683857f1e184bb6181c1c790603e5998d71b51a12ad35475a7ff0adf1725a519dc6728060036000808152602001908152602001600020600001604051808060200182810382528381815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561208d5780601f106120625761010080835404028352916020019161208d565b820191906000526020600020905b81548152906001019060200180831161207057829003601f168201915b50509250505060405180910390a46005600081548092919060010191905055506000600a600554816120bb57fe5b0614156120f2576005547f56d1e2540c429dcd66fbc7ce4c3628b185e7a278427a572f81c4c8d46c7cd77060405160405180910390a25b50505050565b600061211a826003600080815260200190815260200160002060010154611baf565b9050919050565b6000808390506121b1838273ffffffffffffffffffffffffffffffffffffffff1663379978eb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561217157600080fd5b505afa158015612185573d6000803e3d6000fd5b505050506040513d602081101561219b57600080fd5b8101908080519060200190929190505050611baf565b91505092915050565b61043a8061227a83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061220857805160ff1916838001178555612236565b82800160010185558215612236579182015b8281111561223557825182559160200191906001019061221a565b5b5090506122439190612254565b5090565b61042f806126b483390190565b61227691905b8082111561227257600081600090555060010161225a565b5090565b9056fe608060405234801561001057600080fd5b5060405161043a38038061043a8339818101604052606081101561003357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600181905550826002819055508060038190555050505061037b806100bf6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630944a2d214610067578063379978eb1461007157806348cbb2fc1461008f5780634eacad8c146100ad57806393468b85146100cb578063f52bccad14610103575b600080fd5b61006f61014d565b005b61007961022c565b6040518082815260200191505060405180910390f35b610097610232565b6040518082815260200191505060405180910390f35b6100b5610238565b6040518082815260200191505060405180910390f35b610101600480360360408110156100e157600080fd5b81019080803590602001909291908035906020019092919050505061023e565b005b61010b610300565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806103266021913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60035481565b60025481565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806103266021913960400191505060405180910390fd5b6000801b82146102f557816001819055505b806003819055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168156fe536f6c6f20656c206f776e657220707565646520656a656375746172206573746fa265627a7a723158205c3cb10cbc799264c5ee86d5a700ad17926b32a493ca4d9af15d8633fb3e087864736f6c63430005110032608060405234801561001057600080fd5b5060405161042f38038061042f8339818101604052604081101561003357600080fd5b810190808051906020019092919080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002819055508160038190555060018081905550505061037b806100b46000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80630944a2d21461006757806348cbb2fc146100715780634eacad8c1461008f578063b4dcff85146100ad578063f52bccad146100db578063fe72205a14610125575b600080fd5b61006f610143565b005b610079610222565b6040518082815260200191505060405180910390f35b610097610228565b6040518082815260200191505060405180910390f35b6100d9600480360360208110156100c357600080fd5b810190808035906020019092919050505061022e565b005b6100e36102fa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61012d61031f565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806103266021913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b60035481565b60025481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806103266021913960400191505060405180910390fd5b6001600081548092919060010191905055506000801b81146102f757806002819055505b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001548156fe536f6c6f20656c206f776e657220707565646520656a656375746172206573746fa265627a7a72315820d326686ffb525436a21378c5fccca2afd2e2a45af51663ae9fd9012377d0003164736f6c63430005110032536f6c6f20656c206f776e657220707565646520656a656375746172206573746f456c20656d69736f72206e6f2065737461206175746f72697a61646f206120696e696369617220756e20747261636ba265627a7a72315820447907481a7a0f971bd046c80f05f79c04fdc5a62d86c539fef22ac0ce1a225564736f6c63430005110032
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment