forked from Qortal-Forker/qortal
		
	/site/upload/creator/{address} now returns an unsigned ARBITRARY transaction, currently with pre-computed nonce
This commit is contained in:
		@@ -27,12 +27,23 @@ import org.jsoup.select.Elements;
 | 
				
			|||||||
import org.qortal.api.ApiError;
 | 
					import org.qortal.api.ApiError;
 | 
				
			||||||
import org.qortal.api.ApiExceptionFactory;
 | 
					import org.qortal.api.ApiExceptionFactory;
 | 
				
			||||||
import org.qortal.api.Security;
 | 
					import org.qortal.api.Security;
 | 
				
			||||||
 | 
					import org.qortal.block.BlockChain;
 | 
				
			||||||
 | 
					import org.qortal.data.PaymentData;
 | 
				
			||||||
import org.qortal.data.account.AccountData;
 | 
					import org.qortal.data.account.AccountData;
 | 
				
			||||||
 | 
					import org.qortal.data.transaction.ArbitraryTransactionData;
 | 
				
			||||||
 | 
					import org.qortal.data.transaction.BaseTransactionData;
 | 
				
			||||||
 | 
					import org.qortal.group.Group;
 | 
				
			||||||
import org.qortal.repository.DataException;
 | 
					import org.qortal.repository.DataException;
 | 
				
			||||||
import org.qortal.repository.Repository;
 | 
					import org.qortal.repository.Repository;
 | 
				
			||||||
import org.qortal.repository.RepositoryManager;
 | 
					import org.qortal.repository.RepositoryManager;
 | 
				
			||||||
import org.qortal.settings.Settings;
 | 
					import org.qortal.settings.Settings;
 | 
				
			||||||
import org.qortal.storage.DataFile;
 | 
					import org.qortal.storage.DataFile;
 | 
				
			||||||
 | 
					import org.qortal.transaction.ArbitraryTransaction;
 | 
				
			||||||
 | 
					import org.qortal.transaction.Transaction;
 | 
				
			||||||
 | 
					import org.qortal.transform.TransformationException;
 | 
				
			||||||
 | 
					import org.qortal.transform.transaction.ArbitraryTransactionTransformer;
 | 
				
			||||||
 | 
					import org.qortal.utils.Base58;
 | 
				
			||||||
 | 
					import org.qortal.utils.NTP;
 | 
				
			||||||
import org.qortal.utils.ZipUtils;
 | 
					import org.qortal.utils.ZipUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +60,7 @@ public class WebsiteResource {
 | 
				
			|||||||
    @POST
 | 
					    @POST
 | 
				
			||||||
    @Path("/upload/creator/{address}")
 | 
					    @Path("/upload/creator/{address}")
 | 
				
			||||||
    @Operation(
 | 
					    @Operation(
 | 
				
			||||||
            summary = "Build raw, unsigned, HASHED_DATA transaction, based on a user-supplied path to a static website",
 | 
					            summary = "Build raw, unsigned, ARBITRARY transaction, based on a user-supplied path to a static website",
 | 
				
			||||||
            requestBody = @RequestBody(
 | 
					            requestBody = @RequestBody(
 | 
				
			||||||
                    required = true,
 | 
					                    required = true,
 | 
				
			||||||
                    content = @Content(
 | 
					                    content = @Content(
 | 
				
			||||||
@@ -61,7 +72,7 @@ public class WebsiteResource {
 | 
				
			|||||||
            ),
 | 
					            ),
 | 
				
			||||||
            responses = {
 | 
					            responses = {
 | 
				
			||||||
                    @ApiResponse(
 | 
					                    @ApiResponse(
 | 
				
			||||||
                            description = "raw, unsigned, HASHED_DATA transaction encoded in Base58",
 | 
					                            description = "raw, unsigned, ARBITRARY transaction encoded in Base58",
 | 
				
			||||||
                            content = @Content(
 | 
					                            content = @Content(
 | 
				
			||||||
                                    mediaType = MediaType.TEXT_PLAIN,
 | 
					                                    mediaType = MediaType.TEXT_PLAIN,
 | 
				
			||||||
                                    schema = @Schema(
 | 
					                                    schema = @Schema(
 | 
				
			||||||
@@ -90,38 +101,44 @@ public class WebsiteResource {
 | 
				
			|||||||
                try (final Repository repository = RepositoryManager.getRepository()) {
 | 
					                try (final Repository repository = RepositoryManager.getRepository()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    AccountData accountData = repository.getAccountRepository().getAccount(creatorAddress);
 | 
					                    AccountData accountData = repository.getAccountRepository().getAccount(creatorAddress);
 | 
				
			||||||
                    if (accountData == null) {
 | 
					                    if (accountData == null || accountData.getPublicKey() == null) {
 | 
				
			||||||
 | 
					                        dataFile.deleteAll();
 | 
				
			||||||
                        throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.ADDRESS_UNKNOWN);
 | 
					                        throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.ADDRESS_UNKNOWN);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    byte[] creatorPublicKey = accountData.getPublicKey();
 | 
					                    byte[] creatorPublicKey = accountData.getPublicKey();
 | 
				
			||||||
                    byte[] lastReference = accountData.getReference();
 | 
					                    byte[] lastReference = accountData.getReference();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//                    BaseTransactionData baseTransactionData = new BaseTransactionData(NTP.getTime(), Group.NO_GROUP,
 | 
					                    BaseTransactionData baseTransactionData = new BaseTransactionData(NTP.getTime(), Group.NO_GROUP,
 | 
				
			||||||
//                            lastReference, creatorPublicKey, BlockChain.getInstance().getUnitFee(), null);
 | 
					                            lastReference, creatorPublicKey, BlockChain.getInstance().getUnitFee(), null);
 | 
				
			||||||
//                    int size = (int)dataFile.size();
 | 
					                    int size = (int)dataFile.size();
 | 
				
			||||||
//                    byte[] digest = dataFile.digest();
 | 
					                    ArbitraryTransactionData.DataType dataType = ArbitraryTransactionData.DataType.DATA_HASH;
 | 
				
			||||||
//                    byte[] chunkHashes = dataFile.chunkHashes();
 | 
					                    byte[] digest = dataFile.digest();
 | 
				
			||||||
//
 | 
					                    byte[] chunkHashes = dataFile.chunkHashes();
 | 
				
			||||||
//                    HashedDataTransactionData transactionData = new HashedDataTransactionData(baseTransactionData,
 | 
					                    List<PaymentData> payments = new ArrayList<>();
 | 
				
			||||||
//                            1, 2, 0, size, digest, chunkHashes);
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//                    HashedDataTransaction transaction = (HashedDataTransaction)Transaction.fromData(repository, transactionData);
 | 
					 | 
				
			||||||
//                    transaction.computeNonce();
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//                    Transaction.ValidationResult result = transaction.isValidUnconfirmed();
 | 
					 | 
				
			||||||
//                    if (result != Transaction.ValidationResult.OK)
 | 
					 | 
				
			||||||
//                        throw TransactionsResource.createTransactionInvalidException(request, result);
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//                    byte[] bytes = HashedDataTransactionTransformer.toBytes(transactionData);
 | 
					 | 
				
			||||||
//                    return Base58.encode(bytes);
 | 
					 | 
				
			||||||
                    return "true";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//                } catch (TransformationException e) {
 | 
					                    ArbitraryTransactionData transactionData = new ArbitraryTransactionData(baseTransactionData,
 | 
				
			||||||
//                    throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.TRANSFORMATION_ERROR, e);
 | 
					                            5, 2, 0, size, digest, dataType, chunkHashes, payments);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    ArbitraryTransaction transaction = (ArbitraryTransaction) Transaction.fromData(repository, transactionData);
 | 
				
			||||||
 | 
					                    transaction.computeNonce();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Transaction.ValidationResult result = transaction.isValidUnconfirmed();
 | 
				
			||||||
 | 
					                    if (result != Transaction.ValidationResult.OK) {
 | 
				
			||||||
 | 
					                        dataFile.deleteAll();
 | 
				
			||||||
 | 
					                        throw TransactionsResource.createTransactionInvalidException(request, result);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    byte[] bytes = ArbitraryTransactionTransformer.toBytes(transactionData);
 | 
				
			||||||
 | 
					                    return Base58.encode(bytes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                } catch (TransformationException e) {
 | 
				
			||||||
 | 
					                    throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.TRANSFORMATION_ERROR, e);
 | 
				
			||||||
                } catch (DataException e) {
 | 
					                } catch (DataException e) {
 | 
				
			||||||
                    throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e);
 | 
					                    throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            // Something went wrong, so delete our copies of the data and chunks
 | 
				
			||||||
 | 
					            dataFile.deleteAll();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return "false";
 | 
					        return "false";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user