Solitary Heling primera 128 días de bloque de la cadena auto-pitón frío 042 Square Ethernet erc20 contador 12

Solitary Heling primera 128 días de bloque de la cadena auto-pitón frío 042 Square Ethernet erc20 contador 12

[Contenido Principal]

Erc20 la actualidad continúan utilizando los estándares de copiar el código de acuerdo a otro artículo de red inteligentes Bowen de tutoriales de anotar de un contrato se puede emitir fichas. 37 minutos común de aprendizaje.

(También acabado tomando notas tomó cerca de 51 minutos)

Detalles ver el final del proceso de aprendizaje de la pantalla de vídeo proceso de aprendizaje.

 

[Notas de Estudio]

Uno, que se encuentra en toda mi ordenador para configurar el nodo local sin almacenamiento casos, las llamadas de contratos simples transacciones iniciadas es incorrecto:

Otra llamada al método más simple aprendió ayer

Como Bowen: https://blog.csdn.net/weixin_34214500/article/details/87496864

`` `

contract.transact ({ 'de': sub_address, 'gas': 90000}). aprobar (gas_address, amount_of_token)

# Autorización gas_address se puede transferir amount_of_token fichas de sub_address

contract.transact ({ 'de': gas_address,

'Gas':. 90000}) transferFrom (sub_address, wallet_address, 1)

# La autorización de transferencia

`` `

Hoy en día, se intentó este método:

`` `

    # --- utilizando un método simple de gas ha iniciado la transacción, no existe un método clave privada de firma manual, error de tiempo de ejecución

    # R = contract.transact ({ 'de': spenderadd, 'gas': 90000}). TransferFrom (owneradd, toadd, tovalue)

    #print (r)

    '''

        Usando el método anterior, dada como sigue:

        Rastreo (llamadas recientes más última):

        Archivo "ptvsd_launcher.py", línea 43, en <módulo>       

        principales (ptvsdArgs)

        Archivo "__main__.py", línea 434, en el principal

        correr()

        Archivo "__main__.py", línea 312, en run_file

        runpy.run_path (objetivo, run_name = '__ main__') del archivo "runpy.py", línea 263, en run_path nombre_paquete = nombre_paquete, SCRIPT_NAME = fname) Archivo "runpy.py", línea 96, en _run_module_code

        mod_name, mod_spec, nombre_paquete, SCRIPT_NAME)

        Archivo "runpy.py", la línea 85, en _run_code

        exec (código, run_globals)

        Archivo "mint_contract.py", línea 169, en <módulo>

        transerFrom (w2add, wallet_address, w3add, 50)

        Archivo "mint_contract.py", línea 156, en traValueError: { 'código': -32.601, 'mensaje': 'El método eth_sendTransaction no existe / no está disponible'}

    '''

`` `

Y finalmente tuvimos que firma la clave privada de forma manual, y luego transmitimos mucho para el trabajo.

 

En tercer lugar, completó hoy Código Py

`` `

tiempo de importación

de web3 WEB3 importación, HTTPProvider

 

contract_abi importación

 

contract_address = "0xf89074dcdd8798b7e20b8cd88a9a38f27479411c" #CloudImage fichas de dirección de contrato, es mi propia creación (despliegue) contrato inteligente

 

# Las siguientes dos líneas definen el contrato es desplegar un nodo (nodo Creación) privada de la información y las claves públicas

wallet_private_key = "D8EF07D32389148E9DA6C54237BD5A39C92917D59340AA5D6064485C01E96FB2" bolso privada # zorro

wallet_address = "0x5227C3EF48B5A1bcF784593e46D9579D26a3b592" fondos públicos # zorro, dirección de cartera es, es un nodo de la red eth.

Las siguientes líneas definen en el nodo de información 2

w2pkey = "D5EC2E192E0362FF81B46F6AFB331772F85CE9B4A79F2A0962858301E72AAF1C" # privada

w2add = "0xe2d6c2f289c53B5aEA44C47293Ba179a3bfa21f0" # pública

 

Las siguientes líneas definen en el nodo de información 3

w3pkey = "1DCA9DF70412154D19FA78EFDAD1E9AC4AB60FB44DCFBC4323051DDF3141E98A" # privada

w3add = "0xb40599fB0366DCf0ffe86677b005b3f20Dfa29aE" # pública

 

Las siguientes líneas definen en el nodo de información 4

w4pkey = # "B2F1B869D373791B49A9058F4AF90E7AEEB883EAA783AC6244A6D6157B7C7BE6" 私钥

w4add = "0x70c8461366d5368B1E79CBFc2Acf4ba56C745977" # pública

 

w3 = Web3 (HTTPProvider ( "https://ropsten.infura.io/v3/79124269dc454e47bee73f964c971d3c")) # cadena está dentro de los parámetros de la zona de aplicación en infura.io a una dirección de nodo.

 

w3.eth.enable_unaudited_features () # asegurarse de que sabemos que puede suceder problema.

 

contrato = w3.eth.contract (dirección = contract_address, abi = contract_abi.abi)

# --- en la línea, contract_abi.abi, es una referencia a una lista de variables almacenada en el archivo contract_abi.py de abi

# --- todo el código es de direcciones web eth y lista de conexiones ABI para obtener un contrato designado objetos inteligentes contrato por contrato inteligentes

 

impresión (w3.eth.blockNumber) # impresión Identificación del último bloque de la red eth

 

def transferencia (toadd, v):

    nonce = w3.eth.getTransactionCount (wallet_address) # Aquí es un requisito, que inicia la transacción nodo, devuelve el número de transacciones iniciadas por la dirección del nodo especificado.

    '''

    El trabajo llevado a cabo para demostrar el valor nonce (que se escribe en el área de encabezado de valor nonce) calcula el valor de uso único no es un minero durante la minería

    Pero: https: //blog.csdn.net/weixin_33941350/article/details/86836707

    Una transacción requiere los siguientes parámetros

    era rawTx = {

        Nuncio: '0x14'

        gasPrice "0x3B9ACA00"

        gasLimit: '0xC20A',

        a: '0x5fb30123b9efedcd15094266948fb7c862279ee1',

        valor: '0x00',

        Datos: '0x' + '60fe47b1' + '000000000000000000000000000000000000000000000000000000000000000a'

    }

    nonce: un número récord de transacciones representan en la actualidad se ha enviado, para impedir ataques de repetición, tanto desde cero para cada nonce cuenta, para enviar cada uno, más 1, serán procesados ​​después de que se completó la superficie posterior nonce nonce actual del procesamiento. serie Square Ethernet (ETH y ETC) el envío de la transacción tiene tres correspondiente interfaz RPC, respectivamente eth_sendTransaction, eth_sendRawTransaction y personal_sendTransaction. (O contenido de transmisión configurado) de estas tres interfaces se requiere un valor de uso único parámetro de transmisión. Explicación de la documentación oficial de este parámetro es: número entero tipo, permite que el mismo número aleatorio enviado cubriendo las transacciones en un estado pendiente.

    Puede consultar la cuenta corriente nonce con RPC eth_getTransactionCount. Al mismo tiempo esta dirección y luego iniciar una transacción, si el eth_getTransactionCount valor nonce obtenidos por el mismo en un valor nonce, y después enviar la transacción con el mismo valor nonce, si la tasa es más alta que la transacción original, entonces el primer acuerdo será cubierta, inferior a la tasa de transacción original si se produce una excepción. Normalmente, el precio del gas suma transacción de sobrescritura en un estado pendiente necesita más de 110% de la transacción original.

    gasPrice: representa el precio del gas a las unidades wei. Si este es menor que los mineros gasPrice desea gasPrice, los mineros se negaron paquete.

    gasLimit: recurso de computación de gas es una unidad de medida, cada máquina virtual operación EVM Square Ethernet se ha asignado un número, para indicar que el gas puede ser consumido. Por lo tanto, el consumo de gas de cada transacción y la cantidad de cálculo y de memoria necesarios para este intercambio sobre. gasLimit establecer la capa de gas de la transacción puede ser consumido, si la transacción gas realmente consumida es menor que o igual a gasLimit, una transacción exitosa, y reembolsará el exceso de gas. De lo contrario, la transacción no sólo es obsoleta, no se puede devolver estos gases se han consumido, los mineros siguen recibiendo honorarios. La metodología para calcular el consumo real de gas * gasPrice.

    '''

 

    # El siguiente es un método más complejo de algún método SendTransaction () para los tokens de transferencia, ----

    # ---- método simple se refiere a Transact (), tales como:

    '''

    contract.transact ({ 'de': sub_address, 'gas': 90000}). apruebe (gas_address, amount_of_token) símbolo # gas_address autorización puede ser transferido de amount_of_token sub_address

    contract.transact ({ 'de': gas_address, 'gas': 90000}). transferFrom (sub_address, wallet_address, 1) # 授权 转移

    '''

    txn_dict = contract.functions.transfer (toadd, v) .buildTransaction ({

        'ChainId': 3, # se refiere a la red de prueba

        'Gas': 140000,

        'GasPrice': w3.toWei ('40 '' Fabrica '),

        'Nonce': nuncio,

    })

 

    signed_txn = w3.eth.account.signTransaction (txn_dict, private_key = wallet_private_key)

 

    resultar = w3.eth.sendRawTransaction (signed_txn.rawTransaction)

 

    tx_receipt = w3.eth.getTransactionReceipt (resultado)

 

    count = 0

    mientras tx_receipt es Ninguno y (recuento <30):

 

        time.sleep (10)

 

        tx_receipt = w3.eth.getTransactionReceipt (resultado)

 

        impresión (tx_receipt)

 

        contar + = 1

 

    si es tx_receipt Ninguno:

        retorno { 'status': 'fracasado', 'error': 'timeout'}

 

    processed_receipt = contract.events.Transfer (). processReceipt (tx_receipt)

    # --- seguimiento de eventos contrato escrito con la redacción de las funciones inteligentes llama contrato inteligente es diferente. -----

    # --- El tx_receipt como parámetro, es para localizarlo? Lo que provocó el evento para determinar la interacción?

 

    impresión (processed_receipt)

    Las variables # --- processed_receipt obtiene todos los eventos de difusión de información adquiridos por escuchar eventos (contratos de este evento de difusión dos mensajes:. Una es la dirección de originación de las partes en la transacción, son dos los comentarios)

   

    salida = "Dirección {} transmitido la opinión: {}" \

        .formato (processed_receipt [0] .args._from, processed_receipt [0] .args._to)

    # Línea de código en los dos informaciones se extraen utilizando objetos secundarios a .args, objeto args hijo contiene un nombre que identifique dos eventos en forma de los parámetros especificados de contratos inteligentes.

    # - Nota aquí el uso de processed_receipt [0], contiene una descripción de los contenidos de múltiples eventos de difusión.

    impresión (salida)

 

    retorno { 'status': 'añadido', 'processed_receipt': processed_receipt}

 

def aprobar (sendadd, receiveadd, sendprivate, approvevalue):

    Dirección nonce = w3.eth.getTransactionCount (sendadd) # autorizadas a iniciar el nodo procedimiento usado aquí

 

    # La siguiente llamada a la función iniciada por el contrato autorizado

    txn_dict = contract.functions.approve (receiveadd, approvevalue) .buildTransaction ({

        'ChainId': 3, # se refiere a la red de prueba

        'Gas': 140000,

        'GasPrice': w3.toWei ('40 '' Fabrica '),

        'Nonce': nuncio,

    })

    # Comenzado a operar armadura de clave privada del emisor

    signed_txn = w3.eth.account.signTransaction (txn_dict, private_key = sendprivate) # aquí para iniciar la autorización de uso de la clave privada para firmar el nodo de operación

    # Información de la transacción se envía a la red

    resultar = w3.eth.sendRawTransaction (signed_txn.rawTransaction)

    # Preparado para recibir enviará un recibo

    tx_receipt = w3.eth.getTransactionReceipt (resultado)

 

    count = 0

    mientras tx_receipt es Ninguno y (recuento <60):

 

        time.sleep (10)

 

        tx_receipt = w3.eth.getTransactionReceipt (resultado)

 

        impresión (tx_receipt)

 

        contar + = 1

 

    # Si recibe un recibo, inspección

    si es tx_receipt Ninguno:

        retorno { 'status': 'fracasado', 'error': 'timeout'}

 

    # Monitor de esta transacción (transacción) eventos de difusión

    processed_receipt = contract.events.Approval (). processReceipt (tx_receipt)

    # --- seguimiento de eventos contrato escrito con la redacción de las funciones inteligentes llama contrato inteligente es diferente. -----

    # --- El tx_receipt como parámetro, es para localizarlo? Lo que provocó el evento para determinar la interacción?

 

    impresión (processed_receipt)

    Las variables # --- processed_receipt obtiene todos los eventos de difusión de información adquiridos por escuchar eventos (contratos de este evento de difusión dos mensajes:. Una es la dirección de originación de las partes en la transacción, son dos los comentarios)

   

    salida = "Dirección {} transmitido la opinión: {}" \

        .formato (processed_receipt [0] .args._owner, processed_receipt [0] .args._spender)

    # Línea de código en los dos informaciones se extraen utilizando objetos secundarios a .args, objeto args hijo contiene un nombre que identifique dos eventos en forma de los parámetros especificados de contratos inteligentes.

    # - Nota aquí el uso de processed_receipt [0], contiene una descripción de los contenidos de múltiples eventos de difusión.

    impresión (salida)

 

    retorno { 'status': 'añadido', 'processed_receipt': processed_receipt}

 

# Autorización consulta de un nodo a otro nodo puede utilizar el saldo total actual símbolo

def getAllowance (owneradd, spenderadd):

    contract.functions.allowance retorno (owneradd, spenderadd) .call ()

 

# Confiado a utilizar el método de contratos de llamadas nodo fiduciarias transerFrom () tokens Principales para la transferencia de un número determinado de fichas a terceros Principales

def transerFrom (spenderadd, spenderprikey, owneradd, toadd, tovalue):

    # --- utilizando un método simple de gas ha iniciado la transacción, no existe un método clave privada de firma manual, error de tiempo de ejecución

    # R = contract.transact ({ 'de': spenderadd, 'gas': 90000}). TransferFrom (owneradd, toadd, tovalue)

    #print (r)

    '''

        Usando el método anterior, dada como sigue:

        Rastreo (llamadas recientes más última):

        Archivo "ptvsd_launcher.py", línea 43, en <módulo>       

        principales (ptvsdArgs)

        Archivo "__main__.py", línea 434, en el principal

        correr()

        Archivo "__main__.py", línea 312, en run_file

        runpy.run_path (objetivo, run_name = '__ main__') del archivo "runpy.py", línea 263, en run_path nombre_paquete = nombre_paquete, SCRIPT_NAME = fname) Archivo "runpy.py", línea 96, en _run_module_code

        mod_name, mod_spec, nombre_paquete, SCRIPT_NAME)

        Archivo "runpy.py", la línea 85, en _run_code

        exec (código, run_globals)

        Archivo "mint_contract.py", línea 169, en <módulo>

        transerFrom (w2add, wallet_address, w3add, 50)

        Archivo "mint_contract.py", línea 156, en traValueError: { 'código': -32.601, 'mensaje': 'El método eth_sendTransaction no existe / no está disponible'}

    '''

    Utilizando el método anterior # ---

    # --- valor nonce get

    Dirección nonce = w3.eth.getTransactionCount (spenderadd) # aquí utilizan para iniciar nodo operación de la transacción

 

    # La siguiente llamada a la función iniciada por unos contratos de terceros negociado

    txn_dict = contract.functions.transferFrom (owneradd, toadd, tovalue) .buildTransaction ({

        'ChainId': 3, # se refiere a la red de prueba

        'Gas': 140000,

        'GasPrice': w3.toWei ('40 '' Fabrica '),

        'Nonce': nuncio,

    })

    # Comenzado a operar armadura de clave privada del emisor

    signed_txn = w3.eth.account.signTransaction (txn_dict, private_key = spenderprikey) # utiliza aquí para iniciar la transacción (es decir, antes de recibir la autorización) nodo de operación de clave privada para firmar

    # Información de la transacción se envía a la red

    resultar = w3.eth.sendRawTransaction (signed_txn.rawTransaction)

    # Preparado para recibir enviará un recibo

    tx_receipt = w3.eth.getTransactionReceipt (resultado)

 

    count = 0

    mientras tx_receipt es Ninguno y (recuento <60):

 

        time.sleep (10)

 

        tx_receipt = w3.eth.getTransactionReceipt (resultado)

 

        impresión (tx_receipt)

 

        contar + = 1

 

    # Si recibe un recibo, inspección

    si es tx_receipt Ninguno:

        retorno { 'status': 'fracasado', 'error': 'timeout'}

 

    # Monitor de esta transacción (transacción) eventos de difusión

    processed_receipt = contract.events.Transfer (). processReceipt (tx_receipt)

    # --- seguimiento de eventos contrato escrito con la redacción de las funciones inteligentes llama contrato inteligente es diferente. -----

    # --- El tx_receipt como parámetro, es para localizarlo? Lo que provocó el evento para determinar la interacción?

 

    impresión (processed_receipt)

    Las variables # --- processed_receipt obtiene todos los eventos de difusión de información adquiridos por escuchar eventos (contratos de este evento de difusión dos mensajes:. Una es la dirección de originación de las partes en la transacción, son dos los comentarios)

   

    salida = "Dirección {} transmitido la opinión: {}" \

        .formato (processed_receipt [0] .args._from, processed_receipt [0] .args._to)

    # Línea de código en los dos informaciones se extraen utilizando objetos secundarios a .args, objeto args hijo contiene un nombre que identifique dos eventos en forma de los parámetros especificados de contratos inteligentes.

    # - Nota aquí el uso de processed_receipt [0], contiene una descripción de los contenidos de múltiples eventos de difusión.

    impresión (salida)

 

    retorno { 'status': 'añadido', 'processed_receipt': processed_receipt}



# Ejecución de transferencia de fichas ---

# R = de transferencia (w2add, 100)

#print (r)

 

# Nodo dos nodos ha sido autorizado el uso de un nodo 200 tokens

# R = aprueban (wallet_address, w2add, wallet_private_key, 200)

#print (r)

 

# --- dos nodos utilizando el nodo transmite un testigo al nodo tres

# K = transerFrom (w2add, w2pkey, wallet_address, w3add, 80)

#print (k)

 

# --- nodo dos nodos utilizan un enviado de testigo al nodo de cuatro

k = transerFrom (w2add, w2pkey, wallet_address, w4add, 50)

impresión (k)

 

# Consulta un nodo a otro autorizar a un saldo disponible dos fichas

r = getAllowance (wallet_address, w2add)

print ( 'tokens de autorización puede ahora Equilibrio:', r)

`` `

Hoy en día, después del intento real, confirmó finalmente, después de la ejecución de transacciones de autorización, se puede iniciar una transacción en nombre de la transacción por el nodo derrochador acepta autorizada para operar y asignará un número determinado de fichas nodo propietario estará autorizada para operar en esta transacción (autorización de la transacción la cantidad del número predeterminado de operación tokens) enviado a un tercer nodo.

Por lo tanto, esta transacción por transacción, la transacción se inicia nodo derrochador, los costos de gas de esta transacción serán pagados por el nodo derrochador e iniciar manualmente una firma clave privada clave privada ejecuta cuando el nodo es derrochador utilizado de transacciones para ser firmado:

`` `

    nonce = w3.eth.getTransactionCount (spenderadd) # operación inició este nodo de transacción de dirección que se utiliza aquí, es un nodo Spender iniciados los asuntos de transacción.

 

`` `

la firma de clave privada también es cierto:

`` `

    # Comenzado a operar armadura de clave privada del emisor

    signed_txn = w3.eth.account.signTransaction (txn_dict, private_key = spenderprikey) # utiliza aquí para iniciar la transacción (es decir, antes de recibir el Spender autorización) nodo operación clave privada para firmar

    # Información de la transacción se envía a la red

    resultar = w3.eth.sendRawTransaction (signed_txn.rawTransaction)

    # Preparado para recibir enviará un recibo

    tx_receipt = w3.eth.getTransactionReceipt (resultado)

 

 

`` `

 

[Rutina] descripción de la auto-stick

La última explicación de rutina, ¿por qué debería insistir en autoaprendizaje.

 

"Si no hubiera visto el sol, puedo vivir con esta oscuro, pero el sol ha dejado desolado, desolado ser informado."

- Emily Dickinson

Si quieres preguntarme cómo mirar a su vida anterior, creo que ayer y de hoy respuestas serán completamente diferentes.

Ayer, vivo en la satisfacción desolada, la paz de la mente consciente, tomó el salario mensual cuerpo de la bolsa, escuchando el tipo de comando, casi invariablemente vivido una vida; armonía mutua veces a la gente alrededor de los niños, a veces la lengua contra preocupado, muestran la vida trivial, el trabajo Chuiladanchang; éxtasis, el éxtasis, que se puede integrar en las maravillas del movimiento por la paz, el aplastamiento de marchar en el paso, marcando el tiempo. En ese momento yo creo que esto es la renuncia pausado de la vida ordinaria, que es mi destino hacia arriba.

Pero un día, vi un sol diferente y un diferentes circunstancias de la vida bajo el sol - que no es desoladora.

Hoy en día, yo vivo en el dolor desolado, deseo consciente de cambio, que marcha en el paso abrumado, observando el paso de la vida, que se perdió todos los ojos bien abiertos remordimiento ... ...

Jiangzai Sé que no puedo volver, sólo el cambio es la única dirección correcta.

 

En primer lugar, ¿por qué la vejez todavía está aprendiendo

Renunciar a muchas cosas para ir a cenar, ir canciones HI para jugar, ir al cine, teatro captura ...... tiempo, y luego se dedican a la edad de aprendizaje, si ya no parece que se haya llevado a cabo, atraídos por personas sin fin alrededor perplejos e incluso pobres menosprecio ......

Pero no quiero renunciar a voto de aprendizaje permanente.

porque -

No estoy de acuerdo con el status quo mi vida hoy!

Robert Kiyosaki nos dijo, a reflexionar sobre su vida actual no es lo que quieres, no es que la mejor motivación y la respuesta?

Pasado por la mayor parte de sus vidas, y luego sólo para encontrar una vez, en el momento de la vida en curso no es lo que quiere, que es un tipo de experiencia?

Sólo los corazones de sentimientos sinceros con el fin de responder a esta pregunta y, a continuación, dejar que el lenguaje rico no es retratado.

La mitad de la experiencia de viaje, pero se encontró que no va bien, ¿cuántas personas tienen el coraje de admitir todo el pasado está mal?

Y estoy dispuesto a decirle al más allá de mí: "Estás equivocado!".

Así que ha experimentado un error media vida, una gran presión y la edad de la cabeza, hay esperanza y medio desde el final del marco de la escalera y hacia abajo de nuevo, luego cojeó a subir otra escalera en ella?

Yo prefiero creer que hay esperanza!

Es por esto que quiero seguir para adherirse a la formación permanente de todas las razones para seguir adelante.

 

En segundo lugar, a esta edad todavía está aprendiendo estas técnicas hacen tiene sentido

pura tecnología esta edad son, de hecho, no tiene sentido.

Sin embargo, el interés puede ir más allá de los sentidos.

Pero la tecnología puede conducir a cambios en el pensamiento, este es el significado.

Invertir en su propia mente, sus ideas de reforma, este es el mejor conservado, más inversión a largo plazo, en el pasado nunca he invertido antes, señorita demasiado, entonces invertir en su propia mente desde el principio.

Robert Kiyosaki nos dice que el realmente ricos son ricos tiempo; la verdadera libertad es la libertad para decidir lo que están dispuestos a hacer.

Porque yo estoy dispuesto a hacer algo donde mi interés, así que espero tener la libertad de elección de ese día, aunque ese día puede ser todavía hoy desde tan lejos, pero quiero creer que más de un día para coger unos pasos de la esperanza de que, incluso dando un paso adelante.

Por otra parte, a pesar de que entonces podría haber sido incapaz de completar la totalidad dominar estas técnicas, pero la tecnología en sí misma es el despertar del corazón sean iluminados, inspirado, así que mientras entendemos que, creo que eso se lo dejo a huir de mí la más positiva el más rápido cuanto más cerca del punto siguiente, y no será abandonado por el futuro incierto que demasiado.

Entonces, ¿cómo puedo renunciar a perseguir la búsqueda de ritmo?

Quiero creer: sensación demasiado tarde, tal vez no sea demasiado tarde.

 

Estoy agradecido de haber sido afectado, os animo!

Q Mi número es: 578 652 607, esperamos escuchar su consejo.

 

 

[notas simultáneas de voz]

https://www.ximalaya.com/keji/19103006/273473338

 

pantalla de grabación de pantalla [Aprendizaje]

Enlaces: https://pan.baidu.com/s/1GK_TorQTh6V2NJy2cMFDOg

código de extracción: lpnh

 

Supongo que te gusta

Origin www.cnblogs.com/lhghroom/p/12569033.html
Recomendado
Clasificación